KCBサポート » 自律ロボット »
■KMR-M6をリモートブレインで動かす(5回目)
5回目:サーボモーター単体を動かし、周囲の距離を測定する
◆前回のおさらい
前回、RCB-4HVに入力したアナログデータをPCのプログラムで取り込む方法を説明しました。また、アナログ出力のPSDセンサー(距離センサー)を取り付けて、データを取得し、距離データに変換しました。
さて、前回用いたPSDセンサーは、前方1点のみしか取得することができません。自律で移動するロボットは周辺の障害物を検知するため、広範囲の距離データを取得する必要があります。
そこで今回は、PSDセンサーをサーボモーターに取り付け、左右にセンサーを振り、周辺の距離データを取得する仕組みを紹介します。
■KMR-M6をリモートブレインで動かす(4回目)
■KMR-M6をリモートブレインで動かす(3回目)
■KMR-M6をリモートブレインで動かす(2回目)
■KMR-M6をリモートブレインで動かす(1回目)
◆はじめに
弊社のHeartToHeart4(以降HTH4)では、サーボモータの制御を一括で管理でき、簡単にモーションの作成や編集をすることができ大変便利です。ただし、HTH4で動かすことができるコントロールボードRCB-4HVのみを用い、考えて行動するなどの高度な処理を行うには限界があります。
物を考える部分をPCで行い、動作部分をコントロールボードで行えば、自律のような複雑な動きをすることができます。この方式は、外部に考える部分があることからリモートブレインと呼ばれています。
そこで7回にわたり、リモートブレインでロボットを動かす仕組みを紹介していきます。
■KCB-1とRCB-4の接続方法
KCB-1のアップデータVer.1.2を適応するとKHR-3HVを自律化させることができます。ケーブルなどの接続方法は従来と同じなのですが、今回はKHR-3HV付属のバックパックにKCB-1とRCB-4を収納する方法について紹介します。
KHR-3HVのバックパックに搭載されるパーツマウントA(センサーなどを取り付けるグレーのベース)にはKCB-1にぴったりのねじ穴が開いています。そこに、下の図のようにKCB-1を「2-8低頭タッピングビス」(KHR-3HVでRCB-4を取り付けているねじと同じもの)で取り付けます。
KCB-1に電源を供給するには電源ケーブルを二股にするか、RCB-4のSIO端子からKCB-1のSIO端子へケーブルを接続するとよいでしょう。図では「二又コード2(No.01132)」を短く変更してRCB-4のSIO端子に接続し、分岐先を元々SIO8に接続されていたサーボリードとKCB-1のSIO1としています。ここでサーボリードの信号線(白いケーブル)は抜いておかないとどちらのサーボも動作しなくなるので注意してください。
なお、図ではRCB-4のSIO8端子に二股ケーブルを接続していますが、これはどの端子でもかまいません。逆接には十分注意してください。
次にRCB-4とKCB-1が通信できるように、それぞれのCOMポートをクロスケーブルでつなぎますが、バックパックには元々「サーボ用延長コード(100mm)(No.01079)」を接続する穴が開いていますので、今回は「サーボ延長ケーブル(KHR-3には1本付属)」を1本追加し、クロスケーブルを外側から接続します。
こうすると、KCB-1やRCB-4へケーブルの挿抜だけで簡単にアクセスできるようになります。
最後にロボットの頭に超音波センサーを取り付けてみます。KHR-3HVでは頭が3パーツに分かれていますが、首と頭パーツの付け根にある隙間にケーブルを通せば、簡単に超音波センサーを取り付けることができます。また、KHR-3HVではまるで測ったかのようにビーチフラッグの超音波発信器の高さにぴったりと合います。
なお頭のサーボモーターだけKCB-1で動かしたい場合は、 サーボのループ接続から頭のサーボ(ID=0)を取り外し、KCB-1へ接続してください。
RCB-3で使っていたビーチフラッグのプログラムは、KCB-1 SDKの最新アップデータを使えば、ほとんど変更することなく動作します。KHR-3HVはKHR-2HVよりも大型で歩きも安定しているので、この機会に試してみてはいかがでしょうか。
■第四回ビーチフラッグ レギュレーション公開!
第四回自律ビーチフラッグのレギュレーションが決定しましたので公開します。
以下からPDFをダウンロードしてください。
▼<PDFダウンロード>第四回自律ビーチフラッグレギュレーション![]()
- 主な変更点を以下に記します。
- 身長の制限が45cmになりました。
- RCB-4HVの使用が可能になりました。
- KHR-1HV / 2HVの標準サーボモーターをKRS-2552HVに変更することが個数無制限で可能になりました。
- エキスパートクラスでは、コンピューターから無線LANを使用してロボットを遠隔制御することが可能になりました。
その他、詳しいレギュレーションはPDFをご確認下さい。
参加の募集は近日開始します。
また、競技に関しての変更など重要なご案内は本サポートページにて行いますので、ご確認をお願い致します。
■KCB-1アップデーターVer.1.2.0 Rev.20091005
KCB-1 SDK のアップデータ(Ver.1.2.0 Rev.20091005)を公開します。今回のアップデートを適用すると、RCB-4に登録されたKHR-3HVのモーションを呼び出して再生できるようになります。
- RCB-4のモーション再生
- RCB-3のモーション呼び出しと同様に、モーション番号指定でのモーション再生命令(rcb4_motion_play)とKRCの入力をエミュレートする命令(rcb4_put_7Bcode)の両方が追加されました。いままでと同様の使い方でKHR-3HVを動作させることができます。
- ICS3.0対応
- ICS関連のプログラムはICSバージョン3.0対応となりました。ICS3.0対応サーボモーター(たとえばKRS-2552HVなど)を1.25Mbpsの高速通信により制御可能です。
- KRI-3でコントローラーの使用が可能に
- KRI-3を使ってKRCのコントロール入力値を読み取れるように、kri3.hも新規作成しました。KRI-3をSIO端子に接続し、kri3_getkey関数で簡単にボタンコードを読み取れるようになりました。
インストーラーにはそれぞれサンプルプログラムが用意されていますので、サンプルを参考にすればすぐにオリジナルのプログラムが作成できます。 なお、今回のアップデートファイルはVer.1.0(発売時のバージョン)からVer.1.1(前回のバージョン)までのアップデートファイルも含みます。
KCB-1 SDKをアップデートするには下のリンクからZIPファイルをダウンロードして、解凍してできたインストールプログラムを実行してください。インストールにはKCB-1 SDK付属CDROMのジャケットにあるシリアル番号が必要です。
ダウンロードはこちらから> KCB1SDK_V12020091005.zip
■コントロールコード再生 モーション終了を知る方法
コントロールコードでモーションを再生したときに、一番ネックになるのがモーションの終了がわからないということです。モーションによって再生時間が違うため、モーションごとにwaitを調整しなくてはいけません。waitの調整がうまくいっていないとロボットが停止する可能性もあります。
そこで、RCB3のモーションを工夫して擬似的にモーションの終了フラグを作りたいと思います。
(画像1 クリックで拡大)
画像1が、終了の返事をもらう仕組みです。モーション開始時に、KCB-1のADとつないでいるRCB-3の空いているサーボ端子をHighにします。モーション終了時にHighにしていた端子をLowに落とします。こうすることで、ADがHighの間はモーション中、Lowになればモーションは終了ということがわかるようになります。
・KCB-1とRCB-3を接続する
次に設定したサーボ端子とKCB-1の接続です。接続ケーブルでRCB3のサーボ端子とKCB-1のアナログ端子を接続してください。この際、必ず真ん中の赤い電源ラインはコネクタからはずしてください。RCB-3のハイボルテージをアナログ端子に接続してしまうとマイコンが発熱し、破損します。はずしたコネクタはビニールテープなどを巻いてショートしないように気をつけてください。
・Heart to Heartでモーションを変更する
Heart to Heartで適当なモーションを読み出してください。
最初のPOSの空いているポートをHighに設定します(例ではCH5)。次にPOS7のコピーでPOS8を作ります。POS8では、さっきHigh出力にしたCH5をLowに設定します。Lowに設定する最後のPOSのSPEEDは1で十分です。(画像2)
(画像2 クリックで拡大)
・KCB-1のプログラム
コントロールコード再生のプログラムを変更します。
rcb3_put_7Bcode (BTN7B_RR);
while(ad_read(3) >= 500){} //RCB3がHighの間ここで待機
rcb3_put_7Bcode (BTN7B_NP); //ニュートラルコマンド送信
wait (300000); //完全に停止するまで少し待つ
上記は、以前公開したAutonomous_system_ccのモーション再生部分を一部変更したです。以前waitでタイミングを取っていた部分がwhile(ad_read(3) >= 500){}となっています。これは、AD3の値が500以上の間何もしないという処理です。モーションが終わってADポートがLowになったとき、条件を抜けてニュートラルを送ることができます。
以上の作業をすれば、モーションが確実に終了した後に次の命令に移れるため、モーション同士がぶつかって停止するなどのトラブルを避けやすくなります。お試しください。












