SpiritはRaspberry Pi 2とカメラを使ってKHR-3HVを自律型ロボットにしたものでした。ただ、少なからず機械工作・電子工作が必要でした。
最近はより小型のRaspberry Pi Zero (W)が販売されているので、より簡単に類似の改造をすることができます。以下に例を示します。
Raspberry Pi ZeroからUSB DUADアダプターのシリアルポートを介してKHR-3HVのコントロールボードRCB-4に各種コマンドを送信します。ここは本来KONDOのモーション作成ソフトウェアHeartToHeartで使われるポートですが、KONDO RCB-4リファレンスキットとしてコマンド仕様が公開されているので、これに従って次回ロボットを動かします。
Raspberry Pi Zeroのカメラで環境を把握(例:床の線を読む)、RCB-4のモーションでロボットを動かす、という自律型ロボットとして最低限の入出力機能を搭載することができました。
使用部品
- 市販品
- KHR-3HV 本体、バッテリ
- Raspberry Pi Zero W
- Raspberry Pi Zero 用ケース
- USBケーブル A-microB
- モバイルバッテリー : 適宜。写真はELECOM DE-M04L-3015BK
- USB OTGケーブル microB(M)-A(F) : Raspberry Pi ケースキットにも付属
- KONDO DUAL USBアダプター (もしくは シリアルUSBアダプターHS)
- 10cm程度のサーボ用ケーブル (DUAL USBアダプターとKHR-3HVの接続に使用)
- Raspberry Pi用カメラモジュール
- Raspberry Pi Zero用カメラケーブル (ケースキット付属のものでは長さが足りないため)
- M2x8 タッピングビス (KHR-3HVに付属、樹脂への締め込み用)
- M2 低頭ビス
- 強力な両面テープ (屋外掲示用など)
- オリジナル機械部品 --- 設計図DXF/STLファイル(ZIP)
- ベースプレート (ABS 2mm厚の板を切削)
大きな半径の円弧の方が背中側になります。
- スペーサー (ABS 2mm厚の板を切削)
カメラフレームとサーボホーンのネジが干渉しないように使用します。
- カメラフレーム (3Dプリント)
以上です。
組み立て手順概略
ベースプレートとスペーサーを適当なネジで締結して組み立てた後、KHR-3HVの頭部パーツを外して空いた首のサーボ(あるいはダミーサーボ)のサーボホーン部分に取り付けます。その後カメラフレームをネジで固定します。モバイルバッテリーとRaspberry Pi Zeroケースは両面テープでベースプレートに固定します。
注意事項
メカの干渉について
首の回転軸を使う場合もベース自体はフレームと干渉しないようになっていますが、このサイズを超える部品を上に乗せる場合は首を回すとバックパック等と干渉する可能性があります。適宜スペーサーとなるものを何か間に入れる等工夫が必要になります。首にモーターが入っていない場合は干渉を気にしなくてよいので配置により自由度があります。カメラの取り付けについて
直立からの転倒時カメラフレームが地面に当たらないような位置関係を確認し、またケースの蓋が開いたりコネクタが抜けたりしないように補強する等の工夫も必要です。必要ならフレーム部品を追加して頭部を保護するように改造してください。なお、Raspberry Pi Zeroの純正品ケースにはカメラ取付用の蓋も付属していますが、カメラの向きがこの搭載方法に合わないため使いませんでした。これはTeapotの例を見ると分かりやすいと思います。Teapotでは機体の構造上ちょうどケースを縦向きに搭載する格好になりました。カメラはこの向きの時に横長の視野(ランドスケープ)になります。床を動き回るロボットにはこの方が都合がよいのではないかと思います。ですがKHR-3HVでこの向きに乗せようとすると大きく上にはみ出す格好になり、機械強度の確保が難しく転倒で破損しやすくなると考え、やめました。
USBケーブル
L字型ケーブルを使うとすっきりするかもしれません。Raspberry Pi ZeroのUSBコネクタは電源とOTG用が2つ近くに並んでいて干渉し得るので、L字ケーブルを使う場合はL字の曲がる方向に注意して選定してください。
はじめまして。山口と申します。
返信削除コメント失礼します。
過去のロボットなどを拝見させて頂いたのですが、その中にDCモーターとRCサーボを扱うロボットがありました。
私も知能ロボコンでそういったロボットをArduinoとラズパイを使って作った経験があるのですが、その際に問題だったことが主にDCモーターを回すとRCサーボが暴走するというものでした。
しかし、DCモーターを回していなくてもサーボをattachした時点で誤動作することもあったので何が原因か今でも不明です。
考えられる対策としてモーターにノイズキラーコンデンサーを付けたり、電源回路に整流ダイオードを付けたりしたのですが効果はありませんでした。
それでもやはり回路に問題があったと思います。
DCモーターとRCサーボを同時に制御する時に気を付けなくてはいけないこととは何なのでしょうか?
ご教授お願いします!
ブログでコメントの通知を設定していないため、気づきませんでした。失礼しました。
削除DCモーターを回路から外しても同じでしょうか?DCモーターを回していなくても、ということですので、Arduinoによる信号の生成がうまく行っていない可能性が高いと思います。もしオシロスコープがあれば、出力されているPWM信号を見れば判明すると思います。
おそらくArduinoのフレームワークによってPWM信号を出力されているのだと思います。その場合、マイコンの周辺モジュールのPWMを使わず、ライブラリの割り込み処理ルーチンでポートへ出力することになるケースがあります。このとき、使用するライブラリやポートの組み合わせによっては互いに干渉して正確な信号が作れないケースがあり、それによるものではないかと推測します。
以前あった似たケースでは、赤外線リモコン受信のIrRemoteライブラリをPWMと併用すると受信待機をしている間ずっとサーボのPWMが少しだけ変動するということがありました。
このコメントは投稿者によって削除されました。
返信削除コメント失礼します。
返信削除アハマドといいます。最近このロボットを購入しましたが、プログラミングの知識は浅いですので、山口さんの記事はとても勉強になりました。
一番最新のバージョンの設計は公開する予定ですか。
このRaspberry piロボットのCaseの設計のファイルを公開してほしいです。
http://robot.art.coocan.jp/spirit/spirit.html
もしダメであれば、その作り方や何を勉強したら似ているもの作成できるのか教えてほしいです。
よろしくお願いいたします。