💻

ROS2プログラミング入門 #9 シミュレーションでロボットを動かす

2022/06/04に公開

この記事では、シミュレーションでロボットを動かす方法を紹介します。

はじめに

これまでROS2プログラミングについて学んできましたけれど、実際に「ものを動かした」のは ROS2プログラミング入門 #6 亀を制御する くらいだったと思います。

ただ、これも「ロボット」というより「アニメーションの亀」を動かしたといった感じですね。

my_turtle_controllerを実行した様子
my_turtle_controllerを実行した様子

今回はもう少し現実に近づけて、シミュレーションでロボットを動かしてみようと思います。

Gazebo

Gazebo というシミュレータを使えば、シミュレーションでロボットを動かすことができます。

それでは早速インストールして使ってみましょう。

インストール

ros-foxy-desktop が入っていれば、インストールは次のコマンドを実行するだけです。

sudo apt install ros-foxy-gazebo-ros-pkgs

動作確認

インストールできたら、次のコマンドを実行してGazeboが立ち上がることを確認しましょう。

gazebo /opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world

次のような画面が表示されるはずです。

Gazeboのデモを実行した様子
Gazeboのデモを実行した様子

さらに別のターミナルで次のように実行すると、画面上のロボットが動きます。

ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 1.0}}' -1

TurtleBot 3

Gazeboの動作確認で見たロボットは直方体と球で構成されていました。

これはこれで良いと思いますが、よりリアルなロボットでシミュレーションできないでしょうか。

実は、ROS学習用のロボットキットに TurtleBot 3 という、シミュレーションもできるロボットがあります。これでシミュレーションしてみましょう。

なおTurtleBot 3は「Burger」と「Waffle Pi」があり、ここで使うのは TurtleBot 3 Burger です。

TurtleBot 3
https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/ より

準備

ROBOTIS e-Manualで確認すると

The TurtleBot3 Simulation Package requires turtlebot3 and turtlebot3_msgs packages as prerequisite. Without these prerequisite packages, the Simulation cannot be launched.

とありますから、まずは turtlebot3turtlebot3_msgs をインストールしましょう。

sudo apt install ros-foxy-turtlebot3 ros-foxy-turtlebot3-msgs

リポジトリのクローンとビルド

続いてシミュレーションに必要なリポジトリをクローンしてビルドします。

cd ~/dev_ws/src/
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
(cd ~/dev_ws/ && colcon build --symlink-install)

シミュレーションの実行

ビルドできたら、次のコマンドでシミュレーションを実行しましょう。

export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

次のような画面が表示されるはずです。

turtlebot3_world.launch.pyを実行した様子
turtlebot3_world.launch.pyを実行した様子

キーボードでロボットを制御

さらに別のターミナルで次のように実行すると、キーボードでロボットの動きを制御できます。

ros2 run turtlebot3_teleop teleop_keyboard

おわりに

Gazeboの画面をマウスで操作すると、様々な角度からロボットを見られてとても楽しいです。

今回はシミュレーションでロボットを動かす方法を紹介しました。どなたかのお役に立てば幸いです。

Discussion