要約
- Gazebo Sim Fortress (v7.0.0) を ROS 2 および最新機能とともにインストールする
sudo apt-get install ignition-fortress - SDF ファイル(例:
world.sdf)でワールドを作成する<sdf version="1.9"> <world name="default"> <include file="plane.sdf"/> <include file="robot.urdf"/> </world> </sdf> - コマンドラインでロボットを生成する
gz sim -v 4 -r empty.sdf robot.urdf - ROS 2 と Gazebo Sim をブリッジする
ros2 launch ros_gz_bridge server_bridge.xml - SDF 内でセンサノイズを追加する
<sensor name="noisy_lidar" type="gpu_lidar"> <noise type="gaussian" mean="0.0" stddev="0.01"/> </sensor> - CI 用にヘッドレスモードで実行する
gz sim -v 4 -r world.sdf --headless
1. 最新版の Gazebo Sim のインストール
Gazebo Sim(旧称:Ignition Gazebo)は ROS 2 に対応した アクティブ開発ブランチ です。Gazebo Classic は ROS 1 のレガシープロジェクトのみに使用してください。
Ubuntu 22.04/24.04(推奨環境)
# Gazebo Sim リポジトリを追加
sudo apt-get install software-properties-common
sudo sh -c 'echo "deb [arch=amd64] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" > /etc/apt/sources.list.d/gazebo-stable.list'
# GPG キーを追加
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
# Gazebo Sim Fortress (LTS) をインストール
sudo apt-get update
sudo apt-get install ignition-fortress
インストールの確認
gz sim --version
期待される出力
Gazebo Sim Fortress 7.0.0
Windows/macOS
| プラットフォーム | コマンド/ダウンロードリンク |
|---|---|
| Windows | インストーラダウンロード (VS 2022 が必要) |
| macOS | brew install gz-sim7 (Homebrew) |
ソースからのインストール(上級者向け)
# クローンとビルド(Linux/macOS用)
git clone --recursive https://github.com/gazebosim/gz-sim.git
mkdir gz-sim/build && cd gz-sim/build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
注意点
- Ubuntu 24.04:
libignition-math6とlibignition-transport11をインストールしてください。 - GPU レンダリング:Omniverse 統合(実験段階)には NVIDIA ドライバ が必要です。
- ROS 2:
ros-foxy-ros-gz-bridgeまたはros-humble-ros-gz-bridgeをインストールしてください。
2. SDF を用いたワールドの構築
Gazebo Sim では SDF(Simulation Description Format) が URDF の後継として使用されます。基本的な 平面 からモデルを追加してください。
基本的なワールドの作成 (world.sdf)
<?xml version="1.0"?>
<sdf version="1.9">
<world name="default">
<!-- 地面の平面 -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- 光源 -->
<light name="sun" type="directional">
<pose>0 0 10 0 0 0</pose>
<cast_shadows>true</cast_shadows>
</light>
<!-- コマンドラインでロボットを後から生成 -->
</world>
</sdf>
ワールドの読み込み
gz sim -v 4 -r world.sdf
フラグの説明
-v 4:詳細なログ出力(デバッグレベル)。-r:ワールドファイルの読み込み。
ロボットモデルの追加
- ロボットモデルをダウンロード(例:TurtleBot3)
gz model --download turtlebot3_burger world.sdfにモデルを追加<include> <uri>model://turtlebot3_burger</uri> <pose>1 1 0 0 0 0</pose> </include>
注意点
- モデルのパス:組み込みモデルには
model://を、カスタムモデルには絶対パスを使用してください。 - SDF バージョン:Gazebo Sim Fortress では
<sdf version="1.9">を必ず指定してください。
3. ロボットとセンサの生成
コマンドラインでロボットを生成
gz sim -v 4 -r empty.sdf -m robot.urdf
フラグの説明
-m:URDF/SDF ファイルからモデルを生成。
動的にセンサを追加
gz model --spawn-file robot_sensor.sdf
例:robot_sensor.sdf
<model name="lidar">
<include>
<uri>model://hokuyo</uri>
<pose>0.2 0 0.1 0 0 0</pose>
</include>
</model>
センサノイズの設定
SDF 内でセンサにノイズを追加します。
<sensor name="noisy_lidar" type="gpu_lidar">
<pose>0.2 0 0.1 0 0 0</pose>
<visualize>true</visualize>
<update_rate>30.0</update_rate>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.01</stddev> <!-- 1cm のノイズ -->
</noise>
</sensor>
リアルなシミュレーションのためのヒント
- LiDAR:
stddev="0.01"で 1cm のノイズを設定します。 - カメラ:レンズの歪みを追加します。
<camera name="noisy_camera"> <distortion> <k1>0.001</k1> <!-- 放射状歪み --> <k2>0.0001</k2> </distortion> </camera>
4. ros_gz_bridge を用いた ROS 2 統合
Gazebo Sim では gazebo_ros_pkgs の代わりに ros_gz_bridge が使用されます。
ブリッジのインストール
sudo apt-get install ros-<distro>-ros-gz-bridge
<distro> をご自身の ROS 2 バージョン(例:humble、foxy)に置き換えてください。
ブリッジの起動
ros2 launch ros_gz_bridge server_bridge.xml
例:server_bridge.xml
<launch>
<node pkg="ros_gz_bridge" exec="parameter_bridge" name="parameter_bridge">
<remap from="/clock" to="/clock"/>
<param name="qos_overrides" value="/tf"/>
</node>
<node pkg="ros_gz_bridge" exec="create" name="create">
<remap from="/cmd_vel" to="/diff_drive_controller/cmd_vel_unstamped"/>
</node>
</launch>
Gazebo からトピックを公開
ros2 topic echo /model/turtlebot3_burger/odom
注意点
- トピック名:Gazebo Sim では
/model/<モデル名>/<トピック>が使用されます(例:/model/turtlebot3_burger/odom)。 - レイテンシー:
/tfに対してqos_overridesを設定して遅延を軽減します。 - レガシ ROS 1:ROS 1/2 を混在させる場合は
ros1_bridgeを使用してください。
5. システムプラグインの作成
プラグインを使用して Gazebo Sim の機能を拡張できます(例:カスタムコントローラ、センサ)。
プラグインの構造
my_plugin/
├── CMakeLists.txt
├── plugin.cc
└── package.xml
例:カスタムコントローラプラグイン
plugin.cc
#include <gz/sim/System.hh>
#include <gz/transport/Node.hh>
class MyController : public gz::sim::System
{
public:
MyController() : System() {}
~MyController() override {}
void Init() override {
this->node = std::make_unique<gz::transport::Node>();
this->pub = this->node->Advertise<gz::msgs::Boolean>("~/cmd", 10);
}
void Reset() override {}
void PreUpdate(const gz::sim::UpdateInfo &_info, const gz::sim::Entity &_entity) override {
auto msg = std::make_shared<gz::msgs::Boolean>();
msg->set_data(true);
this->pub->Publish(msg);
}
private:
std::unique_ptr<gz::transport::Node> node;
gz::transport::Publisher pub;
};
GZ_REGISTER_SYSTEM(MyController)
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(my_plugin)
find_package(gz-sim REQUIRED)
find_package(gz-transport REQUIRED)
add_library(my_plugin SHARED plugin.cc)
target_link_libraries(my_plugin PRIVATE gz-sim gz-transport)
プラグインのビルドと読み込み
mkdir build && cd build
cmake .. && make
gz sim -v 4 -r world.sdf --plugin libmy_plugin.so
注意点
- プラグインパス:
--pluginオプションまたはGAZEBO_PLUGIN_PATHを設定してください。 - 依存関係:
gz-simとgz-transportにリンクしてください。 - デバッグ:
-v 4で詳細なプラグインログを確認できます。
6. センサノイズとリアルなシミュレーション
Gazebo Sim では 物理ベースのノイズ や 環境効果 をサポートしています。
ワールドに風を追加
<world name="default">
<physics name="default_physics">
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<real_time_update_rate>1000</real_time_update_rate>
</physics>
<environment>
<wind>
<speed>2.0</speed> <!-- m/s -->
<direction>0 0 1</direction> <!-- X Y Z -->
</wind>
</environment>
</world>
滑りやすい表面のシミュレーション
<model name="floor">
<static>true</static>
<link name="link">
<collision name="collision">
<surface>
<friction>
<ode>
<mu>0.1</mu> <!-- 摩擦係数 -->
<mu2>0.01</mu2>
</ode>
</friction>
</surface>
</collision>
</link>
</model>
リアルなシミュレーションのチェックリスト
- センサに ガウスノイズ を追加(
<noise>タグ)。 - ODE 物理エンジン を使用してリアルな衝突を設定(
<physics type="ode">)。 - 照明条件 を
<light>タグでシミュレーション。 - 接触力 を有効にしてダイナミックな相互作用を実現。
7. CI 用のヘッドレスシミュレーション
Gazebo Sim を GUI 無し で実行し、継続的インテグレーションに活用できます。
ヘッドレスモード
gz sim -v 4 -r world.sdf --headless
フラグの説明
--headless:GUI を無効化。--api-key <key>:クラウド/リモート制御に必要。
CI 例(GitHub Actions)
jobs:
test:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Gazebo Sim をインストール
run: |
sudo apt-get update
sudo apt-get install ignition-fortress
- name: シミュレーションを実行
run: |
gz sim -v 4 -r world.sdf --headless --api-key dummy_key
# ROS 2 のテストを実行
注意点
- API キー:リモート制御には必要ですが、ローカル CI では
dummy_keyを使用できます。 - パフォーマンス:ヘッドレスモードは 高速 ですが、GUI デバッグはできません。
- ログ:出力をファイルにリダイレクトできます。
gz sim -v 4 -r world.sdf --headless > sim.log 2>&1
次のステップ
- フルロボットスタックのテスト
- TurtleBot3 を ROS 2 と
ros_gz_bridgeでシミュレーションします。 - 実行コマンド:
gz sim -v 4 -r turtlebot3_world.sdf ros2 launch ros_gz_bridge server_bridge.xml ros2 launch turtlebot3_gazebo turtlebot3_empty_world.launch.py
- TurtleBot3 を ROS 2 と
- カスタムプラグインの追加
- カスタムコントローラ や センサ を実装してください。
- プラグインの開発ガイドをご参照ください。
