در فصل قبل دیدیم ARCHO از سه لایه سختافزاری تشکیل شده: Jetson، Raspberry Pi و یک میکروکنترلر. اما این لایهها چطور واقعاً به هم و به درایورهای موتور متصل میشوند؟ USB و WiFi برای این کار مناسب نیستند — نه از نظر مقاومت به نویز صنعتی، نه از نظر قابلیت اطمینان زمانی.
Controller Area Network — یک شبکه صنعتی مقاوم که در خودرو و رباتیک برای ارتباط بین Controllerها استفاده میشود.
| ویژگی | معنی |
|---|---|
| Differential Signaling | ارسال سیگنال روی دو سیم با پلاریته مخالف، که مقاومت بالایی در برابر نویز الکتریکی ایجاد میکند |
| Arbitration | هر پیام یک اولویت دارد؛ اگر دو دستگاه همزمان پیام بفرستند، مهمترین پیام برنده میشود |
| تشخیص خطا | خطای انتقال بهسرعت شناسایی و پیام دوباره ارسال میشود |
یک پیام (Frame) در CAN معمولاً از سه بخش تشکیل شده:
| بخش | معنی |
|---|---|
| CAN ID | شناسه پیام که هم نوع پیام و هم اولویت آن را تعیین میکند |
| DLC (Data Length Code) | تعداد بایتهای داده در این پیام |
| Data Bytes | محتوای واقعی پیام |
# نمونه پیام CAN برای فرمان سرعت موتور
ID: 0x201
Data:
[Velocity Low]
[Velocity High]
[Current Low]
[Current High]
...
یادت هست در فصل ۸ دیدیم diff_drive_controller از طریق controller_manager فرمان میفرستد؟ در سختافزار واقعی، این زنجیره یک لایه بیشتر دارد:
Hardware Interface (که در فصل ۸ بهطور خلاصه دیدیم) روی سختافزار واقعی دو تابع مفهومی اصلی دارد:
| تابع | وظیفه |
|---|---|
read() | خواندن Encoder، Velocity، Current و Fault از درایور موتور |
write() | ارسال Velocity Command، Torque Command، Enable و Brake به درایور موتور |
| خطا | پیامد |
|---|---|
| Termination اشتباه | بازتاب سیگنال و خطای ارتباطی |
| Baud Rate متفاوت بین دستگاهها | هیچ دستگاهی پیامهای دیگری را نمیفهمد |
| Ground نامناسب | نویز زیاد و خطاهای تصادفی |
| ID تکراری | تداخل پیامها و رفتار غیرقابلپیشبینی |
| Bus Load زیاد | تأخیر در رسیدن پیامهای حیاتی |
| کابل بلند و نامناسب | افت سیگنال و خطای بیت |
| نبود Heartbeat | سیستم متوجه قطعشدن یک دستگاه نمیشود |
| مدیریتنکردن Bus-Off | کل شبکه بعد از خطای پیاپی از کار میافتد |
CAN برای اکثر رباتهای متحرک مثل ARCHO کافی است. اما اگر ARCHO یک بازوی صنعتی چندمحوره با نیاز به هماهنگی زمانی بسیار دقیق داشته باشد، معمولاً از EtherCAT استفاده میشود.
| مناسب برای |
|---|
| Servo Drive |
| بازوی رباتیک چندمحوره |
| هماهنگی همزمان چند Axis |
| کنترل دقیق با Cycle Time بسیار پایین |
در ROS 2:
یکی از ویژگیهای کلیدی EtherCAT این است که میتواند ساعت داخلی همه Driveها را با هم هماهنگ کند — همه محورها از یک زمان مشترک synchronized پیروی میکنند. این برای حرکتهایی که چند محور باید دقیقاً همزمان و هماهنگ حرکت کنند (مثل یک بازوی جوشکاری چندمحوره) بسیار حیاتی است.
| CAN Bus | EtherCAT | |
|---|---|---|
| سرعت و دقت زمانی | مناسب اکثر رباتهای متحرک | دقت زمانی بسیار بالاتر |
| پیچیدگی | سادهتر و ارزانتر | پیچیدهتر و گرانتر |
| کاربرد رایج | موتور چرخ، سنسور، BMS | Servo Drive صنعتی، بازوی چندمحوره |
| مثال در ARCHO | چرخهای دیفرانسیل، Battery BMS | بازوی برداشت با چند محور هماهنگ |
حالا میدانی که پشت هر فرمان حرکتی که Nav2 یا MoveIt برای ARCHO صادر میکند، یک شبکه صنعتی واقعی — CAN Bus برای چرخها و سنسورها، یا EtherCAT برای بازوی چندمحوره — این فرمان را بهطور قابلاعتماد و بهموقع به درایورهای موتور میرساند.
پروژه ARCHO اکنون از CAN Bus برای اتصال درایور چرخها و Battery BMS به Jetson استفاده میکند، با Hardware Interface کاملی که read() و write() را روی SocketCAN پیادهسازی کرده است.
در فصل هجدهم همه این لایهها را کنار هم میگذاریم و میبینیم چطور از یک ARCHO شبیهسازیشده در Gazebo، به یک ARCHO واقعی روی سختافزار منتقل میشویم.