TL;DR
- Installez Gazebo Sim Fortress (v7.0.0) pour ROS 2 et les fonctionnalités modernes :
sudo apt-get install ignition-fortress - Créez des mondes avec SDF (par exemple,
world.sdf) :<sdf version="1.9"> <world name="default"> <include file="plane.sdf"/> <include file="robot.urdf"/> </world> </sdf> - Lancez des robots via l'interface en ligne de commande :
gz sim -v 4 -r empty.sdf robot.urdf - Synchronisez ROS 2 et Gazebo avec :
ros2 launch ros_gz_bridge server_bridge.xml - Ajoutez du bruit aux capteurs dans le fichier SDF :
<sensor name="noisy_lidar" type="gpu_lidar"> <noise type="gaussian" mean="0.0" stddev="0.01"/> </sensor> - Exécutez en mode sans interface pour les pipelines CI/CD :
gz sim -v 4 -r world.sdf --headless
1. Installation de Gazebo Sim (Version Moderne)
Gazebo Sim (anciennement Ignition Gazebo) est la branche de développement active compatible avec ROS 2. Utilisez Gazebo Classic uniquement pour les projets ROS 1 obsolètes.
Ubuntu 22.04/24.04 (Recommandé)
# Ajoutez le dépôt 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'
# Ajoutez la clé GPG
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
# Installez Gazebo Sim Fortress (LTS)
sudo apt-get update
sudo apt-get install ignition-fortress
Vérification de l'installation
gz sim --version
Sortie attendue :
Gazebo Sim Fortress 7.0.0
Windows/macOS
| Plateforme | Commande/Lien de téléchargement |
|---|---|
| Windows | Télécharger l'installateur (Nécessite Visual Studio 2022) |
| macOS | brew install gz-sim7 (via Homebrew) |
Installation à partir des sources (Avancé)
# Clonez et compilez (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
Points d'attention :
- Ubuntu 24.04 : Vérifiez que
libignition-math6etlibignition-transport11sont installés. - Rendu GPU : Nécessite les pilotes NVIDIA pour l'intégration avec Omniverse (expérimental).
- ROS 2 : Installez
ros-foxy-ros-gz-bridgeouros-humble-ros-gz-bridgeselon votre distribution ROS 2.
2. Création de Mondes avec SDF
Le format SDF (Simulation Description Format) remplace URDF pour Gazebo Sim. Commencez par un plan et ajoutez des modèles.
Création d'un Monde de Base (world.sdf)
<?xml version="1.0"?>
<sdf version="1.9">
<world name="default">
<!-- Plan de sol -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- Lumière -->
<light name="sun" type="directional">
<pose>0 0 10 0 0 0</pose>
<cast_shadows>true</cast_shadows>
</light>
<!-- Un robot sera ajouté ultérieurement via l'interface en ligne de commande -->
</world>
</sdf>
Chargement du Monde
gz sim -v 4 -r world.sdf
Options :
-v 4: Mode verbeux (niveau debug).-r: Charge le fichier de monde.
Ajout d'un Modèle de Robot
- Téléchargez un modèle de robot (par exemple, TurtleBot3) :
gz model --download turtlebot3_burger - Intégrez-le dans
world.sdf:<include> <uri>model://turtlebot3_burger</uri> <pose>1 1 0 0 0 0</pose> </include>
Points d'attention :
- Chemins des modèles : Utilisez
model://pour les modèles intégrés ou des chemins absolus pour les modèles personnalisés. - Version SDF : Spécifiez toujours
<sdf version="1.9">pour Gazebo Sim Fortress.
3. Lancement de Robots et Capteurs
Lancement d'un Robot via l'Interface en Ligne de Commande
gz sim -v 4 -r empty.sdf -m robot.urdf
Options :
-m: Lance un modèle à partir d'un fichier URDF/SDF.
Ajout Dynamique de Capteurs
gz model --spawn-file robot_sensor.sdf
Exemple de robot_sensor.sdf :
<model name="lidar">
<include>
<uri>model://hokuyo</uri>
<pose>0.2 0 0.1 0 0 0</pose>
</include>
</model>
Configuration du Bruit des Capteurs
Ajoutez du bruit aux capteurs dans le fichier 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> <!-- Bruit de 1 cm -->
</noise>
</sensor>
Conseils pour le réalisme :
- Lidar : Utilisez
stddev="0.01"pour un bruit de 1 cm. - Caméra : Ajoutez des distorsions de lentille :
<camera name="noisy_camera"> <distortion> <k1>0.001</k1> <!-- Distorsion radiale --> <k2>0.0001</k2> </distortion> </camera>
4. Intégration avec ROS 2 via ros_gz_bridge
Gazebo Sim remplace gazebo_ros_pkgs par ros_gz_bridge.
Installation du Pont
sudo apt-get install ros-<distro>-ros-gz-bridge
Remplacez <distro> par votre version de ROS 2 (par exemple, humble, foxy).
Lancement du Pont
ros2 launch ros_gz_bridge server_bridge.xml
Exemple de 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>
Publication d'un Sujet depuis Gazebo
ros2 topic echo /model/turtlebot3_burger/odom
Points d'attention :
- Noms des sujets : Gazebo Sim utilise
/model/<nom_du_modèle>/<sujet>(par exemple,/model/turtlebot3_burger/odom). - Latence : Ajoutez
qos_overridespour/tfafin de réduire le lag. - ROS 1 obsolète : Utilisez
ros1_bridgesi vous mélangez ROS 1 et ROS 2.
5. Rédaction de Plugins Système
Les plugins étendent les fonctionnalités de Gazebo Sim (par exemple, contrôleurs ou capteurs personnalisés).
Structure du Plugin
my_plugin/
├── CMakeLists.txt
├── plugin.cc
└── package.xml
Exemple : Plugin de Contrôleur Personnalisé
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)
Construction et Chargement du Plugin
mkdir build && cd build
cmake .. && make
gz sim -v 4 -r world.sdf --plugin libmy_plugin.so
Points d'attention :
- Chemin du plugin : Utilisez
--pluginou définissezGAZEBO_PLUGIN_PATH. - Dépendances : Liez avec
gz-simetgz-transport. - Débogage : Utilisez
-v 4pour des logs détaillés des plugins.
6. Bruit des Capteurs et Réalisme
Gazebo Sim prend en charge le bruit basé sur la physique et les effets environnementaux.
Ajout du Vent à un Monde
<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>
Simulation de Surfaces Glissantes
<model name="floor">
<static>true</static>
<link name="link">
<collision name="collision">
<surface>
<friction>
<ode>
<mu>0.1</mu> <!-- Coefficient de friction -->
<mu2>0.01</mu2>
</ode>
</friction>
</surface>
</collision>
</link>
</model>
Checklist pour le réalisme :
- Ajoutez du bruit gaussien aux capteurs (
<noise>). - Utilisez la physique ODE pour des collisions réalistes (
<physics type="ode">). - Simulez les conditions d'éclairage avec des balises
<light>. - Activez les forces de contact pour des interactions dynamiques.
7. Simulation Sans Interface pour les Pipelines CI/CD
Exécutez Gazebo Sim sans interface graphique pour les environnements de déploiement continu.
Mode Sans Interface
gz sim -v 4 -r world.sdf --headless
Options :
--headless: Désactive l'interface graphique.--api-key <clé>: Nécessaire pour le contrôle à distance.
Exemple pour CI (GitHub Actions)
jobs:
test:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Installer Gazebo Sim
run: |
sudo apt-get update
sudo apt-get install ignition-fortress
- name: Exécuter la Simulation
run: |
gz sim -v 4 -r world.sdf --headless --api-key dummy_key
# Exécuter les tests ROS 2 ici
Points d'attention :
- Clé API : Nécessaire pour le contrôle à distance (utilisez
dummy_keypour les tests locaux). - Performance : Le mode sans interface est plus rapide, mais sans débogage visuel.
- Logs : Redirigez la sortie vers un fichier :
gz sim -v 4 -r world.sdf --headless > sim.log 2>&1
Que faire ensuite ?
- Tester une pile robotique complète :
- Simulez un TurtleBot3 avec ROS 2 et
ros_gz_bridge. - Exécutez :
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
- Simulez un TurtleBot3 avec ROS 2 et
- Ajouter des plugins personnalisés :
- Développez un plugin pour des fonctionnalités spécifiques.
- Explorez les exemples de plugins fournis par la communauté Gazebo Sim.
- Optimiser les performances :
- Utilisez
--physics-engine odepour des simulations plus rapides. - Activez le mode headless pour les tests automatisés.
- Utilisez
- Documenter vos configurations :
- Partagez vos fichiers SDF et plugins sur GitHub pour contribuer à la communauté.
Prochaines étapes :
- Automatisez vos tests avec des scripts CI/CD.
- Intégrez des capteurs avancés (LiDAR, caméras stéréo).
- Explorez les plugins officiels pour étendre les fonctionnalités de Gazebo Sim.
Avec ces bases, vous êtes prêt à exploiter pleinement le potentiel de Gazebo Sim pour vos projets de robotique et de simulation !
