2024年6月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

カテゴリー

ブログパーツ

無料ブログはココログ

« 2014年5月 | トップページ | 2014年7月 »

2014年6月

2014年6月29日 (日)

Hanabot1をWiFi接続にする

ROSさんお手やわらかに:ROS青雲編

シリアル接続だったHanabot1にXBee WiFiを搭載し、無線LAN接続にした。システムはこの投稿と同じ、パソコン側のソフトがROSのドライバノードになる。
ハードはシリアルレベル変換機の代わりに、XBee wifiに接続するだけ。基板はもともとXBeeの変換基板が付けられるようにしておいたので、差し込むだけだ。

Dscn2842

これまでのHanabot1のファームウェアは、位置情報を一定周期(10Hz)でホストに垂れ流しにしていたが、モーターパワーコマンドが送られたら位置情報を返すサーバ型に変更した。これはTCPでの通信管理がしやすいようにだ。プロジェクトファイルは下に。

wifi_Hanabot1.zipをダウンロード

XBee wifiは下記に設定した。

IP ADDRESS : 192.168.1.51  PORT : 8081   ボーレート : 115200bps

ドライバノードwifi_hanabot1.pyはTCPのクライアントとして動作し、Hanabot1に左右のモーターパワーコマンドを送ることで、位置情報をゲットするようにしてある。モーターパワーコマンドは以前のドライバだと、ジョイスティックのイベントが発生する度に送るようになっていたが、これだと位置情報の取得が不規則になるので、20Hzでモーターパワーコマンドを定期的に送るようにしている。

wifi_hanabot1.py(serialをimportしているが、修正もれ。その必要はない)

これで、無線でHanabot1を動かすことが出来るようになった。すっきりした。あとはセンサをなんとかすれば「1/8計画」は格好がつくのだが、さて。

Dscn2841

2014年6月24日 (火)

Hanabot1のまとめ

ROSさんお手やわらかに:ROS青雲編

試作した「貧者のプラットフォーム」Hanabot1をまとめておこう。

Dscn2839

Hanabot1はそもそも、ROSで使える小型の移動ロボットプラットフォームが欲しい、というところからスタートした。roombaと同じ程度のオドメトリの性能を持ち、かつ、路面の状態(フローリングかカーペット敷かなど)の影響を受けにくいこと、roombaより小型であること、などの要件を満たした結果、構造が単純になり、roombaよりずっと安価なプラットフォームとなった。部品を一から買いそろえても、1万円程度で作ることが出来る。

もう一つの利点は、測距輪の取り付け方法さえ気をつければ、ギアモーターや駆動方式を自由にデザインできることだ。もっと強力なギアモーターを使えば、roombaのようにラップトップパソコンを搭載できるようにもできるし、測距輪をもっと小さくすれば、より小型のモデルも作れる。工夫次第では脚歩行ロボットにも応用できそうだ。

Hanabot1のmplab Xのプロジェクトファイルはこれ。回路図は以前の投稿に。

「Hanabot1.zip」をダウンロード

実験では、hbjoy.pyというゲームパッドとHanabot1ドライバを接続するノードで、TFを送るようになっている。これだとたとえゲームパッドを使わない場合でも、このノードを起動する必要がある。roombaのドライバノードでやっているように、ドライバでTFを送るようにするのがよさそうだ。こうすることでhbjoy.pyは単純なhanabot1とゲームパッドのインターフェイスになるので、役割の切り分けが明確になる。つまり下の図のようにした。

Hanabot1

これに対応したドライバノードhanabot1.pyとゲームパッドとのインターフェイスhbjoy.pyはこれ。

hanabot1.py

hbjoy.py



2014年6月12日 (木)

自作ロボットをROSで動かす(3)

ROSさんお手やわらかに:ROS青雲編

実験レポートの最終回。Hanabot1の位置と方向をrvizでモニターする。

まずはHanabot1のファーム。自己位置と方向を100ms周期で送信する機能を追加した。前の投稿同様mplab Xプロジェクトのmain.cと置き換えてビルドと書き込み。

main.c

つぎはROSのHanabot1ドライバノード。ロボットから受け取った位置情報を、Odometry型に変換し、パブリッシュする機能を追加した。

hanabot1.py

最後にゲームパッドの情報をドライバノードに送ったり、位置情報をサブスクライブしてTFに送ったりするコントロールノード。これはrbjoyとまったく同じで、TFのIDがHanabot1になっているだけ。

hbjoy.py

これで、この投稿でroombaを動かしてみているように、rvizでモニターしながらHanabot1をリモコンすることができる。画像はこれ。Hanabot1の位置が表示されている。

Dscn2834

これで、自作ロボットをroombaのように、ROSの移動ロボットプラットフォームにすることができた。ただ、現在のノード構成だと具合の悪い部分もあるので、次回の投稿では、この辺をすっきりさせたい。

2014年6月 8日 (日)

自作ロボットをROSで動かす(2)

ROSさんお手やわらかに:ROS青雲編

まずはroombaでやったようにゲームパッドを使ってHanabot1をリモコンしてみる。オドメトリにはまだ手を付けていない。

Dscn2833

まずパッケージ hanabotをこの投稿にしたがって作る。scriptsフォルダには次の二つのpythonプログラム(ノード)を入れる。

hanabot1.py

hbjoy.py

hanabot1.pyはTwistを受け取って、これをHanabot1の左右のモーターパワーに変換し、シリアルでHanabot1に送信する。現在のところここまでだ。

hbjoy.pyは以前から使っているrbjoy.pyとほとんど同じ。実際のところrbjoy.pyでも動くが、こちらはroomaba向けにパラメータの係数を調整してあるので、新に作った(ほとんどコピー)次第だ。

ロボット側のソフトは下記main.cをこの投稿のプロジェクトファイルのmain.cと差し替える。ただし、これもまだ作業中だ。ハードの方はPIC24Fの25,26pinと、ROSを走らせているパソコンのCOMポートTX,RXとを、RS232Cのレベルコンバータを介して接続する。この投稿を参考に。

main.c

テストは下記のようにする。

roscoreを起動し
新たに端末を開いて
$ rosrun joy joy_node
もうひとつ端末を開いて
$ rosrun hanabot hanabot1.py
さらに端末を開いて
$ rosrun hanabot hbjoy.py

これでゲームパッドで操縦できる。

次はオドメトリをROSで読み込む部分を作る。

« 2014年5月 | トップページ | 2014年7月 »