元のムービーは320×240の30fpsのwmvフォーマットの動画です。ここで公開しているムービーは何度も フォーマット変換がかかっているため、解像度が落ちていますが、cvCalcOpticalFlowPyrLK関数の処理 の結果、シーンの中の動く特徴点から、RGBの線分が出ているのが分かりました。
結果として、「動いているものを探す」用途に使えそうだと思いました。この処理の結果、ベクトルの配列が 得られるので、ベクトルの大きさと方向でフィルタをかけ、2値化イメージを作ってラベリングすれば、 ステレオマッチングの処理と組み合わせて、「どの程度の大きさのものが、ロボットから見てどの場所にあり、 どちらへ向けて移動している」みたいな情報が取れそうだと思いました。
その動くものを「自動車だ」と判定するような処理の実装も、トライしてみると面白そうだと思いました。
2バイト単位など、細かい単位でロボット側のPCに直につながっているマイコンから、マイコンの シリアルポート経由でつながっている別のマイコンにデータを中継させると、自分の書いた、いまH8/3664側に インストールしてあるプログラムは、RCサーボの制御信号を作るループを回すのを優先させる都合、データを 取りこぼすようになっているのを忘れていました。
下のビデオは、試しに全腕関節を加減速制御ありで動かしてみたものです。
プログラムをステップ実行しながらデバグしていて「なんか統合環境の動きが、微妙におかしくない?」と 感じたので、そろそろサービスパックが出ていそうだなということで調べてみると、出ていたので さっそくVisual Studio2010 SP1をインストールしました。これから調子を見てゆこうと思います。
移動や物体ハンドリングの基本的機能がまだ製作途中ですが、飽きてきたので、またしばらく画像処理/認識 系のプログラミングに戻ろうかと思いました。
mbedのプログラムの方は、移植にあたって大きく考え方を変えたコーディングが必要ならば 手間取るな〜と思っていましたが、ハードに直結する部分のみ変えれば同じ流れで行けそうなので 簡単でした。
その他の作業として、右腕のRCサーボのケーブルを胴体の中まで引き込みました。今回はW6v3まで 使わなかった分電基板を途中に入れて電源ケーブルをまとめたぶん、配線が少なくなってスッキリしました。
1.No.1サブCPUボードへのレベル変換IC追加
No.2サブCPUのシリアル端子の信号はRS232レベルなので、
mbed LPC1768のシリアル端子の信号レベルをRS232レベルに変換するため
No.1サブCPUボードにADM3202を追加しました。
2.ソフトの転用
UniのサブCPU用プログラムを転用し、RCサーボ制御用以外の機能を除いたものを作りました。
(元のままだとH8/3664の内蔵RAMでデバグできないサイズで不便なためです)
一応新しいプログラムなので、インストール済みだけれど未使用だったVisual C++2010Express Editionを使い始めました。
これから新しく作るプログラムはVisual Studio 2010 Express Editionで作ってゆく予定です。
スプレーはアサヒペンの「アクリルスプレー」です。色の種類は少ないですが安い
ので最近良く使っています。このサイズでだいたい200円で、感覚的にはプラモデル用に売っているスプレーの
1/7くらいの値段です。このスプレーはプラ板を侵す事もなく、適当な食いつきで使えました。
筆塗りのエリアはプラモデル用のMr.Colorを使いました。
移動ユニットも接着剤が付いているところなど、だいぶプラスチックが変色 しているので、この際こちらも塗装することにしました。移動ユニットは、移動用のモーター周辺に 遮光用のアルミフォイルをセロハンテープで貼った後がきたないので、これもキレイに溶剤でふき取り 塗装前の準備としました。

アースローバーを塗装したスプレーが残っていたので同じ黄色にしました。
タイヤを変更して元のカバーが付かなくなったので、ついでに新しくカバーも作りました。 バキュームフォームで・・・と、ちょっと思いましたが、面倒なので板で組んだ直線的デザインにしました。

正確に組みあがるように、フレームの肩周辺の開口部分はあとからルーターで切り抜きました。

かなり感じが変わりました。今度は広い場所用なので、胸部ユニットの旋回機構を省いて内部スペースを
広めにしました。
また、走行安定が良くなるように、重心も少し下げました。塗装の後で、腕を付けます。

前回の走行テストでは、タイヤのグリップがいまいちだったので、楽しい工作シリーズの「ピンスパイクタイヤ」と 交換してみました。タイヤのカバーが付かなくなりましたが、特に改造等の必要なく、取り付けることが出来ました。
どんな調子か、早速走らせてみました。走らせるにあたっては、腕と首を付けると約1kg 重量が増えるので、それを想定してバッテリーをウェイト代わりに載せて走らせました。
アスファルト、ブロック、土、刈ってある芝生で試してみました。転がり抵抗を少なくする様に 設計されている、細くて硬いゴムのスリックタイヤの割には良く走りました。意図したとおりに 出来たので、このまま進めようと思います。
アースローバーは比較的、走破性が高くて、NetBookを載せられるのは良いのですが、 持って歩くのが重く、だいたいはNetBookを搭載せずに、手で持って後ろをついて歩く 形で動かしています。それならば重い車体を使う必要も少ないので、W6の移動ユニットに アースローバーのセンサーヘッドを移して、しばらくこちらで画像認識関係のトライをしようか ・・・と考えています。
入力電源:7.2V/19.4Wh LiIon、または7.2V/5.04Wh NiMH電池
出力1(RCサーボ、走行用のDCモーター等駆動用):5V/4A Max、定常は0.6A程度
出力2(5Vマイコン等駆動用):5V/1A Max、定常は0.3A程度
出力3(3.3Vマイコン等駆動用):3.3V/1A Max、定常は0.3A程度

電源ユニット。3回目の組み立てなので、わりとすっきり出来ました。
本当は新調したいところですが、代替のステップダウンDC−DCコンバータを見つけられていないし W6の部品が寿命的にも問題なく使えるので再利用します。
速度制御中などもRCサーボが問題なく動くか確認するため、接続したままにしておきました。
mbedのpwmOutクラスがチップの機能をどう使っているのか知りませんが、今日試したことは問題 ありませんでした。簡単に置き換えが出来そうだし、拡張性や処理能力も高いので、アースローバー のマイコンをH8/3664からLPC1768に変えようかな〜と考えました。
プロミングの練習課題としては、W6の元の制御プログラムのアルゴリズムを踏襲しながら、 ターミナルソフトを経由しテンキー で前後左右へ操縦、その後、操縦機能はそのままに、車輪の回転を、1回転で止めるように制御する ようにしてみました。
インターフェイス対象はモーターコントローラーICのTA8440(1ピン単位のデジタル出力、 PWM出力機能)、基板の一部の 電源ON/OFF用のDIPリレー(ポートのドライブ能力)、車輪につけたフォトインタラプタ(1ピン単位のデジタル入力)、PSD距離センサ(A/D入力)そして、LPC1768にプログラムを 書き込むときに利用するUSB経由のシリアル通信(PCにドライバをインストールするとCOMポートとして見えるようになる)です。結果としては、全て問題なく動作しました。
新しいマイコンの使い初めで、毎回ひっかかる、チップの初期化がmbed任せなので、ちょこちょこクラス の機能確認をしながら、3時間ほどでロボットが動くところまで行きました。 マイコン以外の部分が、何年も使い慣れたロボットのハードとはいえ、あまりの簡単さに感動しました。
参考に回路図とソースコードを置いておきます。
上記の流れに沿って、今週はI/Oボード改造のための回路図を描きつつ新ロボットの移動ユニット (無限軌道式)の設計も進めました。