TL;DR
- Εγκαταστήστε το 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:
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: Απαιτούνται οδηγοί NVIDIA για ενσωμάτωση με το Omniverse (πειραματικό).
- ROS 2: Εγκαταστήστε το
ros-foxy-ros-gz-bridgeήros-humble-ros-gz-bridgeγια την έκδοση ROS 2 που χρησιμοποιείτε.
2. Δημιουργία Περιβαλλόντων με SDF
Το SDF (Simulation Description Format) αντικαθιστά το URDF για το Gazebo Sim. Ξεκινήστε με ένα επίπεδο και προσθέστε μοντέλα.
Δημιουργία Βασικού Περιβάλλοντος (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: Λεπτομερής καταγραφή (επίπεδο debug).-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: Πάντα να ορίζετε
<sdf version="1.9">για το Gazebo Sim Fortress.
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 2 μέσω ros_gz_bridge
Το 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). - Υστέρηση: Προσθέστε
qos_overridesγια το/tfγια μείωση της καθυστέρησης. - Legacy ROS 1: Χρησιμοποιήστε
ros1_bridgeαν χρησιμοποιείτε και τα δύο ROS 1/2.
5. Γραφή Συστημάτων Plugin
Τα plugin επεκτείνουν τις δυνατότητες του Gazebo Sim (π.χ., προσαρμοσμένοι ελεγκτές, αισθητήρες).
Δομή Plugin
my_plugin/
├── CMakeLists.txt
├── plugin.cc
└── package.xml
Παράδειγμα: Προσαρμοσμένος Ελεγκτής 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
mkdir build && cd build
cmake .. && make
gz sim -v 4 -r world.sdf --plugin libmy_plugin.so
Προβλήματα που ενδέχεται να εμφανιστούν:
- Διεύθυνση Plugin: Χρησιμοποιήστε
--pluginή ρυθμίστε τοGAZEBO_PLUGIN_PATH. - Ανάγκες: Συνδέστε με
gz-simκαιgz-transport. - Διαγνωστικά: Χρησιμοποιήστε
-v 4για λεπτομερή καταγραφή plugin.
6. Θόρυβος Αισθητήρων και Πραγματικότητα
Το Gazebo Sim υποστηρίζει θόρυβο βασισμένο στη φυσική και ενvironmental effects.
Προσθήκη Ανέμου σε ένα Περιβάλλον
<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>
Κατάλογος Πραγματικότητας:
- Προσθέστε Gaussian θόρυβο σε αισθητήρες (
<noise>tag). - Χρησιμοποιήστε ODE φυσική για ρεαλιστικές συγκρούσεις (
<physics type="ode">). - Προσομοιώστε συνθήκες φωτισμού με
<light>tags. - Ενεργοποιήστε δυνάμεις επαφής για δυναμικές αλληλεπιδράσεις.
7. Προσομοίωση Χωρίς Γραφικό Περιβάλλον για CI
Εκτελέστε το Gazebo Sim χωρίς γραφικό περιβάλλον για συνεχείς ελέγχους ποιότητας.
Λειτουργία Χωρίς Γραφικό Περιβάλλον
gz sim -v 4 -r world.sdf --headless
Λαμβανόμενες Παραμέτροι:
--headless: Απενεργοποιεί το γραφικό περιβάλλον.--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: Απαιτείται για απόμακρο έλεγχο (χρησιμοποιήστε
dummy_keyγια τοπικό CI). - Απόδοση: Η λειτουργία χωρίς γραφικό περιβάλλον είναι ταχύτερη, αλλά δεν παρέχει δυνατότητα debug μέσω 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 και
- Προσθέστε Προσαρμοσμένα Plugin:
- Γράψτε ένα **
