TL;DR
- Installeer Gazebo Sim Fortress (v7.0.0) voor ROS 2 en moderne functies:
sudo apt-get install ignition-fortress - Maak werelden aan met SDF (bijv.,
world.sdf):<sdf version="1.9"> <world name="default"> <include file="plane.sdf"/> <include file="robot.urdf"/> </world> </sdf> - Spawn robots via CLI:
gz sim -v 4 -r empty.sdf robot.urdf - Verbind ROS 2 met Gazebo Sim met:
ros2 launch ros_gz_bridge server_bridge.xml - Voeg sensorruis toe in SDF:
<sensor name="noisy_lidar" type="gpu_lidar"> <noise type="gaussian" mean="0.0" stddev="0.01"/> </sensor> - Voer headless uit voor CI/CD:
gz sim -v 4 -r world.sdf --headless
1. Gazebo Sim installeren (moderne versie)
Gazebo Sim (voorheen Ignition Gazebo) is de actieve ontwikkeltak met ondersteuning voor ROS 2. Gebruik Gazebo Classic alleen voor legacy ROS 1-projecten.
Ubuntu 22.04/24.04 (aanbevolen)
# Voeg Gazebo Sim-repository toe
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'
# Voeg GPG-sleutel toe
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
# Installeer Gazebo Sim Fortress (LTS)
sudo apt-get update
sudo apt-get install ignition-fortress
Installatie controleren
gz sim --version
Verwachte uitvoer:
Gazebo Sim Fortress 7.0.0
Windows/macOS
| Platform | Commando/Downloadlink |
|---|---|
| Windows | Download Installer (VS 2022 vereist) |
| macOS | brew install gz-sim7 (Homebrew) |
Van broncode (geavanceerd)
# Clone en compile (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
Opgelet:
- Ubuntu 24.04: Zorg ervoor dat
libignition-math6enlibignition-transport11geïnstalleerd zijn. - GPU-rendering: Vereist NVIDIA-drivers voor integratie met Omniverse (experimenteel).
- ROS 2: Installeer
ros-foxy-ros-gz-bridgeofros-humble-ros-gz-bridgevoor uw ROS 2-distributie.
2. Werelden bouwen met SDF
SDF (Simulation Description Format) vervangt URDF voor Gazebo Sim. Begin met een vlak en voeg modellen toe.
Een basiswereld maken (world.sdf)
<?xml version="1.0"?>
<sdf version="1.9">
<world name="default">
<!-- Grondvlak -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- Lichtbron -->
<light name="sun" type="directional">
<pose>0 0 10 0 0 0</pose>
<cast_shadows>true</cast_shadows>
</light>
<!-- Robot later via CLI spawnen -->
</world>
</sdf>
Wereld laden
gz sim -v 4 -r world.sdf
Vlaggen:
-v 4: Verbose logging (debug-niveau).-r: Laad wereldbestand.
Een robotmodel toevoegen
- Download een robotmodel (bijv., TurtleBot3):
gz model --download turtlebot3_burger - Voeg het toe aan
world.sdf:<include> <uri>model://turtlebot3_burger</uri> <pose>1 1 0 0 0 0</pose> </include>
Opgelet:
- Modelpaden: Gebruik
model://voor ingebouwde modellen of absolute paden voor aangepaste modellen. - SDF-versie: Specificeer altijd
<sdf version="1.9">voor Gazebo Sim Fortress.
3. Robots en sensoren spawnen
Robot via CLI spawnen
gz sim -v 4 -r empty.sdf -m robot.urdf
Vlaggen:
-m: Spawn een model uit een URDF/SDF-bestand.
Sensoren dynamisch toevoegen
gz model --spawn-file robot_sensor.sdf
Voorbeeld robot_sensor.sdf:
<model name="lidar">
<include>
<uri>model://hokuyo</uri>
<pose>0.2 0 0.1 0 0 0</pose>
</include>
</model>
Sensorruis configureren
Voeg ruis toe aan sensoren in 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> <!-- 1 cm ruis -->
</noise>
</sensor>
Tips voor realisme:
- Lidar: Gebruik
stddev="0.01"voor 1 cm ruis. - Camera: Voeg lensvervorming toe:
<camera name="noisy_camera"> <distortion> <k1>0.001</k1> <!-- Radiale vervorming --> <k2>0.0001</k2> </distortion> </camera>
4. Integratie met ROS 2 via ros_gz_bridge
Gazebo Sim vervangt gazebo_ros_pkgs door ros_gz_bridge.
Bridge installeren
sudo apt-get install ros-<distro>-ros-gz-bridge
Vervang <distro> door uw ROS 2-versie (bijv., humble, foxy).
Bridge starten
ros2 launch ros_gz_bridge server_bridge.xml
Voorbeeld 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>
Een topic publiceren vanuit Gazebo
ros2 topic echo /model/turtlebot3_burger/odom
Opgelet:
- Topicnamen: Gazebo Sim gebruikt
/model/<modelnaam>/<topic>(bijv.,/model/turtlebot3_burger/odom). - Latentie: Voeg
qos_overridestoe voor/tfom vertraging te verminderen. - Legacy ROS 1: Gebruik
ros1_bridgebij het mengen van ROS 1/2.
5. Aangepaste plugins schrijven
Plugins breiden de functionaliteit van Gazebo Sim uit (bijv., aangepaste controllers, sensoren).
Structuur van een plugin
my_plugin/
├── CMakeLists.txt
├── plugin.cc
└── package.xml
Voorbeeld: Aangepaste controller-plugin
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)
Plugin bouwen en laden
mkdir build && cd build
cmake .. && make
gz sim -v 4 -r world.sdf --plugin libmy_plugin.so
Opgelet:
- Pluginpad: Gebruik
--pluginof stelGAZEBO_PLUGIN_PATHin. - Afhankelijkheden: Link tegen
gz-simengz-transport. - Debuggen: Gebruik
-v 4voor gedetailleerde plugin-logboeken.
6. Sensorruis en realisme
Gazebo Sim ondersteunt fysieke ruis en omgevingsinvloeden.
Wind toevoegen aan een wereld
<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>
Gleuven oppervlakken simuleren
<model name="vloer">
<static>true</static>
<link name="link">
<collision name="collision">
<surface>
<friction>
<ode>
<mu>0.1</mu> <!-- Wrijvingscoëfficiënt -->
<mu2>0.01</mu2>
</ode>
</friction>
</surface>
</collision>
</link>
</model>
Checklist realisme:
- Voeg Gaussische ruis toe aan sensoren (
<noise>-tag). - Gebruik ODE-fysica voor realistische botsingen (
<physics type="ode">). - Simuleer lichtomstandigheden met
<light>-tags. - Schakel contactkrachten in voor dynamische interacties.
7. Headless-simulatie voor CI/CD
Voer Gazebo Sim zonder GUI uit voor continue integratie.
Headless-modus
gz sim -v 4 -r world.sdf --headless
Vlaggen:
--headless: Schakel GUI uit.--api-key <sleutel>: Vereist voor cloud/remote besturing.
Voorbeeld CI (GitHub Actions)
jobs:
test:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Gazebo Sim installeren
run: |
sudo apt-get update
sudo apt-get install ignition-fortress
- name: Simulatie uitvoeren
run: |
gz sim -v 4 -r world.sdf --headless --api-key dummy_key
# Voer ROS 2-tests hier uit
Opgelet:
- API-sleutel: Vereist voor remote besturing (gebruik
dummy_keyvoor lokale CI). - Prestaties: Headless-modus is snelder, maar zonder GUI-debugging.
- Logs: Leid uitvoer door naar een bestand:
gz sim -v 4 -r world.sdf --headless > sim.log 2>&1
Wat nu verder?
- Test een volledige robotstack:
- Simuleer een TurtleBot3 met ROS 2 en
ros_gz_bridge. - Voer uit:
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
- Simuleer een TurtleBot3 met ROS 2 en
- Voeg aangepaste plugins toe:
- Schrijf een **
