Рассматривается вариант робота распределенной архитектуры с блоками:
- центральный вычислительный блок (Cortex-A8/9/15, Linux, ROS2)
- блок управления приводом А1 (STM32F4, ROS2, FreeRTOS)
- ....
- блок управления приводом АN (STM32F4, ROS2, FreeRTOS)
Информационную шину планируется реализовать на CAN (или CAN FD).
Вопрос 1: Кто либо использовал CAN в ROS1/ROS2?
Вопрос 2: У кого есть опыт использования CAN FD? Так ли он лучше CAN 2.0A/B? Какие могут быть "подводные камни"? То что я вижу, это увеличенный payload с 8 до 64 байт (!) и макс. пропускная способность с 1M до >1M
Детали:
Информационную шину физически можно реализовать используя CAN, Ethernet, RS-485 (другие интерфейсы пока не рассматриваются)
CAN хорош почти всем, по сравнению с Ethernet и RS-485.
Достоинства:
- гарантированность доставки
- арбитраж сообщений
- "Жесткий" Realtime
- всего 4 линии (CAN_H, CAN_L, VBUS, GND) на всех устройствах
- маленькая полезная нагрузка (8 байт)
- низкая пропускная способность (Мах: 1Мbps ~ 100-120 мкс на 8 полезных байт)
Если вернуться к теме ROS2. В анонсах ROS2 заявляется поддержка транспорта поверх Ethernet, UART, RS485. CAN-а там не увидел.
Как вариант, нужно "положить" UDP/IP поверх CAN, вместо Ethernet. Поэтому и вопрос, может кто-либо уже реализовал подобное или начинал делать, но наткнулся на "грабли" из-за которых решение оказалось нецелесообразным.
Для ROS1 CAN тоже не очень удачно ложится, т.к. там используется TCPROS (поверх TCP), а квитирование TCP избыточно с учетом гарантированности доставки CAN.
Т.о. есть отличный физический интерфейс CAN, но, насколько я вижу, он почему-то не очень пользуется популярностью в робототехнике или я пока еще "не в теме".