CMS−V23SETSV
(錘として手じかのヘルピングハンズに付けてみました。カメラの大きさはTrevaと大体同じなので、W6の頭にも
内蔵できる大きさです。)
先週から考えていたのですが、いま作業中のVisualBasic2008のプログラムからOpenCVを使おうとすると、 いろいろ調べることや、作業が多そうだと思いましたが、元のVisualC++Var6で作った、床に散らばった ボールを集めたりするプログラム(W6v3d)のほうには簡単に統合できそうなことに、気がついたというか、思い出しました。
そんなわけでW6v3dのソースをVC++2008でコンパイルしてみました。すると、シリアルポート操作用の erslibでエラーが出ました。VC++2008のダウンロードページを読む限りはPlatformSDKは 元々含まれているようですが、何か違うようです。以前のものを使えば追加調査が要らず手っ取り早いだろうと思い 、古いほうのPCからVC++2005の時に使っていたPlatformSDKをコピーし、パスを通しました。 すると、エラーが収まり、W6と通信できるようになりました。
W6のカメラのデータをOpenCVで画像を保持する構造体にセットする部分だけ作れば、ライブラリーが 利用できそうなので、まずここを作って遊んでみようかと思いました。元々W6用にCで作った画像認識用の 関数と、対応するOpenCVの関数の使い方が似ているので、わりとW6の既存プログラムと相性が 良さそうだと思いました。
USB-シリアルコンバータ(FT232RL USB・RS232C変換モジュール)
WindowsUpdateからダウンロードしたドライバで、VistaSP1でも使えました。 W6のプログラムダウンロードに使ってみましたが、ボーレートは変えていないのに時間が多くかかりました。 何かありそうですが、まあプログラムは正常に動いたのでデータはちゃんと送れている様です。しばらく そのまま使ってみようと思います。
IplImageという、OpenCVの多くの関数でイメージを渡すために使う構造体にW6のカメラで撮影したイメージを セットする方法を試しました。これまたハマルのではないかと身構えていましたが、1時間ほどの調査&作業でうまく いきました。これでW6を動かしながらOpenCVが使えるようになりました。
ずっと「音声認識機能は使えない」という印象があったので良い意味で認識が覆されました。 なかなか使えそうなので、積極的に取り入れてみようかと思いました。
図面と首関節の一部
首が3自由度、目が両眼それぞれ水平方向に動かす1自由度です。瞼のギミックは後日装備の予定です。
首のRCサーボはSANWAのSRM−141HRです。SRM−101Zが沢山あるので
使おうと思ったのですが、試しに図面を引いてみたら思ったよりも大きくなってしまったので、
2〜3等身でデザインして30cm未満の身長に収まるように、ストックの中から比較的小型の
サーボを選びました。
ギギギーっといった感じでゆっくり動かすと不気味?かと思うので、0.07sec/60度のハイスピード
も良い感じが出るのではないかと思っています。
目のRCサーボは大きさだけで選んでUNIの首からとったGWSのNARO PLUS/BB にしました。動きが遅いこと、リニアリティーが良くないことなど、用途に合わない側面も ありますが今回は目をつぶります。
余談ですが、名古屋近辺の博物館では、山車からくりの人形が展示してあるところ幾つかあります。 いままで見た中では、犬山市の「犬山市文化資料館別館」が、小さい資料館ではありますが、人形を近くから よく見れて良かったです。 ためしに動かしてみられる人形の展示が特徴的でした。操作が「重っ」みたな感じでした。
頭とベース
首だけでは動かせないので、首に加えてとりあえずベースを作りました。
写真では、目となるカメラと目を水平方向に動かすためのRCサーボをセロハンテープで
仮止めしてあります。写真の下の方に写っている赤いものはUSBハブです。PCとはRCサーボを
制御するマイコンまで含めて、このハブ経由で接続するので、USBケーブル1本で接続
することとなります。配線が終わったら2〜3等身のフィギュア、もしくはパペット風のカバー
を作ろうと思っています。
RCサーボを少し動かしてみた範囲では、特に予期しない部品同士の干渉等は無くOKでした。 ただ、目の軸については工作がいい加減だったので、左右の目の軸心が、パッと見て分かるほどずれてしまいました。 気になるので、正確に組みあがる組み立て方と構造を考えて 直そうと思いました。
今日の部分を作りながら、たまにはサクサクと無心に作れる木工工作もいいものだな〜と思いました。
スケッチ
さらさらっ・・・とスケッチしました。メカの図面を1/1でプリントしたものを時々重ねて調子を見ながら描きました。
骨格材
ムクで作ると粘土(ラドール)の乾燥時間が長くなり、材料もより多く使うので、粘土で
箱を作り、それを骨格材にしました。箱を作るための板は5mmの角材の上で棒を転がし
て、麺の生地を伸ばす要領で、5mm厚の板にしました。
板の裏表から均等に乾燥させることを忘れたので、だいぶ反ってしまいました。
眼球の埋め込み
CMOSカメラの稼動範囲をカバーできる空間を確保するため、半径20mmの発泡スチロールの
球(名古屋の東急ハンズで購入)を半分に切って埋め込みました。眼球は半径19mmで設計している
ので、当初は19mmの球を埋め込もうかと考えていましたが、1mmくらいのクリアランスは
とっておいたほうがいいかと思い、手間なく使える既製品を利用することとしました。
顔らしくする
あとはフィギュアの原型製作の要領で、適当に製作中です。まだちょっと目が「ギョロッ」としすぎのようです。
顔前面の型
バランスを整えつつ、表面の凸凹を均していきました。
顔後面の型
全体的に5mm程度小さい発砲スチロール型を作り、それを利用して中空の型を作りました。
なんだか「ロボットを作っている」感じがしなくなってきました。
少し飽きてきたので、しばらくプログラムを書こうかなーと思いました。
上面の穴が開いている板は4mm厚で、元からφ7.5の穴が30mm間隔で開いている板を 使いました。その他の部分は厚さ9mmの板です。掃除機の負圧に耐えられるよう気をつけました。 まだ試していませんが、負圧で壊れることは無いだろうと思っています。使ってみて穴が足りない ように感じたら、あとからドリルで穴を増やそうかと思っています。
製作に当たっては、こちらのHPを参考にさせていただきました。
http://www1.megaegg.ne.jp/~atiw4/vf.html
ちょっと心配だった本体の強度や、中空の型の強度は問題ありませんでした。プラ板を挟む 固定枠の方が剛性不足で、成型時に、型にプラ板を押し付けた時、歪むせいで本体となかなか密着 しなかったことに加えて「ゲタ」の高さ不足や、板が大きくなった分の加熱のコツをつかめていな かったことなどいろいろあって、型の下のほうの成型がうまくいきませんでした。 固定枠の剛性アップと、ゲタを準備して再トライしようと思いました。
『人とロボットの<間>をデザインする』 山田誠二 監修・著 (東京電気大学出版)
コミュニケーションロボット―人と関わるロボットを開発するための技術
石黒 浩、神田 崇行、宮下 敬宏 ・共著、 人工知能学会 (編集)(オーム社)
溶きパテの塗布
使い慣れたタミヤのパテを溶いて塗布しました。こうすることで、キズや細かい起伏が
分かりやすくなり、また、表面が硬くなるのでヤスリがけがしやすくなります。
ダミー眼球撤去
目の周りを仕上げるため、ダミーの眼球として空間確保用にセットしていた発泡スチロールの
半球を外しました。
ヤスリがけ
溶きパテの塗布と、乾燥後のヤスリがけ(#240と#320のサンドペーパー使用)
目の穴をふさぐ
目の穴をそのままにしておくと、成型時に穴が開いてしまうので、適量の負圧が
かかるようにφ5ほどの穴を底に残して塞ぎました。
バキュームフォーム
前回に比べて、だいぶ良いあんばいに加熱できたので、薄くなりすぎた部分はありませんでした。
成型完了
完了後の記念写真です。1回失敗したので前面の成型品も2個あります。プラ板の加熱中に
プラ板がコンロに触れてしまったので、額にキズが入ってしまいました。でも形状は
OKだし、結局1ペア余計にできたので、キレイに出来なかったほうは、フレームへの取り付け
方法の試行錯誤用に利用しようと思います。
眼球カバー(形状トリム前)
半径20mmのポリカーボネート製の半球の外周を切って、形状トリムを行うべくサインペンで
印をつけました。
カメラカバーの大きさ確認
前面外装に裏側から置いてみて、視線を振った時に隙間が開かないか確認しました。
左右のカバーでトリムラインを変えてみました。写真右手のカバーは切りすぎでした。
外装装着
フレーム頭頂部に工作用紙で仮に、現物あわせをしながら外装を支える部品を付け、
その上に外装を装着してみました。
胴、腕、脚など大まかに形を作って一度乾燥させて「芯」とします。
形が決まったら、「からくり人形」的なメカで腕を動かせるようにし、あとは 上半身が「息づいている」ような感じで動くようにしようと考えています。
フレームには2mmの木ネジで固定しました。2日近くがんばった
にもかかわらず最大約1mmの隙間があいてしまいました。(トホホ)
耳はバキュームフォームをせずに粘土で作ったままにしようと考えています。そこで、
なるべく軽くと思い、試しに買ってストックしてあった「シルキークレイ」という
紙粘土を使ってみました。いつもの石質粘土とはだいぶ質感が違いました。このまま
使うかは、しばらく試して考えようと思いました。
試し塗りしたカメラカバー・・・グラデーションに失敗しました。
プラシンナーで簡単に落とせるので、絵の具の乾燥を遅くするメディウムを混ぜて再挑戦します。
外装はプラモデル塗装用のMr.Colorを使いました。「フレッシュ」に「ホワイト」
を混ぜて色白にし、「レッド」数滴混ぜて赤みをだしました。スプレーで塗装すると綺麗
になるのですが、部屋が汚れるので筆塗りにしました。
虹彩と白目の境をきれいな円形にするため、カバーの裏側から型紙を張り、それを
「楽しい工作」の車輪に付けて、回転させながら油性ペンでマーキングしました。
マーキングを頼りに、裏側からアクリル絵の具で塗装しました。写真は白目の
部分を塗り終えたところです。
眼球カバーを取り付けて、眉と口をアクリル絵の具で描きました。虹彩の色は
アニメっぽく明るいグリーンにしました。フィギュアは目にハイライトや影を描き
込みますが、コレの場合は眼球が「球」で光沢があり、自然にハイライトや影が
入るので、フラットな塗装としました。
髪の取り付け
ムービー(880kByte)
各RCサーボを動かすときに、目標位置までの「補間」は無しの最高速度で動かしてみました。
いいかげんフィギュアの製作工程の類の作業にも飽きたので、これからしばらく、PC側の制御ソフト を作ろうと思います
最後に触ってから何年も経つコードなので、一生懸命思い出しながら、条件を変えたことによって 表面化してきたバグつぶしをしています。
距離を求める関数にセットするため、カメラの視野の簡易計測も行いました。CMS−V23SETSV の視野は水平方向が約25度、垂直方向が約19度でした。ゲームボーイカメラよりだいぶ狭いです。
何回か測定してみたところ、距離2000mmのところが400mmなどと出てきました。ソフトに自信が なかったので途中の全ての関数を見直し、処理の途中の数値から、電卓で3角測量の検算まで したところでカメラの平行が狂っていることに気がつきました。(というか、外装を何ヶ月も かけて作っているうちに、未調整だったことを忘れていました。)
眼球を動かすRCサーボを少しづつ動かして、見た目で平行になるように調整してゆきました。 その後、眼球を動かして、元に戻すとで約2300mmの距離の場所が1400〜4500mm位に出てきました。 眼球を動かすのに使っているGWSのNARO PLUS BBの角度の再現性や、最小分解能 からすると、この程度になってしまうようです。CMS−V23の画角の狭さといい、がっかりな 結果でした。
具体的な性能の目標があるわけではないので、しばらくこのままソフトの開発を続けていくことにしました。
ラジコンカーのランクル40を利用したロボットのセンサーヘッドの構想を進めつつ、 CMS−V23の事を踏まえて、画角の広いWebカメラを発注しました。新ロボットの名前は、自分としては初めて作る野外用の ロボットということで「アース・ローバー01」に決めました。(最近マース・ローバーの本を 読んで感動したので、その影響です。)
広角レンズではないので、画面で見てもキャリブレーション前後で差は微妙でした。 そのうち環境を整えて、ステレオビジョンによる距離計測に、どの程度影響があるのか 試してみようと思いました。
キャプチャした画像
赤い点は「マッチングが取れて、距離が出せた場所」です。左右の画像で点の数が違います。
そういうマッチングに失敗した場所はいいかげんな距離が出ます。
これからどうやって空間認識プログラムを発展させてゆこうか、手を動かしながら考え中です・・・
エッジ抽出したあと2値化した画像
OpenCVの関数を利用しました。エッジは水平方向にとっています。
首ロボの眼球カバーの透明度の影響で、左側の画像がすこしピンボケになってしまいました。 エッジ抽出にも左右の画像のマッチングにも悪影響が出ているので、何とかしないといけないなーと 思いました。