В настоящее время мы разрабатываем мобильный робот + установленный кронштейн с несколькими контролируемыми степенями свободы и датчиками.
Я рассматриваю архитектуру в двух частях:
Набор контроллеров реального времени (Raspeberry Pis с ОСРВ, такими как Xenomai или голые металлические микроконтроллеры) для управления двигателями и энкодерами. Назовем эти машины RTx, с x = 1,2,3… в зависимости от количества микроконтроллеров. Этот цикл управления будет работать на частоте 200 Гц.
Мощная ванильная машина Linux, работающая под управлением ROS, для вычисления SLAM, mocap и выполнения логики высокого уровня (решить задачу робота и вычислить желаемое положение и скорость двигателей). Этот цикл управления будет работать с частотой 30 Гц.
Я знаю, что моя структура должна быть масштабируемой, чтобы учитывать больше двигателей, больше датчиков, больше компьютеров (например, для внешнего mocap).
Моя главная проблема состоит в том, чтобы решить, как установить связь между различными RTx и ПК1. Я смотрел на документы, связанные с архитектурой роботов (например, HRP2 ), чаще всего они описывают архитектуру управления высокого уровня, но мне еще предстоит найти информацию о том, как обеспечить связь низкого уровня с высоким уровнем и масштабируемым способом. Я что-то пропустил?
Чтобы соединить машины быстрого RT, обеспечивающие управление двигателем, с ПК1, я рассмотрел TCP / IP, CAN и UART:
- TCP / IP: не детерминированный, но легко устанавливаемый. Является ли недетерминизм реальной проблемой (так или иначе она будет использоваться только на медленной скорости 30 Гц)?
- CAN: медленный, очень надежный, ориентированный на автомобили (есть примеры использования CAN с роботами, но это выглядело экзотично)
- UART: если бы у меня была только одна машина RT для управления двигателем, я бы рассмотрел UART, но я думаю, что этот порт плохо масштабируется со многими RTx. Действительно ли TCP / IP бесполезен из-за его недетерминированных характеристик? Это так просто в использовании ...
На данный момент ни одно решение не кажется очевидным для меня. И поскольку я не могу найти серьезного примера робота, использующего конкретное надежное и масштабируемое решение, я не чувствую уверенности в том, чтобы сделать выбор.
У кого-нибудь есть четкое мнение по этому вопросу или литература, на которую можно указать? Существуют ли типичные или общепринятые коммуникационные решения для роботов?