2026-04-10 (更新: 2026-05-20)
🤖 【ROS2入門⑩】Gazeboシミュレーター入門 - 仮想空間でロボットを動かす
シリーズ この記事は「ROS2入門シリーズ」の一部です。 シリーズ目次を見る
2026年5月時点のメモです。ROS 2 入門シリーズ⑩として、実機がなくても試せる Gazebo 連携の入口を整理します。想定読者は Humble を入れたばかりの方で、ここでは「ros_gz でトピックを橋渡しする」イメージと TurtleBot3 シミュの起動までを押さえます。
Gazebo と ROS 2 をつなぐ層として ros_gz(旧 ros_ign 系)がよく説明されます。パッケージ名はディストリと Gazebo 世代で変わるため、手元では `apt search ros-humble ros-gz` と Gazebo(gz-sim)公式・ros_gz ドキュメント を正にしてください。本記事のコマンド例は TurtleBot3 e-Manual 向け turtlebot3_gazebo 前提です。
結論として、シミュは物理が簡略化された検証環境です。まず仮想空間でノードとトピックの流れを掴み、⑪の Nav2 へ進む足場にします。シリーズ全体は ROS2入門シリーズ目次 を参照してください。
Gazebo(gz-sim)では何がシミュレーションできる?
Gazeboがよく担当する処理の一例:
物理エンジン -> 重力・摩擦・衝突の近似モデル
センサー -> LiDAR、カメラ、IMU など(ノイズはモデル依存)
アクチュエータ -> モーター、グリッパー、関節
3D環境 -> 建物、道路、障害物 ROS 2 Humble に Gazebo 関連パッケージはどう入れる?
# Gazebo / ros_gz と ROS 2 Humble の組み合わせは環境により推奨が変わることがある
sudo apt install ros-humble-ros-gz -y
# TurtleBot3シミュレーションパッケージ
sudo apt install ros-humble-turtlebot3-gazebo -y TurtleBot3 の Gazebo シミュはどう起動する?
TurtleBot3とは
TurtleBot3 は ROS 2 の教材で広く使われるプラットフォームです。シミュ用 launch は TurtleBot3 e-Manual の Simulation 章が正本です。
TurtleBot3 Burger構成図
シミュレーションの起動
# 環境変数を設定
export TURTLEBOT3_MODEL=burger
# シミュレーションを起動
# ターミナル1: Gazebo起動
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
# ターミナル2: キーボード操作ノード
ros2 run turtlebot3_teleop teleop_keyboard 操作方法
teleop の操作例(パッケージの表示に従ってください):
w: 前進
s: 後進
a: 左回転
d: 右回転
space: 停止 URDF でロボットモデルはどう定義する?
Gazebo にロボットを出すには URDF(Unified Robot Description Format)でリンク・関節・慣性を定義します。TurtleBot3 実機向けの詳細は TurtleBot3 e-Manual の Description を参照してください。
<!-- simple_robot.urdf -->
<robot name="simple_robot">
<!-- ベースリンク -->
<link name="base_link">
<visual>
<geometry>
<box size="0.3 0.2 0.1"/> <!-- 幅x奥行x高さ -->
</geometry>
<material name="blue">
<color rgba="0.0 0.0 1.0 1.0"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.3 0.2 0.1"/>
</geometry>
</collision>
<inertial>
<mass value="1.0"/>
<inertia ixx="0.01" ixy="0" ixz="0"
iyy="0.01" iyz="0" izz="0.01"/>
</inertial>
</link>
<!-- フロントホイール -->
<link name="front_wheel">
<visual>
<geometry>
<cylinder radius="0.05" length="0.04"/>
</geometry>
</visual>
</link>
<!-- ペアレント-子の接続 -->
<joint name="front_wheel_joint" type="continuous">
<parent link="base_link"/>
<child link="front_wheel"/>
<origin xyz="0.15 0 -0.05"/>
<axis xyz="0 1 0"/>
</joint>
</robot> ROS 2 と Gazebo はどう接続される?
ROS2アプリ→ros_gz_bridge→Gazeboシミュレーターの接続構造
シミュ上のセンサーデータはどう確認する?
# TurtleBot3のセンサーデータを確認
ros2 topic list
# /scan <- LiDARデータ
# /odom <- オドメトリ(移動量)
# /cmd_vel <- 速度指令
# /imu <- IMUデータ
# LiDARデータを確認
ros2 topic echo /scan --once Gazebo 連携でよくある失敗は何か?
- TURTLEBOT3_MODEL(burger 等)がターミナルごとに揃っていないと、モデル読み込みで落ちやすい
- turtlebot3_gazebo や ros-humble-ros-gz は 未導入・非推奨の案内が環境で変わり得る。メッセージに従いバージョンを合わせる
- ros2 launch が何を起動しているかは ros2 topic list で押さえると、記事との差分が掴みやすい
Gazebo 入門の要点は?
- Gazebo は 物理が簡略化された検証環境として捉え、チューニングやモデル選択で振る舞いは変わる
- URDF で リンク・関節・慣性を置き、world とロボットの接続に Gazebo の拡張が乗る、というレイヤーを意識する
- ros_gz / Bridge は ROS とシミュ側の話題がまとめて動く構成(詳細は利用パッケージの README が正)
- TurtleBot3 のハウツーは バージョン差が出やすいので、セットアップ済み構成を基準に差分だけ追う
- 次回(シリーズ⑪)では Nav2 入門へ進む想定です(パラメータはプロジェクトごとに要調整)