ملخص سريع
- تثبيت 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> - تشغيل بدون واجهة رسومية لأغراض التكامل المستمر:
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> <!-- ضجيج 1 سم -->
</noise>
</sensor>
نصائح واقعية:
- ليدار: استخدم
stddev="0.01"لضجيج 1 سم. - كاميرا: أضف تشوه عدسة:
<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لتقليل التأخير. - ROS 1 القديم: استخدم
ros1_bridgeإذا كنت تخطط لمزج ROS 1/2.
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> <!-- متر/ثانية -->
<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. محاكاة بدون واجهة رسومية لأغراض التكامل المستمر
شغل 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للمحاكاة المحلية). - الأداء: الوضع بدون واجهة رسومية أسرع ولكن بدون تشخيص رسومي.
- السجلات: توجيه الخرج إلى ملف:
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 و
- إضافة بلوجينات مخصصة:
- كتابة بلوجين مخصص لتلبية احتياجاتك.
- ابدأ من المثال أعلاه ووسع الوظائف.
- تجربة واقعية:
- إضافة ضجيج وظروف بيئية مثل الرياح والأضواء.
- اختبار التصادمات والتفاعلات الديناميكية.
- تكامل مع CI/CD:
- دمج Gazebo Sim في أنابيب CI/CD الخاصة بك.
- استخدم الوضع بدون واجهة رسومية لاختبارات سريعة.
- استكشاف بلوجينات إضافية:
- استكشف بلوجينات Gazebo Sim الرسمية مثل
gz-sim-sensorsوgz-sim-physics.
- استكشف بلوجينات Gazebo Sim الرسمية مثل
ملاحظة: تأكد من مراجعة الدокуUMENTATION الرسمية للحصول على تفاصيل إضافية حول الميزات المتقدمة.
