جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
بناء وربط روبوت مستودع في بيئة المحاكاة
gz-sim)SDFgz-sim للتحكم والحساساتros_gz| الميزة | Classic | Jetty (الجديد) |
|---|---|---|
| الأمر | gazebo | gz sim |
| الحزمة | gazebo_ros_pkgs | ros_gz |
| الإضافات | libgazebo_ros_*.so | gz-sim-*-system |
| مسار النموذج | GAZEBO_MODEL_PATH | GZ_SIM_RESOURCE_PATH |
| DiffDrive | libgazebo_ros_diff_drive.so | gz-sim-diff-drive-system |
sudo apt-get install gz-jetty
sudo apt install ros-jazzy-ros-gz # bridge + sim + image packages
# Verify
ros2 doctor
gz sim --versiongz sim shapes.sdf # GUI
gz sim -s # server only (headless)
gz sim -g # GUI only
gz sim -v 4 # verbosePhysics وSceneBroadcaster~/.gz/models/mobile_warehouse_robot/ (وليس ~/.gazebo/models)model.config الاسم والإصدار ويشير إلى model.sdfmodel.sdf الوصلات (Links) (القاعدة، العجلة اليسرى/اليمنى، العجلة الحرة caster، الليدار) مع كتل القصور الذاتي (Inertial) والمظهر المرئي (Visual) والتصادم (Collision)<link name="base_link">
<inertial><mass>15.0</mass>...</inertial>
<visual name="base_visual">...</visual>
<collision name="base_collision">...</collision>
</link>GPU مثبت عبر مفصل ثابت على lidar_link<sensor name="gpu_lidar" type="gpu_lidar">
<topic>lidar</topic>
<update_rate>10</update_rate>
<lidar>
<scan><horizontal><samples>640</samples>
<min_angle>-1.57</min_angle><max_angle>1.57</max_angle>
</horizontal></scan>
<range><min>0.08</min><max>10.0</max></range>
</lidar>
</sensor>base_link؛ وتقوم إضافة DiffDrive بتشغيلها معاbase_link
left_wheel
right_wheel
caster
lidar_link
<plugin filename="gz-sim-diff-drive-system"
name="gz::sim::systems::DiffDrive">
<left_joint>left_wheel_joint</left_joint>
<right_joint>right_wheel_joint</right_joint>
<wheel_separation>0.5</wheel_separation>
<wheel_radius>0.08</wheel_radius>
<topic>/model/warehouse_robot/cmd_vel</topic>
<odom_topic>/model/warehouse_robot/odometry</odom_topic>
</plugin>small_warehouse + ملف عالم رئيسي warehouse.sdfPhysics وUserCommands وSceneBroadcaster وSensors)، لوحات الواجهة الرسومية، الإضاءة، الأرضيةmodel:// وتوضع عبر <include><pose>...<include>
<name>warehouse_robot</name>
<pose>-4 -4 0.1 0 0 0</pose>
<uri>model://mobile_warehouse_robot</uri>
</include>ros_gz_bridge بين طبقة نقل Gazebo (gz.msgs.*) وأنواع رسائل ROS 2bridge.yaml- ros_topic_name: "/cmd_vel"
gz_topic_name: "/model/warehouse_robot/cmd_vel"
ros_type_name: "geometry_msgs/msg/Twist"
gz_type_name: "gz.msgs.Twist"
direction: ROS_TO_GZ
- ros_topic_name: "/odom"
gz_type_name: "gz.msgs.Odometry"
direction: GZ_TO_ROSROS 2
/cmd_velros_gz_bridge
Gazebo
/cmd_vel كدخل، و/odom و/scan و/tf كخرجملاحظة مهمة في ament_python
ament_python، يوجد مجلدا launch/ وconfig/ في جذر الحزمة، وليس داخل src/warehouse_simulation/
├── package.xml
├── setup.py
├── launch/warehouse_simulation.launch.py
└── config/bridge.yamlsetup.py بعمل glob() لهذه الملفات ضمن data_files حتى يقوم colcon بتثبيتهاملف التشغيل
Gazebo
gz_sim.launch.py
الجسر (Bridge)
parameter_bridge
gz_sim = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(pkg_ros_gz_sim, 'launch', 'gz_sim.launch.py')),
launch_arguments={'gz_args': f'-r {world_file}'}.items())
bridge = Node(
package='ros_gz_bridge',
executable='parameter_bridge',
arguments=['--ros-args', '-p', f'config_file:={bridge_config}'])colcon build --packages-select warehouse_simulation
source install/setup.bash
ros2 launch warehouse_simulation warehouse_simulation.launch.pyros2 topic list
# /cmd_vel /odom /scan /tf ...gz sim مع ros_gz وإضافات gz-sim-*-system) محل Gazebo Classic بالكامل - لا تخلط بين الدروسSDF: وصلات (قصور ذاتي/مظهر/تصادم) + مفصلات + إضافاتSDF إلزامية حتى يطابق الجسر الأسماء بشكل صحيحros_gz_bridge مع ملف إعداد YAML هي الطريقة القياسية لربط مواضيع Gazebo بمواضيع ROS 2ament_python إلى launch/ وconfig/ في جذر الحزمة، مربوطة داخل data_files في setup.pyMahmoud Abas|معمل عملي: محاكاة روبوت باستخدام Gazebo Jetty وROS 2 Jazzy