roombaテストプログラムのまとめ
ROSさんお手やわらかに:ROS入門編
前回からの続き。プログラムrb_demo.pyの要点を解説
雛形にしたのはこのページのプログラム。これにオドメトリのサブスクライブを追加したもの。下記に関数ごとに解説。
stop_and_report()
roombaに停止コマンドを送り、完全に停止するまで1秒待ってからオドメトリのX、Y座標とヘッディング情報Zをタイプアウトする。
mover()
roombaを前進、後退、左旋回、右旋回させるシーケンサー。動作時間はそれぞれ1秒。シーケンスの最初にrospy.init_node('rb_demo')で初期化するが、この後に少し時間をおいてコマンドをパブリッシュしないと最初のコマンドが受け取れない。ここでは1秒待ってからコマンドを送る。
rb_callback(new_odom)
roomba500_light_nodeがオドメトリ情報をパブリッシュするごとに呼ばれるコールバック関数。オドメトリ情報を外部参照できるようグローバル変数g_odomに入れるだけ。
main()
最初にg_odom = 0とやってグローバルを初期化しているが、これではint型として初期化される。そのため、初期化後オドメトリ情報を入れるまでは、g_odom.pose.pose.position.xなどと読み出すとエラーになってしまう。pythonの特性から一度Odometory型を格納するとその型になるので、その後は読み出せる。正しくはg_odom = Odometry()として初期化するべき。
以下はこのテストで気がついたこと
・依存関係は本来パッケージのマニフェストに記述することになっているが、今回はbeginner_tutorialsのマニフェストにはgeometry_msgs.msgとかを追加していない。一応これでも動くようだ。自動的に追加するにはどうするのかはわからない。
・オドメトリは座標値がm、ヘディング情報がRadianで読み取れる。かなりの精度があり、わずかに動かしただけでもそれらしい値が読める。
・オドメトリはroomba500_light_nodeをスタートした時にゼロにリセットされる。ノードが動作中はリセットできないようだ。
・roombaがFullモード(ランプが消えている)の時は充電ステーションに載せても充電できない。ボタンを押してランプを点灯してから充電しないとダメ。
・オブジェクトg_odomの内容を確認するには、print g_odomをプログラムに入れて実行する。詳細な内容を表示するのでいろいろと便利。
・やっぱりコメントは英語で書こう。
« roombaをpythonで動かしてみる | トップページ | tfの仕組みを確認する »
「ROSさんお手やわらかに」カテゴリの記事
- 3Dプリンターで作る簡単turtlebot(おしまい)(2017.01.07)
- 3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)(2017.01.03)
- 3Dプリンターで作る簡単turtlebot(kinectの取り付け)(2017.01.02)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て2)(2016.12.29)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て1)(2016.12.25)
コメント