Zusammenfassung
- Gazebo Sim Fortress (v7.0.0) für ROS 2 und moderne Funktionen installieren:
sudo apt-get install ignition-fortress - Welten mit SDF erstellen (z. B.
world.sdf):<sdf version="1.9"> <world name="default"> <include file="plane.sdf"/> <include file="robot.urdf"/> </world> </sdf> - Roboter über die Befehlszeile starten:
gz sim -v 4 -r empty.sdf robot.urdf - ROS 2 und Gazebo Sim mit folgendem Befehl verbinden:
ros2 launch ros_gz_bridge server_bridge.xml - Sensorrauschen in SDF hinzufügen:
<sensor name="noisy_lidar" type="gpu_lidar"> <noise type="gaussian" mean="0.0" stddev="0.01"/> </sensor> - Headless-Modus für CI/CD-Pipelines nutzen:
gz sim -v 4 -r world.sdf --headless
1. Gazebo Sim (Moderne Version) installieren
Gazebo Sim (ehemals Ignition Gazebo) ist der aktive Entwicklungszweig mit ROS 2-Unterstützung. Gazebo Classic sollte nur für veraltete ROS 1-Projekte verwendet werden.
Ubuntu 22.04/24.04 (Empfohlen)
# Gazebo Sim-Repository hinzufügen
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-Schlüssel importieren
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
# Gazebo Sim Fortress (LTS) installieren
sudo apt-get update
sudo apt-get install ignition-fortress
Installation überprüfen
gz sim --version
Erwartetes Ergebnis:
Gazebo Sim Fortress 7.0.0
Windows/macOS
| Plattform | Befehl/Download-Link |
|---|---|
| Windows | Installer herunterladen (Erfordert VS 2022) |
| macOS | brew install gz-sim7 (über Homebrew) |
Installation aus dem Quellcode (Fortgeschrittene)
# Quellcode klonen und kompilieren (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
Wichtige Hinweise:
- Ubuntu 24.04: Stellen Sie sicher, dass
libignition-math6undlibignition-transport11installiert sind. - GPU-Rendering: Erfordert NVIDIA-Treiber für die Integration mit Omniverse (experimentell).
- ROS 2: Installieren Sie
ros-foxy-ros-gz-bridgeoderros-humble-ros-gz-bridgefür Ihre ROS 2-Distribution.
2. Welten mit SDF erstellen
SDF (Simulation Description Format) ersetzt URDF in Gazebo Sim. Beginnen Sie mit einer Grundfläche und fügen Sie Modelle hinzu.
Eine einfache Welt (world.sdf) erstellen
<?xml version="1.0"?>
<sdf version="1.9">
<world name="default">
<!-- Grundfläche -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- Lichtquelle -->
<light name="sun" type="directional">
<pose>0 0 10 0 0 0</pose>
<cast_shadows>true</cast_shadows>
</light>
<!-- Roboter wird später über die CLI gestartet -->
</world>
</sdf>
Welt laden
gz sim -v 4 -r world.sdf
Befehlsoptionen:
-v 4: Ausführliche Protokollierung (Debug-Level).-r: Weltdatei laden.
Roboter-Modell hinzufügen
- Roboter-Modell herunterladen (z. B. TurtleBot3):
gz model --download turtlebot3_burger - Modell in
world.sdfeinbinden:<include> <uri>model://turtlebot3_burger</uri> <pose>1 1 0 0 0 0</pose> </include>
Wichtige Hinweise:
- Modellpfade: Verwenden Sie
model://für integrierte Modelle oder absolute Pfade für benutzerdefinierte Modelle. - SDF-Version: Immer
<sdf version="1.9">für Gazebo Sim Fortress angeben.
3. Roboter und Sensoren starten
Roboter über die Befehlszeile starten
gz sim -v 4 -r empty.sdf -m robot.urdf
Befehlsoptionen:
-m: Modell aus einer URDF/SDF-Datei starten.
Sensoren dynamisch hinzufügen
gz model --spawn-file robot_sensor.sdf
Beispiel robot_sensor.sdf:
<model name="lidar">
<include>
<uri>model://hokuyo</uri>
<pose>0.2 0 0.1 0 0 0</pose>
</include>
</model>
Sensorrauschen konfigurieren
Rauschen zu Sensoren in SDF hinzufügen:
<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 Rauschen -->
</noise>
</sensor>
Tipps für Realismus:
- Lidar: Verwenden Sie
stddev="0.01"für 1 cm Rauschen. - Kamera: Linsenverzerrung hinzufügen:
<camera name="noisy_camera"> <distortion> <k1>0.001</k1> <!-- Radiale Verzerrung --> <k2>0.0001</k2> </distortion> </camera>
4. Integration mit ROS 2 über ros_gz_bridge
Gazebo Sim ersetzt gazebo_ros_pkgs durch ros_gz_bridge.
Brücke installieren
sudo apt-get install ros-<distro>-ros-gz-bridge
Ersetzen Sie <distro> durch Ihre ROS 2-Version (z. B. humble, foxy).
Brücke starten
ros2 launch ros_gz_bridge server_bridge.xml
Beispiel 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>
Thema aus Gazebo Sim abonnieren
ros2 topic echo /model/turtlebot3_burger/odom
Wichtige Hinweise:
- Themen-Namen: Gazebo Sim verwendet
/model/<Modellname>/<Thema>(z. B./model/turtlebot3_burger/odom). - Latenz: Fügen Sie
qos_overridesfür/tfhinzu, um Verzögerungen zu reduzieren. - Legacy ROS 1: Verwenden Sie
ros1_bridge, falls ROS 1/2 gemischt werden.
5. System-Plugins für Gazebo Sim erstellen
Plugins erweitern die Funktionalität von Gazebo Sim (z. B. benutzerdefinierte Controller oder Sensoren).
Struktur eines Plugins
my_plugin/
├── CMakeLists.txt
├── plugin.cc
└── package.xml
Beispiel: Benutzerdefinierter 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 kompilieren und laden
mkdir build && cd build
cmake .. && make
gz sim -v 4 -r world.sdf --plugin libmy_plugin.so
Wichtige Hinweise:
- Plugin-Pfad: Verwenden Sie
--pluginoder setzen Sie die UmgebungsvariableGAZEBO_PLUGIN_PATH. - Abhängigkeiten: Verknüpfen Sie mit
gz-simundgz-transport. - Fehlerbehebung: Nutzen Sie
-v 4für ausführliche Plugin-Protokolle.
6. Sensorrauschen und Realismus
Gazebo Sim unterstützt physikbasiertes Rauschen und umweltbedingte Effekte.
Wind in einer Welt hinzufügen
<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>
Rutschige Oberflächen simulieren
<model name="floor">
<static>true</static>
<link name="link">
<collision name="collision">
<surface>
<friction>
<ode>
<mu>0.1</mu> <!-- Reibungskoeffizient -->
<mu2>0.01</mu2>
</ode>
</friction>
</surface>
</collision>
</link>
</model>
Checkliste für Realismus:
- Gaußsches Rauschen für Sensoren mit dem
<noise>-Tag hinzufügen. - ODE-Physik für realistische Kollisionen verwenden (
<physics type="ode">). - Lichtverhältnisse mit
<light>-Tags simulieren. - Kontaktkräfte für dynamische Wechselwirkungen aktivieren.
7. Kopflose Simulation für CI/CD
Führen Sie Gazebo Sim ohne GUI für Continuous Integration aus.
Kopfloser Modus
gz sim -v 4 -r world.sdf --headless
Befehlsoptionen:
--headless: GUI deaktivieren.--api-key <key>: Erforderlich für Cloud-/Remote-Steuerung.
Beispiel für GitHub Actions
jobs:
test:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Gazebo Sim installieren
run: |
sudo apt-get update
sudo apt-get install ignition-fortress
- name: Simulation ausführen
run: |
gz sim -v 4 -r world.sdf --headless --api-key dummy_key
# ROS 2-Tests hier ausführen
Wichtige Hinweise:
- API-Schlüssel: Erforderlich für Remote-Steuerung (verwenden Sie
dummy_keyfür lokale CI). - Performance: Kopfloser Modus ist schneller, bietet aber keine GUI-Debugging-Möglichkeiten.
- Protokolle: Weiterleiten der Ausgabe in eine Datei:
gz sim -v 4 -r world.sdf --headless > sim.log 2>&1
Was kommt als Nächstes?
- Vollständigen Roboter-Stack testen:
- TurtleBot3 mit ROS 2 und
ros_gz_bridgesimulieren. - Befehle ausführen:
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 mit ROS 2 und
- Benutzerdefinierte Plugins erstellen:
- Einen **
