Logo

معمل 05: محاكاة TurtleBot3 مع RViz - الكاميرا وLiDAR وOdometry

7 دقائق قراءة
شرائح الدرس
1 / 14

معمل 05: محاكاة TurtleBot3 باستخدام RViz

مراقبة الكاميرا والليدار (LiDAR) والقياس التقريبي (Odometry)

نظرة عامة

يقدّم هذا المعمل محاكاة روبوت TurtleBot3 مع مراقبة شاملة للحساسات باستخدام RViz. ستتعلّم كيفية تصور تدفقات الكاميرا (camera feeds)، وبيانات LiDAR، وفهم مفاهيم الـodometry الخاصة بتحديد موقع الروبوت (robot localization).

أهداف التعلّم

  • إعداد محاكاة TurtleBot3 في Gazebo
  • استخدام RViz لمراقبة حساسات الكاميرا وLiDAR
  • فهم بيانات الـodometry وتقدير وضعية (pose) الروبوت
  • تنفيذ تحكم بالتشغيل عن بعد (teleoperation) لـTurtleBot3
  • تحليل بيانات الحساسات لتطبيقات الملاحة (navigation)

المتطلبات الأساسية

متطلبات البرامج

  • ROS 2 Jazzy Jalisco
  • حزم TurtleBot3 (من المصدر)
  • بيئة محاكاة Gazebo
  • أداة التصور RViz

أوامر التثبيت

تثبيت Gazebo والاعتماديات:

sudo apt-get update
sudo apt-get install curl lsb-release gnupg
sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install gz-harmonic
 
# Install Navigation and SLAM packages
sudo apt install ros-jazzy-cartographer ros-jazzy-cartographer-ros
sudo apt install ros-jazzy-navigation2 ros-jazzy-nav2-bringup
sudo apt install ros-jazzy-rviz2 ros-jazzy-rqt*

تثبيت حزم TurtleBot3 (داخل ros_ws الخاصة بك):

cd ~/Desktop/ROS-2-Practical-Course-Roadmap-2025/ros_ws/src
git clone -b jazzy https://github.com/ROBOTIS-GIT/DynamixelSDK.git
git clone -b jazzy https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone -b jazzy https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone -b jazzy https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
 
# Build the workspace
cd ~/Desktop/ROS-2-Practical-Course-Roadmap-2025/ros_ws
colcon build --symlink-install
source install/setup.bash

إعداد بيئة العمل:

# Add to ~/.bashrc
echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
source ~/.bashrc

فهم المفاهيم الأساسية

ما هي الـOdometry؟

الـOdometry هي استخدام بيانات حساسات الحركة لتقدير التغيّر في الموضع بمرور الوقت. في الروبوتات:

  • الغرض: تتبّع موضع الروبوت واتجاهه (pose) بالنسبة لنقطة البداية
  • مصادر البيانات: مُشفِّرات العجلات (wheel encoders)، وحدة القياس بالقصور الذاتي (IMU)، الـodometry البصرية
  • القيود: يتراكم الخطأ بمرور الوقت (drift أو انحراف)، وتتأثر بانزلاق العجلات وضوضاء الحساسات
  • التطبيقات: الملاحة بالتقدير (dead reckoning)، ودمج البيانات (sensor fusion) مع طرق تحديد الموقع الأخرى

بنية رسالة الـOdometry

رسالة nav_msgs/msg/Odometry تحتوي على:

# Pose (position + orientation) with uncertainty
geometry_msgs/PoseWithCovariance pose
  geometry_msgs/Pose pose
    geometry_msgs/Point position      # x, y, z coordinates
    geometry_msgs/Quaternion orientation  # rotation as quaternion
  float64[36] covariance             # uncertainty matrix
 
# Velocity with uncertainty
geometry_msgs/TwistWithCovariance twist
  geometry_msgs/Twist twist
    geometry_msgs/Vector3 linear     # linear velocity (x, y, z)
    geometry_msgs/Vector3 angular    # angular velocity (x, y, z)
  float64[36] covariance            # velocity uncertainty

إعدادات حساسات TurtleBot3

  • الكاميرا: كاميرا RGB للإدراك البصري
  • LiDAR: ماسح ليزري بزاوية °360 لاكتشاف العوائق ورسم الخرائط
  • IMU: وحدة قياس بالقصور الذاتي لتحديد الاتجاه والتسارع
  • مُشفِّرات العجلات (Wheel Encoders): تتبّع دوران العجلات لحساب الـodometry

ميزات المعمل المُحسَّنة

يتضمن هذا المعمل حزمة مخصصة لمراقبة TurtleBot3 (turtlebot3_lab05) بميزات متقدمة:

nodes المراقبة المخصصة

  1. مراقب Odometry اللحظي (odometry_monitor)

    • تتبّع لحظي (real-time) للموضع والسرعة
    • مقارنة بين السرعة المطلوبة (commanded) والسرعة الفعلية
    • حسابات المسافة واكتشاف العوائق
    • مراقبة حالة تحويلات TF
  2. مُسجِّل بيانات الحساسات (sensor_logger)

    • جمع تلقائي للبيانات من جميع الحساسات
    • تصدير بصيغة JSON للتحليل
    • ملخصات إحصائية لأداء الحساسات

تشغيل المعمل الكامل

بداية سريعة - تشغيل شامل بأمر واحد:

cd ~/Desktop/ROS-2-Practical-Course-Roadmap-2025/ros_ws
export TURTLEBOT3_MODEL=waffle_pi
export ROS_DOMAIN_ID=30
source install/setup.bash
ros2 launch turtlebot3_lab05 lab05_complete.launch.py

هذا يُشغّل:

  • محاكاة Gazebo مع TurtleBot3
  • RViz بإعدادات مسبقة لعرض الحساسات
  • مراقبة odometry لحظية
  • تسجيل بيانات الحساسات
  • جميع جسور (bridges) ROS-Gazebo اللازمة

طرق التحكم

إذا واجه teleop بلوحة المفاتيح مشاكل في الطرفية، استخدم النشر المباشر للأوامر:

  1. يمكنك استخدام node الـteleopkey من المعمل 04 لكن يجب تعديل نوع الرسالة
  2. استخدم هذه الـnode الجاهزة
  export TURTLEBOT3_MODEL=waffle_pi
  export ROS_DOMAIN_ID=30
  source install/setup.bash
  ros2 run turtlebot3_teleop teleop_keyboard
  1. التحكم اليدوي عبر نشر الـTopic:
# Move forward and turn right
ros2 topic pub --rate 10 /cmd_vel geometry_msgs/msg/TwistStamped \
'{header: {stamp: {sec: 0, nanosec: 0}, frame_id: ""},
  twist: {linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.1}}}'
 
# Stop the robot
ros2 topic pub --once /cmd_vel geometry_msgs/msg/TwistStamped \
'{header: {stamp: {sec: 0, nanosec: 0}, frame_id: ""},
  twist: {linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}}'

ملاحظة: TurtleBot3 في هذا المعمل يستخدم رسائل TwistStamped على topic باسم /cmd_vel، والتي تتضمن معلومات ترويسة (header) لتتبّع أفضل للطابع الزمني (timestamp).


إعدادات عرض RViz

العروض الأساسية اللازمة لهذا المعمل

  1. Robot Model

    • يعرض نموذج TurtleBot3 ثلاثي الأبعاد
    • الـTopic: وصف الروبوت (Robot description)
  2. LaserScan

    • الـTopic: /scan
    • النمط: نقاط (Points) أو كرات (Spheres)
    • الحجم: 0.1 متر
    • اللون: حسب الشدة (intensity) أو ثابت
  3. Image

    • الـTopic: /camera/image_raw
    • النقل (Transport): مضغوط (compressed) (لأداء أفضل)
  4. Odometry

    • الـTopic: /odom
    • طول السهم: 0.3 متر
    • إظهار المسار (Show Trail): نعم (آخر 100 وضعية)
  5. TF

    • يعرض العلاقات بين إطارات الإحداثيات (coordinate frames)
    • فعّل الإطارات: base_link، odom، map

حفظ إعدادات RViz

احفظ إعداد RViz الخاص بك لاستخدامه لاحقًا:

  • File → Save Config As → turtlebot3_lab05.rviz

أوامر تحليل الـTopics

# List all active topics
ros2 topic list
 
# Get topic information
ros2 topic info /scan
ros2 topic info /odom
ros2 topic info /camera/image_raw
 
# Check message frequency
ros2 topic hz /scan
ros2 topic hz /odom
 
# View message structure
ros2 interface show sensor_msgs/msg/LaserScan
ros2 interface show nav_msgs/msg/Odometry
ros2 interface show sensor_msgs/msg/Image

فهم شجرة TF الخاصة بـTurtleBot3

تُظهر شجرة التحويلات (Transform أو TF) العلاقات المكانية بين إطارات الإحداثيات:

map → odom → base_footprint → base_link → sensors (camera_link, base_scan)
  • map: إطار المرجع العام (Global reference frame)
  • odom: إطار الـodometry (ينحرف بمرور الوقت)
  • base_link: إطار الجسم الرئيسي للروبوت
  • base_scan: إطار حساس LiDAR
  • camera_link: إطار حساس الكاميرا

اعرض شجرة TF:

ros2 run tf2_tools view_frames

استكشاف الأخطاء وإصلاحها

مشاكل شائعة

  1. نموذج TurtleBot3 غير مُعرَّف

    export TURTLEBOT3_MODEL=waffle_pi
  2. حزمة TurtleBot3 Gazebo مفقودة

    • الخطأ: Package 'turtlebot3_gazebo' not found
    • الحل: تأكد من استنساخ (clone) وبناء مستودع turtlebot3_simulations:
    cd src/
    git clone -b jazzy https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
    cd .. && colcon build --symlink-install
  3. RViz لا يُظهر نموذج الروبوت

    • تحقق من أن robot_state_publisher يعمل
    • تحقق من نشر ملف URDF
  4. لا توجد صورة كاميرا في RViz

    • تحقق من إضافة (plugin) الكاميرا في Gazebo
    • تحقق من اسم الـtopic: /camera/image_raw
  5. بيانات LiDAR غير مرئية

    • تأكد من ضبط الإطار الثابت (Fixed Frame) بشكل صحيح
    • تحقق من topic الخاص بـLaserScan: /scan
  6. مشاكل في التحكم بلوحة المفاتيح (Teleop)

    # Alternative: Direct velocity command publishing
    ros2 topic pub --rate 10 /cmd_vel geometry_msgs/msg/TwistStamped \
    '{header: {stamp: {sec: 0, nanosec: 0}, frame_id: ""},
      twist: {linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.1}}}'
  7. الروبوت لا يتحرك رغم الأوامر

    • تحقق من حالة محاكاة Gazebo: تأكد من أن المحاكاة ليست في وضع الإيقاف المؤقت
    • تحقق من استقبال الأوامر: استخدم مراقب الـodometry للتأكد من استقبال أوامر السرعة
    • تحقق من اتصال الـtopic: تأكد من وجود publishers وsubscribers لـtopic باسم /cmd_vel
    • فيزياء Gazebo: أعِد تشغيل Gazebo إذا توقف محرك الفيزياء عن الاستجابة

أوامر مفيدة لاستكشاف الأخطاء

# Check running nodes
ros2 node list
 
# Verify transforms
ros2 run tf2_ros tf2_echo map base_link
 
# Monitor system performance
ros2 node info /gazebo
 
# Check topic connections
ros2 topic info /cmd_vel
ros2 topic info /odom
 
# Verify message flow
ros2 topic echo /cmd_vel --once
ros2 topic echo /odom --once
 
# Test workspace build
./test_lab05.sh

تحسين الأداء

  • أداء Gazebo: إذا كانت المحاكاة بطيئة، قلّل جودة الكاميرا أو عطّل الإضافات (plugins) غير المستخدَمة
  • أداء RViz: قيّد حجم سُحُب النقاط (point cloud) وقلّل معدلات التحديث لتحسين أداء التصور
  • مشاكل الشبكة: تأكد من ضبط ROS_DOMAIN_ID بشكل متسق عبر جميع الطرفيات

مخرجات التعلّم المتوقَّعة

بعد إتمام هذا المعمل، يجب أن تفهم:

  1. بنية TurtleBot3: نموذج الروبوت، الحساسات، وإطارات الإحداثيات
  2. تصور RViz: كيفية إعداد واستخدام RViz لمراقبة الحساسات
  3. مفاهيم الـOdometry: تتبّع الموضع، عدم اليقين، والقيود
  4. دمج الحساسات: كيف تتكامل بيانات الكاميرا وLiDAR مع بعضها
  5. علاقات TF: تحويلات إطارات الإحداثيات في ROS 2

الخطوات التالية

يُجهّزك هذا المعمل لِـ:

  • المعمل 06: SLAM (تحديد الموقع ورسم الخريطة في آنٍ واحد)
  • المعمل 07: الملاحة الذاتية باستخدام Nav2
  • تقنيات متقدمة لدمج الحساسات وتحديد الموقع

المراجع