今日の一言
2010/06/30(Wed) 急がば急げ! [長年日記]
_ [Linux][Ubuntu][FC][雑記] Thinkpadの加速度センサで遊ぶ(準備)
自分が持っているのはT43なので、それでやってみる。
Linux の場合には hdaps というのを入れるのが手っ取り早い。
まず、ここ(http://sourceforge.net/projects/tpctl/files/tp_smapi/)からソースをDL(おそらく最新は0.40)
解凍して
$ sudo make install HDAPS=1
追記:一部のデスとりビューションでは、
$ sudo apt-get install hdaps-utils
で入れられるっぽい。(hdaps-とかも入るので、こちらをおすすめ)
で、それを組み込む。
$ sudo modprobe hdaps
*おそらくコンパイルにカーネルソースが必要なので、それも入れておくこと。
これで、「sys/devices/platform/hdaps/calibrate」にキャリブレーションの値が、「/sys/devices/platform/hdaps/position」に現時点の位置が取り込まれる。
*テキストデータなので、lessとかでも読める。
あとはこれを読み込んで、どうにかするプログラムを書けばいい。
以上!
*IBMのThinkPad以外の加速度センサ内蔵PCでどうすればいいかは不明。時間が出来たらやる。
_ [Matlab][C++][Linux][FC][Ubuntu][Windows][雑記] mexを使ってC(C++)のプログラムをMatlab上で走らせる
基本となるソース(hello.c)は大体こんなの。
#include <stdio.h> #include "mex.h" int hello_world(int nlhs, int nrhs) { printf("Hello World in c func nlhs = %d nrhs = %d\n",nlhs,nrhs); return 0; } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mexPrintf("Hello World nlhs = %d nrhs = %d\n",nlhs,nrhs); hello_world(nlhs,nrhs); return; }
で、matlab上で、
>> mex hello.c
としてコンパイルし、
>> hello
で実行。(hogehoge.cのhogehogeが関数名になる)
また、mexでのコンパイル時には、gccとほぼ同様のオプションが指定できる。
なので、こんな書き方が出来る。
>> mex CC=g++ CXX=g++ hogehoge.c -lhoge -L./
これで、.cのファイルをg++でコンパイルしてくれるようになり、libhogeをリンクするように指定できたはず。
まあ、あれだ。
プログラムは、mainの代わりにmexFunctionを使う、コンパイルはgcc(g++)の代わりにと思えば大体OK?(まったくもって厳密ではないが)
*printfによる表示が、matlabにコントロールが戻るときに一度に行われるっぽい?ので、バグ探しとかは難しそう。
- scanfのような、入力を求める関数を呼ぶと、途中で終わってしまう?
_ [OpenCV][Matlab][C++][Linux][FC][Ubuntu][Windows][雑記] mexを使ってC(C++)のOpenCVを使ったプログラムをMatlab上で走らせる
次のような感じで特に問題はないはず。(ほぼOpenCVのサンプルと同じ)
ソース名:mex_opencv.cpp
#include <cv.h> #include <highgui.h> #include <ctype.h> #include "mex.h" int capture() { CvCapture *capture = 0; IplImage *frame = 0; double w = 320, h = 240; int c; capture = cvCreateCameraCapture (0); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h); cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE); while (1) { frame = cvQueryFrame (capture); cvShowImage ("Capture", frame); c = cvWaitKey (2) & 0xff; if (c == '\x1b') break; } cvReleaseCapture (&capture); cvDestroyWindow ("Capture"); return 0; } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { capture(); return; }
コンパイル:
>> mex -I/usr/local/include/opencv -L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore mex_opencv.cpp
どうも
`pkg-config --cflags opencv`
とか
`pkg-config --libs opencv`
は使えないっぽいので、そのまま書く。
それ以外はgccとかでコンパイルする際とほぼ同じオプションでいいはず。
実行は
>> mex_opencv
でOK。
(「Esc」で終了するはずだが、Windowがきちんと消えない・・・要改善)
以上!