В даний час ми розробляємо мобільний робот + навісна рука з декількома контрольованими ступенями свободи та датчиками.
Я розглядаю архітектуру в двох частинах:
Набір контролерів у режимі реального часу (або Raspeberry Pis, що працює під керуванням RTOS, таких як Xenomai, або мікроконтролери з голими металами) для управління руховими двигунами та кодерами. Назвемо ці машини RTx, з x = 1,2,3 ... залежно від кількості мікроконтролерів. Цей цикл управління буде працювати на 200 Гц.
Потужна ванільна машина Linux, що працює на ROS, для обчислення SLAM, mocap та виконання логіки високого рівня (вирішуйте завдання робота та обчислюйте бажане положення та швидкість двигунів). Цей цикл управління буде працювати на 30 Гц.
Я знаю, що моя основа повинна бути масштабованою, щоб враховувати більше двигунів, більше датчиків, більше ПК (наприклад, для зовнішньої карти).
Моя основна проблема полягає у вирішенні питання про те, як інший RTx спілкуватиметься з PC1. Я переглянув документи, що стосуються архітектури роботів (наприклад, HRP2 ), найчастіше вони описують архітектуру управління високого рівня, але мені ще потрібно знайти інформацію про те, як низький рівень спілкуватися з високим рівнем і масштабується. Я щось пропустив?
Для того, щоб з'єднати швидкі RT-машини, що забезпечують управління двигуном, до PC1, я розглянув TCP / IP, CAN і UART:
- TCP / IP: не детермінований, але простий у створенні. Невже детермінізм - це справжнє питання (оскільки воно буде використовуватися лише на повільній швидкості 30 Гц)?
- МОЖЛИВО: повільний, дуже надійний, націлений на автомобілі (бачили, що є деякі приклади використання CAN з роботами, але це виглядало екзотично)
- UART: якби у мене була лише одна RT-машина для управління двигуном, я вважав би UART, але, мабуть, цей порт не дуже добре розширюється з багатьма RTx. Чи справді TCP / IP не спрацьовує через його недетермінованих характеристик? Це так просто у використанні ...
На даний момент жодне рішення мені не здається очевидним. І оскільки я не можу знайти жодного серйозного прикладу робота, використовуючи конкретне надійне і масштабоване рішення, я не впевнено робити вибір.
Хтось має чіткий погляд на цю точку чи літературу, на яку слід вказати? Чи існують типові або основні комунікаційні рішення, які використовуються на роботах?