#ROS2環境上のGazeboのシミュレーションを行う
##経緯
現在私が所属しているサークルでは主にROS1を利用し開発、大会に参加しています。
しかし、Python2系のサポート終了やROS1におけるroscoreを介しての通信、分散処理などの難しさなどからROS2への移行に関して議論を行っている最中です。
もし、すぐに移行をすることが決定した場合はノウハウを持つメンバーがごく一部と限られてしまうため、ROS2の勉強を行うことにしました。
(それにCrystalって響きがかっこいい笑)
(Dashingもいい)
###追記
Dashingでも動作することを確認済みです.
##実行環境
ROS2の最新バージョンであるCrystalはUbuntu上では18でのみ動作するようです。
そのため、それに合わせた環境を利用します。
もし、環境の構築ができていない場合は Installing ROS2 via Debian Packages を参考に構築してください。
私はバイナリパッケージをインストールするのがおすすめです。
#Gazebo
##環境構築
まずやらなくてはならないのはgazebo_ros_pkgsのインストールです。
gazebo_ros_pkgsは名前から想像できる通りGazebo関連のパッケージです。
$ sudo apt install ros-crystal-gazebo-ros-pkgs
これを実行することでROS2環境上でgazeboを動かすための依存パッケージを一発ですべてをインストールしてくれます。
以下がros2環境上でGazeboを動かすための必要パッケージだそうです。
思った以上に少なかった。
##動作テスト
ひとまず、適切にパッケージがインストールされたかを確認します。
シミュレーションの実行は以下のコマンドで可能です。
以下のワールドを選んだのはなんとなく見た目がいいからです。
$ gazebo /opt/ros/crystal/share/gazebo_plugins/worlds/gazebo_ros_joint_state_publisher_demo.world
今回はテストでアームの動きを取得してみます。
コマンドを実行するとシミュレーションが開始されるはずです。
では、Topicが認識できているかを確認してみましょう。
ROS2ではパッケージの実行やTopicの監視などをros2コマンドでできるところがかなり便利です。
$ ros2 topic list
認識できているようです。更に、/demo/join_states_demo を取得してみましょう。
ros2 topic echo /demo/join_states_demo
上のコマンドで状態を取得できます。
見た感じちゃんとトピックを取得できているようです。
次回はプログラムを組んで取得してみます。
#Turtlebot3
##モデルの導入
ここからはサークルで主に使用しているTurtlebot3のシミュレーションを行います。
まずは以下のディレクトリ移動してください。
そこにはモデルやワールドを保持しているディレクトリが存在します。
カレントディレクトリにて以下を実行してください。
$ sudo git clone -b ros2 https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
ここで重要なのはブランチをros2と指定することです。もしくは
git checkout ros2
でブランチの変更をします。
すると gazebo-9 ディレクトリ内は以下のようになっているはずです。
まずはワールドファイルを移動します。
$ sudo mv turtlebot3_simulations/turtlebot3_gazebo/worlds/turtlebot3_ros2_demo.world ./worlds
次にワールドを構築するモデルを移動します。
$ sudo mv turtlebot3_simulations/turtlebot3_gazebo/models/turtlebot3_world ./models
更にTurtlebot3のモデルを移動します。
$ sudo mv turtlebot33_simulations/turtlebot3_gazebo/models/turtlebot3_burger ./models
これでモデルの追加はできました。
##テスト
では以下を実行してください。
$ gazebo /usr/share/gazebo-9/worlds/turtlebot3_ros2_demo.world
するとトピックが立ち上がります。
そしてシミュレーションが始まります。
では、Gazeboがオドメトリをパブリッシュしているかを確認してみましょう。
$ ros2 topic echo /odom
#結論
かなりのパッケージがROS2に対応をして、ROS1よりも使いやすくなってきていると思います。
そして、ROS1のときよりも動作がとても軽くなっているという印象を受けました。
CrystalこそROS2の時代の幕開けではないでしょうか?
#次回
次回は /cmd_vel に速度を渡してTurtlebot3を動かしてみます。