ROSのチュートリアルでよく使われるシミュレータにturtlesimがあります。このturtlesimをholonomic motion、つまり、オムニホイールやメカナムホイールを搭載したロボットのように全方向移動できるようにするためのPull Request(PR)を出して、無事にマージしてもらえました(ros_tutorials#94)(ros_tutorials#98)。せっかくなので今回のPRによって新たにturtlesimで受け付けられるようになった移動方向(横方向移動等)に移動させる司令の送信方法を紹介します。
概要
今回出したPRによってturtlesimで以下の画像のように超信地旋、横方向移動、斜め方向移動など、全方位移動に対応できるようになりました。対応しているROSのディストリビューションについては以下の通りです。
- ROS Melodic(該当コミット:
[ab51593](https://github.com/ros/ros_tutorials/commit/ab515933e4e106808b0036d316fbbf2624169593)) - ROS Noetic(該当コミット:
[022f24d](https://github.com/ros/ros_tutorials/commit/022f24ffa9936119ba67166ce1c0041eb7a9d363)) - ROS 2 Dashing(該当コミット:
[2db426a](https://github.com/ros/ros_tutorials/commit/2db426a6b41600ea4909dcf7ffcb9d01a15d016f)) - ROS 2 Eloquent(該当コミット:
[868c023](https://github.com/ros/ros_tutorials/commit/868c0230ee3f32c3e5a59e112f2079f6e3a51019)) - ROS 2 Foxy(該当コミット:
[5abfe3c](https://github.com/ros/ros_tutorials/commit/5abfe3cb4575b53e6566c6355f456dc0cf7dc375))
なおapt-getやaptでインストールできるようになるのはもう少し先です。
全方向移動については多田隈先生の日本ロボット学会誌に掲載されている解説が詳しいです。

新しくなったturtlesimを試す方法
新しくなったturtlesimを試すには、2020年8月9日現在はapt-get等でバイナリをインストールするのではなく、手動でソースをダウンロードしてビルドする必要があります。今回はROS MelodicとROS 2 Dashingの場合について紹介します。
ROS Melodic
ワークスペースを~/catkin_wsに設定しているとします。git cloneでダウンロードする際にmelodic-develブランチを指定します。
cd ~/catkin_ws/srcgit clone -b melodic-devel https://github.com/ros/ros_tutorials.gitcatkin-toolsを使用している場合は以下のようにビルド&ワークスペースの設定をリロードします。
catkin buildcatkin sourceこのあとは[geometry_msgs/Twist](http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html)形式の移動指令を送信して亀を移動させます。どのような手段を使ってもよいのですが、キーボード操作で移動させるのが簡単なので、今回は[teleop_twisit_keyboard](http://wiki.ros.org/teleop_twist_keyboard)を利用します。以下のコマンドでインストールできます。
sudo apt install ros-melodic-teleop-twist-keyboard1つ目の端末を起動してroscoreを、2つ目の端末でturtlesimを、3つ目の端末でteleop_twist_keyboadを起動します。
# 1つ目の端末でroscore# 2つ目の端末でrosrun turtilesim turtlesim_node# 3つ目の端末でrosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/turtle1/cmd_vel
teleop_twist_keyboard.pyを起動している3つ目の端末でShiftキーを押しながらJキーまたはLキーで横移動できます。横移動しない場合は古いバージョンのturtlesimを起動している可能性があります。rospack find turtlesimとコマンドを実行してみて、~/catkin_wsなどワークスペース以下のturtlesimを参照しているかどうか確認してみてください。
ROS 2 Dashing
ワークスペースを~/ros/dashingに設定しているとします。git cloneでダウンロードする際にdashing-develブランチを指定します。
cd ~/ros/dashing/srcgit clone -b dashing-devel https://github.com/ros/ros_tutorials.gitcatkin-toolsを使用している場合は以下のようにビルド&ワークスペースの設定をリロードします。
cd ~/ros/dashingcolcon build --symlink-installsource install/local_setup.bashこのあとは[geometry_msgs/Twist](https://github.com/ros2/common_interfaces/blob/dashing/geometry_msgs/msg/Twist.msg)形式の移動指令を送信して亀を移動させます。どのような手段を使ってもよいのですが、キーボード操作で移動させるのが簡単なので、今回は[teleop_twisit_keyboard](https://index.ros.org/p/teleop_twist_keyboard/github-ros2-teleop_twist_keyboard/#dashing)を利用します。以下のコマンドでインストールできます(ros-dashing-desktopをインストールすると一緒にインストールされるようです)。
sudo apt install ros-dashing-teleop-twist-keyboard1つ目の端末でturtlesimを、2つ目の端末でteleop_twist_keyboardを起動します。
# 1つ目の端末でros2 run turtilesim turtlesim_node# 2つ目の端末でros2 run teleop_twist_keyboard teleop_node cmd_vel:=/turtle1/cmd_vel
teleop_twist_keyboardを起動している2つ目の端末でShiftキーを押しながらJキーまたはLキーで横移動できます。横移動しない場合は古いバージョンのturtlesimを起動している可能性があります。
まとめ
turtlesimをholonomic motion(全方向移動)に対応させるためのPRを出して、無事にマージしてもらいました。これにより、全方向に移動指令を出すロボット制御用のROSノードを設計した際、そのノードが出力するROSトピックをturtlesimに向ければ、ROSトピックの中身を簡単に可視化できるようになりました。そして、実際に横方向に移動させる指令を送信して新しいバージョンのturtlesimで亀を横に移動させる簡単な方法を紹介しました。
関連記事
- (Updated )osrf/rockerを使ってPC内に複数のROS distroの開発環境を整える方法Dockerを使ってGUIアプリケーションを起動するには、起動にちょっと工夫が必要だったり一筋縄では行かないことが多いです。 osrf/rockerというツールを使うと一筋縄では行かない部分を少しだけ簡単にできるので、その使い方を紹介します。
- JetsonでROS1/ROS2を使う際のCUDA互換性問題と解決策古いJetson上でROS 1/ROS 2とCUDAを組み合わせる際に直面するJetPack・Compute Capability・GCCバージョンの制約と、共有ライブラリ分離やカスタムL4T Baseイメージによる解決策をまとめた調査メモ。
- (Updated )ROS/ROS2のGUIをWebブラウザ経由でお手軽に試せるDockerfileを公開しましたROS/ROS 2のGUIをWebブラウザ経由でお手軽に試せるDockerfileとDockerイメージを公開しています。その特徴と使用方法を紹介します。
- [2020年1月版] ROS2の環境構築方法この記事は2019年4月に書いた「[[2019年4月版] ROS2の環境構築方法](/archives/2150)」の改訂版です。
- (Updated )ROSパッケージ管理に使うバージョン管理ツールの違いとその使い方ROS/ROS2のパッケージ管理のためにバージョン管理について調べていると、vcstools, wstool, rosinstall, vcstoolなど様々なバージョン管理ツールやバージョン管理のためのライブラリが出てきます。 それぞれの違いや使い分けが気になって調べたので、その違いと使い方についてまとめました。