卒業研究で作成したプログラムとその関連パッケージのダウンロードリンクを示す。 - 卒業論文 -- 全文:[[yb://medias/bachelor_work/main.pdf]] -- サマリ:[[yb://medias/bachelor_work/summary.pdf]] - プログラム -- [[yb://medias/bachelor_work/arv_nogsmtd.tgz]] -- [[yb://medias/bachelor_work/arv-gsmtd-mm.tgz]] -- [[yb://medias/bachelor_work/webcam-gsmtd-client.tgz]] - 関連パッケージ(xawtv) -- [[yb://medias/bachelor_work/xawtv-3.74-1.i586.rpm]] -- [[yb://medias/bachelor_work/xawtv-3.74-1.src.rpm]] -- [[yb://medias/bachelor_work/xawtv-misc-3.74-1.i586.rpm]] -- [[yb://medias/bachelor_work/xawtv-radio-3.74-1.i586.rpm]] -- [[yb://medias/bachelor_work/xawtv-webcam-3.74-1.i586.rpm]] ** 概要 + 三菱電機マイクロロボットアーム"MOVEMASTER EX"を、LinuxマシンからRS-232C経由で制御する。 + USB接続のWebカメラから読み込んだ画像を元に、MOVEMASTERに物体を追跡させる。 ** やったこと + MOVEMASTERとLinuxの通信用ドライバを自作した。RS-232Cクロスケーブルも自作した。 + Webカメラからの画像はxawtvを使って取得した。xawtvを一部改造して共有メモリに書き込ませた。 + 共有メモリに書き込まれた画像データを元に、以下の計算を複数プロセスで並行処理させた。 ++ 指定された色の重心位置 ++ 輪郭線とその角度の計算 + 色の重心位置を追尾するよう、MOVEMASTERにコマンドを送信するようにした。 以下のプログラミング技術を勉強できた。 - Linux用キャラクタデバイスのデバイスドライバ作成 - RPMのパッケージング - 共有メモリ, セマフォの使い方 - TCP通信によるキャラクタベースの独自プロトコルの作成と、子プロセスfork型サーバプログラム 卒業「研究」というよりは卒業「制作」。 ** プログラムのコンパイル '' ※2003/11 - 2004/1 にかけてプログラミングしています。2009年現時点では相当古くなっていますので、おそらくそのままではコンパイル出来ないと思います。 '' ライブラリやxawtvの改造など、順番も重要です。 対応OSはTurbolinux 8 workstation 対応Linuxカーネルは kernel-2.4.22 以上.2.6は未確認. 1. 最初にmovemasterのキャラクタデバイスドライバをコンパイルする。 arv-gsmtd-mm.tgzの中にmovemasterというディレクトリがあり、その中のmm_driver.cをコンパイルします。 $ gcc -c mm_driver.c -Wall -Wstrict-prototypes -O -pipe RS232C(Serial)サポートを外したカーネルで使ってください(重要)。 2. 次にGSMTD(共有メモリへのアクセスをTCP越しで行うデーモン)をコンパイルします。 arv-gsmtd-mm.tgzの中にgsmtdというディレクトリがあります。Makefileがありますので、makeコマンドでコンパイルします。 3. libgsmtdclient.so をコンパイルします。 gsmtd/libgsmtdclient ディレクトリの中にMakefileがあります。 コンパイル後は、libgsmtdclient.soを適当にLD_LIBRARY_PATHを通したディレクトリにコピーします。 4. arv本体をコンパイル arv-gsmtd-mm/arv/Makefileを最初に実行し、arv_common.o を作ります。その後、各サブディレクトリのMakeを実行します。 libgsmtdarv.soを適当にLD_LIBRARY_PATHを通したディレクトリにコピーします。 5. xawtvのコンパイル後のソースツリーを入手。 webcam-gsmtd-client.tgzの中のREADME.euc-jpを参照。 6. システムの実行 + mm_driverをロード後、mm_serverを実行し、telnetなどで接続します。MOVEMASTERのコマンドをtelnet端末から送信し、MOVEMASTERが動く事を確認します。 + gsmtdデーモンを起動し、共有メモリを初期化します。これもtelnet経由で簡単に動作確認できます。 + USBにWebカメラを接続し、xawtv-3.74/console/webcam-gsmtd-client を起動します。 + arvcellaton, arveffect, arvwindow, arvmonitor, arvviewer, arvmaster の順に起動します。 + 最後に arvmm を起動すると、重心位置の計算結果に基づいてMOVEMASTERへコマンドが送信されるようになります。 arv-gsmtd-mm/arv/arv.sh を実行すると、2. 以降を自動で処理してくれます。