مسیر یادگیری ROS 2  ·  کتاب آموزشی تصویری

فصل هفدهم: CAN Bus و EtherCAT — رگ‌های ارتباطی ARCHO

وقتی WiFi و USB دیگر کافی نیستند
پیش‌نیاز: فصل ۸ (ros2_control)، فصل ۱۶ (سخت‌افزار)
پروژه پیوسته: سخت‌افزار واقعی ARCHO
شبکه‌های صنعتی: CAN Bus، EtherCAT
زمان مطالعه: ۹۰ تا ۱۱۰ دقیقه
در این فصل چه می‌خوانیم ۱۷.۱چرا ربات‌های صنعتی از شبکه‌های خاص استفاده می‌کنند ۱۷.۲CAN Bus: شبکه مقاوم صنعتی ۱۷.۳ساختار یک پیام CAN ۱۷.۴CAN در ros2_control ۱۷.۵خطاهای رایج CAN ۱۷.۶EtherCAT: وقتی زمان‌بندی دقیق‌تر لازم است ۱۷.۷CAN یا EtherCAT: کدام برای چه کاری ۱۷.۸جمع‌بندی، واژه‌نامه و تمرین‌ها

۱۷.۱چرا ربات‌های صنعتی از شبکه‌های خاص استفاده می‌کنند

در فصل قبل دیدیم ARCHO از سه لایه سخت‌افزاری تشکیل شده: Jetson، Raspberry Pi و یک میکروکنترلر. اما این لایه‌ها چطور واقعاً به هم و به درایورهای موتور متصل می‌شوند؟ USB و WiFi برای این کار مناسب نیستند — نه از نظر مقاومت به نویز صنعتی، نه از نظر قابلیت اطمینان زمانی.

۱۷.۲CAN Bus: شبکه مقاوم صنعتی

📖 CAN چیست

Controller Area Network — یک شبکه صنعتی مقاوم که در خودرو و رباتیک برای ارتباط بین Controllerها استفاده می‌شود.

ویژگیمعنی
Differential Signalingارسال سیگنال روی دو سیم با پلاریته مخالف، که مقاومت بالایی در برابر نویز الکتریکی ایجاد می‌کند
Arbitrationهر پیام یک اولویت دارد؛ اگر دو دستگاه هم‌زمان پیام بفرستند، مهم‌ترین پیام برنده می‌شود
تشخیص خطاخطای انتقال به‌سرعت شناسایی و پیام دوباره ارسال می‌شود
flowchart TB J["Jetson / Raspberry Pi"] --> U["USB-to-CAN"] U --> CB["CAN Bus"] CB --> M1["Motor Driver 1"] CB --> M2["Motor Driver 2"] CB --> BMS["Battery BMS"] CB --> SC["Safety Controller"] CB --> IO["IO Controller"] style CB fill:#eef0ff,stroke:#3d4bf5

۱۷.۳ساختار یک پیام CAN

یک پیام (Frame) در CAN معمولاً از سه بخش تشکیل شده:

بخشمعنی
CAN IDشناسه پیام که هم نوع پیام و هم اولویت آن را تعیین می‌کند
DLC (Data Length Code)تعداد بایت‌های داده در این پیام
Data Bytesمحتوای واقعی پیام
# نمونه پیام CAN برای فرمان سرعت موتور
ID: 0x201
Data:
  [Velocity Low]
  [Velocity High]
  [Current Low]
  [Current High]
  ...

۱۷.۴CAN در ros2_control

یادت هست در فصل ۸ دیدیم diff_drive_controller از طریق controller_manager فرمان می‌فرستد؟ در سخت‌افزار واقعی، این زنجیره یک لایه بیشتر دارد:

flowchart TB A["diff_drive_controller"] --> B["controller_manager"] B --> C["Hardware Interface"] C --> D["SocketCAN"] D --> E["CAN Bus"] E --> F["Motor Drivers"] style C fill:#eef0ff,stroke:#3d4bf5

Hardware Interface (که در فصل ۸ به‌طور خلاصه دیدیم) روی سخت‌افزار واقعی دو تابع مفهومی اصلی دارد:

تابعوظیفه
read()خواندن Encoder، Velocity، Current و Fault از درایور موتور
write()ارسال Velocity Command، Torque Command، Enable و Brake به درایور موتور

۱۷.۵خطاهای رایج CAN

خطاپیامد
Termination اشتباهبازتاب سیگنال و خطای ارتباطی
Baud Rate متفاوت بین دستگاه‌هاهیچ دستگاهی پیام‌های دیگری را نمی‌فهمد
Ground نامناسبنویز زیاد و خطاهای تصادفی
ID تکراریتداخل پیام‌ها و رفتار غیرقابل‌پیش‌بینی
Bus Load زیادتأخیر در رسیدن پیام‌های حیاتی
کابل بلند و نامناسبافت سیگنال و خطای بیت
نبود Heartbeatسیستم متوجه قطع‌شدن یک دستگاه نمی‌شود
مدیریت‌نکردن Bus-Offکل شبکه بعد از خطای پیاپی از کار می‌افتد

۱۷.۶EtherCAT: وقتی زمان‌بندی دقیق‌تر لازم است

CAN برای اکثر ربات‌های متحرک مثل ARCHO کافی است. اما اگر ARCHO یک بازوی صنعتی چندمحوره با نیاز به هماهنگی زمانی بسیار دقیق داشته باشد، معمولاً از EtherCAT استفاده می‌شود.

مناسب برای
Servo Drive
بازوی رباتیک چندمحوره
هماهنگی هم‌زمان چند Axis
کنترل دقیق با Cycle Time بسیار پایین
flowchart TB IPC["Industrial PC"] --> EM["EtherCAT Master"] EM --> D1["Servo Drive 1"] EM --> D2["Servo Drive 2"] EM --> IO["IO Module"] EM --> SM["Safety Module"] style EM fill:#f4effe,stroke:#8b5cf6

در ROS 2:

flowchart LR A["ros2_control"] --> B["EtherCAT Hardware Interface"] --> C["EtherCAT Master"] --> D["Servo Drives"]
🔧 Distributed Clocks: هماهنگی زمانی بین چند محور

یکی از ویژگی‌های کلیدی EtherCAT این است که می‌تواند ساعت داخلی همه Driveها را با هم هماهنگ کند — همه محورها از یک زمان مشترک synchronized پیروی می‌کنند. این برای حرکت‌هایی که چند محور باید دقیقاً هم‌زمان و هماهنگ حرکت کنند (مثل یک بازوی جوشکاری چندمحوره) بسیار حیاتی است.

۱۷.۷CAN یا EtherCAT: کدام برای چه کاری

CAN BusEtherCAT
سرعت و دقت زمانیمناسب اکثر ربات‌های متحرکدقت زمانی بسیار بالاتر
پیچیدگیساده‌تر و ارزان‌ترپیچیده‌تر و گران‌تر
کاربرد رایجموتور چرخ، سنسور، BMSServo Drive صنعتی، بازوی چندمحوره
مثال در ARCHOچرخ‌های دیفرانسیل، Battery BMSبازوی برداشت با چند محور هماهنگ

۱۷.۸جمع‌بندی فصل هفدهم

حالا می‌دانی که پشت هر فرمان حرکتی که Nav2 یا MoveIt برای ARCHO صادر می‌کند، یک شبکه صنعتی واقعی — CAN Bus برای چرخ‌ها و سنسورها، یا EtherCAT برای بازوی چندمحوره — این فرمان را به‌طور قابل‌اعتماد و به‌موقع به درایورهای موتور می‌رساند.

✅ نقطه بازبینی یادگیری
  • می‌توانم توضیح دهم چرا CAN Bus در برابر نویز صنعتی مقاوم است.
  • می‌دانم Arbitration در CAN چه کاری انجام می‌دهد.
  • می‌توانم حداقل چهار خطای رایج CAN را نام ببرم.
  • می‌دانم چرا EtherCAT برای هماهنگی چند محور از CAN مناسب‌تر است.
🌍 ارتباط با پروژه اصلی

پروژه ARCHO اکنون از CAN Bus برای اتصال درایور چرخ‌ها و Battery BMS به Jetson استفاده می‌کند، با Hardware Interface کاملی که read() و write() را روی SocketCAN پیاده‌سازی کرده است.

فصل بعد چه چیزی اضافه می‌کند

در فصل هجدهم همه این لایه‌ها را کنار هم می‌گذاریم و می‌بینیم چطور از یک ARCHO شبیه‌سازی‌شده در Gazebo، به یک ARCHO واقعی روی سخت‌افزار منتقل می‌شویم.

واژه‌نامه فصل هفدهم

CAN Bus
شبکه صنعتی مقاوم برای ارتباط Controllerها با استفاده از سیگنال‌دهی دیفرانسیل.
Arbitration
مکانیزم تعیین اولویت پیام‌ها هنگام ارسال هم‌زمان چند پیام روی CAN.
SocketCAN
رابط استاندارد لینوکس برای کار با شبکه‌های CAN مثل یک Socket شبکه معمولی.
EtherCAT
شبکه صنعتی با زمان‌بندی بسیار دقیق، مناسب کنترل چند محور Servo هماهنگ.
Distributed Clocks
مکانیزم EtherCAT برای هماهنگ‌سازی ساعت داخلی چند دستگاه.
Bus-Off
حالت خطای شدید در CAN که در آن یک گره به‌طور کامل از شبکه قطع می‌شود.

خطاهای رایج فصل هفدهم — جمع‌بندی