TurtleBotを動かす

前回の記事ではTurtleBotの状態を調べて通信がうまくいっているか確認するだけだったが、いよいよTurtleBotを動かしてみる。

TurtleBotを動かすのに一番簡単なのはキーボードから操縦することであり、そのためのturtlebot_teleopパッケージが用意されている。turtlebot_teleopには、キーボード操作用のローンチファイルの他、ジョイスティックやPS3、XBOX360のコントローラ用のローンチファイルがある。

turtlebot_teleopを動作させるには、minimal.launchが起動している状態で、別のshellやPCから以下のコマンドを入力する。
roslaunch turtlebot_teleop keyboard_teleop.launch
起動してしばらくするとキーボードレイアウトが表示され、表示されたキーを押すことでTurtleBotが動き出す。

キーボードではなくコマンドでTurtleBotを動かしたい場合には、rostopicを使う方法がある。TurtleBotは /cmd_vel_mux/input/teleop というトピックをSubscribeしており、そのデータに従って動くようになっている。そこで、rostopicで/cmd_vel_mux/input/teleopにデータをPublishしてやれば、TurtleBotを動かすことができる。

まず、/cmd_vel_mux/input/teleopがどんなトピックなのかを調べる。
rostopic type /cmd_vel_mux/input/teleop
すると以下のような結果が返される。
geometry_msgs/Twist
これは、/cmd_vel_mux/input/teleopがgeometry_msgs/Twistというメッセージをやり取りすることを表している。では、geometry_msgs/Twistが具体的にどんなメッセージかを調べるには、以下のようにする。
rosmsg show geometry_msgs/Twist
今度は以下のような結果が表示される。
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z

これは、geometry_msgs/Twistがlinearとangularという2種類のデータを持ち、ともにgeometry_msgs/Vector3型であり、それぞれx, y, zの3つのfloat64型の数値からなっていることを示している。

そこで、このデータをコマンドラインから直接Publishする。
rostopic pub -1 /cmd_vel_mux/input/teleop geometry_msgs/Twist -- '[1, 0, 0]' '[0, 0, 0]'
コマンドのうち「–」以降が実際にPublishするデータを表す。シングルクオートで囲まれた最初のデータがlinearを、後のデータがangularを表す。linearのxに直進する量を指定し、angularのzに回転する量を指定することでTurtleBotが動く。上の例であれば一定量TurtleBotが前進する。回転させたければ以下のようにする。

rostopic pub -1 /cmd_vel_mux/input/teleop geometry_msgs/Twist -- '[0, 0, 0]' '[0, 0, 1]'
なお、正の値なら左回転、負の値なら右回転する。