۱. معماری پیشنهادی

گره ناوبری یا teleoperation پیام /cmd_vel را تولید می‌کند. گره پایه ربات، سرعت خطی و زاویه‌ای را به سرعت چرخ‌ها تبدیل می‌کند و از طریق CAN یا رابط مناسب به کنترلرها می‌فرستد. کنترل حلقه جریان/سرعت با نرخ مناسب باید در MCU یا درایور موتور انجام شود، نه در یک گره عادی لینوکسی.

۲. تبدیل سرعت ربات به سرعت چرخ

برای ربات دیفرانسیلی با شعاع چرخ r و فاصله دو چرخ L، سرعت چرخ چپ برابر vL = (v - ωL/2)/r و سرعت چرخ راست vR = (v + ωL/2)/r است. واحدها را صریح نگه دارید: متر بر ثانیه، رادیان بر ثانیه و رادیان بر ثانیه برای چرخ. محدودیت سرعت و شتاب را پیش از ارسال اعمال کنید.

۳. اودومتری و TF

سرعت انکودرها را به جابه‌جایی چرخ تبدیل کنید و pose را به‌روزرسانی کنید. چارچوب‌های map، odom، base_link و فریم حسگرها باید با نام‌گذاری و جهت محورها سازگار باشند. اودومتری چرخ به‌تنهایی خطای تجمعی دارد؛ برای کاربردهای دقیق‌تر، IMU و SLAM را نیز ارزیابی کنید.

۴. Watchdog و رفتار ایمن

اگر فرمان تازه در بازه تعیین‌شده نرسید، سرعت هدف را صفر کنید و در صورت نیاز درایور را وارد حالت ایمن کنید. قطع CAN، خطای انکودر، اضافه‌جریان، دمای بالا و ریست کنترلر باید تشخیص داده شوند. بازیابی خطا باید کنترل‌شده باشد و به فرمان ناخواسته منجر نشود.

۵. آزمون مرحله‌ای

ابتدا گره‌ها و پیام‌ها را در شبیه‌سازی تست کنید، سپس با چرخ‌های آزاد و ولتاژ/جریان محدود، جهت موتورها و انکودرها را بررسی کنید. بعد از آن آزمون سرعت کم، توقف اضطراری، قطع ارتباط و راه‌اندازی مجدد را انجام دهید. لاگ‌گیری از فرمان، بازخورد، خطا و timestamp عیب‌یابی را سریع‌تر می‌کند.

جمع‌بندی

یک رابط سخت‌افزاری کوچک و مستند، پیام‌های CAN نسخه‌بندی‌شده و تست‌های تکرارپذیر، نگهداری سامانه را بسیار ساده‌تر می‌کند. ابتدا حلقه کنترل و ایمنی را پایدار کنید و سپس سراغ ناوبری و قابلیت‌های پیچیده‌تر بروید.