این فصل جمعبندی همه فصلهای قبلی است: خبر خوب این است که وقتی از Gazebo به سختافزار واقعی ARCHO میروی، بیشتر معماریای که ساختی دستنخورده میماند.
| لایه | تغییر میکند؟ |
|---|---|
| Nav2، SLAM، Controllers | خیر |
| نامگذاری TF، URDF | خیر |
| Topicهای سطح بالا | خیر |
| Hardware Interface (لایه پایینترین ros2_control) | بله — این تنها قسمتی است که واقعاً عوض میشود |
دقیقاً به همین دلیل در فصل ۸ بهقدر کافی روی جداسازی Hardware Interface از بقیه معماری تأکید کردیم. اگر آن جداسازی درست انجام شده باشد، انتقال از شبیهسازی به واقعیت فقط یک تعویض لایه پایینی است، نه بازنویسی کل سیستم.
robot_state_publisherrobot_localizationدقیقاً همان دلیلی که در فصل ۱۲ درباره Lifecycle Nodes یاد گرفتی: اگر Nav2 قبل از آمادهشدن Localization فعال شود، ممکن است تصمیمهای خطرناکی بگیرد. این ترتیب Bringup، همان اصل را روی کل سیستم فیزیکی پیاده میکند.
قبل از هر حرکت اول ARCHO روی زمین واقعی:
cmd_vel صفر است (قبل از شروع تست).Command positive
↓
Wheel rotates forward?
اگر جواب منفی بود، این چهار مورد را بهترتیب بررسی کن: جهت موتور، جهت Encoder، علامت Command، و Mapping درایور.
هرگز از سرعت بالا شروع نکن. ترتیب امن:
0.05 m/s
0.10 m/s
0.20 m/s
0.30 m/s
در هر مرحله، پیش از افزایش سرعت مطمئن شو ARCHO دقیقاً همانطور که انتظار داری حرکت میکند.
به ARCHO فرمان میدهی ۵ متر مستقیم برود، اما فاصله واقعی طیشده ۴.۸ متر است:
ضریب اصلاح = 5 / 4.8 = 1.0417
new_radius = old_radius × 1.0417
به ARCHO فرمان یک چرخش کامل میدهی، اما بهجای ۳۶۰ درجه فقط ۳۳۰ درجه واقعاً میچرخد:
این دقیقاً همان پارامترهایی هستند که در فصل ۸ در controllers.yaml برای
diff_drive_controller تنظیم کردیم (wheel_radius، wheel_separation).
اگر این مقادیر با هندسه واقعی ARCHO دقیقاً همخوانی نداشته باشند، Odometry (فصل ۹) از همان ابتدا
دچار خطای سیستماتیک میشود — و این خطا مستقیم به SLAM و Nav2 هم منتقل خواهد شد.
باید در تمام این شرایط تست کنی که ARCHO واقعاً متوقف میشود:
یادت هست در فصل ۱۶ روی Watchdog مستقل روی ESP32 تأکید کردیم؟ اینجا دلیلش کاملاً روشن میشود: اگر فقط به Watchdog سطح ROS تکیه کنی و همان کامپیوتری که ROS روی آن اجرا میشود کرش کند، هیچ لایهای باقی نمیماند که ARCHO را متوقف کند. ایمنی واقعی از تکرار (Redundancy) لایهها میآید، نه از یک نقطه شکست واحد.
برای اینکه ARCHO بعد از هر قطعی برق یا ریاستارت، بدون دخالت انسان دوباره بالا بیاید:
# /etc/systemd/system/archo-bringup.service
[Unit]
Description=ARCHO ROS 2 Bringup
After=network-online.target
[Service]
Type=simple
User=robot
ExecStart=/usr/local/bin/start_archo.sh
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
#!/bin/bash
# /usr/local/bin/start_archo.sh
source /opt/ros/jazzy/setup.bash
source /home/robot/archo_ws/install/setup.bash
exec ros2 launch archo_bringup real_robot.launch.py
وقتی ARCHO در انبار واقعی و بدون نظارت مستقیم کار میکند، باید بتوانی به این سؤالها جواب بدهی:
| ابزار | کاربرد |
|---|---|
| rosbag2 | ضبط کامل داده برای بازپخش و تحلیل بعدی |
| diagnostic_msgs | گزارش استاندارد سلامت هر زیرسیستم |
| /diagnostics | Topic مرکزی جمعآوری وضعیت سلامت |
| Prometheus یا مشابه | مانیتورینگ متریکها در طول زمان |
| Log Rotation | جلوگیری از پرشدن دیسک |
| Health Heartbeat | تشخیص سریع اینکه یک زیرسیستم از کار افتاده |
ros2 bag record \
/scan \
/imu/data \
/odometry/filtered \
/tf \
/tf_static \
/diagnostics
حتی با بهترین شبیهسازی Gazebo (فصل ۷)، دنیای واقعی همیشه غافلگیرت میکند:
| شبیهسازی | واقعیت |
|---|---|
| زمین کامل و صاف | لغزش و ناهمواری |
| چرخ ایدهآل | سایش، اختلاف جزئی بین چرخها |
| نویز کنترلشده | نویز واقعی و پیشبینینشدنی |
| تأخیر کم و ثابت | تأخیر متغیر شبکه و سختافزار |
| سنسور تمیز | گردوغبار، نور مستقیم، بازتاب سطوح |
ARCHO حالا از یک شبیهسازی Gazebo به یک ربات فیزیکی واقعی تبدیل شده — با ترتیب Bringup کنترلشده، Preflight Checklist کامل، چرخهای کالیبرهشده، چند لایه ایمنی مستقل، راهاندازی خودکار با systemd و یک سیستم Logging که همیشه میگوید چرا اتفاقی افتاد.
پروژه ARCHO اکنون یک نسخه فیزیکی کاملاً کالیبرهشده دارد که با systemd بهطور خودکار راهاندازی میشود، rosbag2 برای عیبیابی ضبط میکند و از یک زنجیره ایمنی چندلایه برخوردار است.
در فصل نوزدهم به سراغ استانداردهای تولیدی سطح صنعتی میرویم: QoS، DDS، Diagnostics و معماری ایمنی — چیزهایی که یک پروژه را از «کار میکند» به «قابلاعتماد در تولید» میرسانند.