Работа с CAN на роботе
На платформе BRover-E5 используется шина CAN (Controller Area Network) — промышленный протокол обмена данными между устройствами в реальном времени. Он широко применяется в робототехнике, автомобилях и встраиваемых системах благодаря своей надёжности, устойчивости к помехам и детерминированному поведению.
CAN позволяет объединять контроллеры, датчики и исполнительные устройства в единую сеть, где каждое устройство может передавать и принимать сообщения без центрального управляющего узла.
CAN-интерфейсы на роботе
На Raspberry Pi, установленном в BRover-E5, доступны два CAN-интерфейса:
can0 — системный интерфейс
Интерфейс can0 используется внутренними компонентами робота:
- связь с драйверами моторов
- обмен данными с контроллерами платформы
- управление движением и телеметрией
Не используйте can0 для пользовательских экспериментов без необходимости: ошибка в системной CAN-шине может нарушить работу низкоуровневой электроники ровера.
can1 — пользовательский интерфейс
Интерфейс can1 предназначен для подключения внешних устройств и разработки собственных решений.
Через него можно:
- подключать датчики и микроконтроллеры
- отправлять и принимать CAN-сообщения
- интегрировать CAN с ROS 2 (через ноды-посредники)
- реализовывать собственные протоколы обмена
Этот интерфейс полностью изолирован от системного (can0) и безопасен для экспериментов.
Параметры CAN-шины
На роботе используется расширенный режим CAN FD (Flexible Data-rate), который позволяет передавать больше данных за одно сообщение по сравнению с классическим CAN.
Основные параметры:
- Тип: CAN FD
- Bitrate (арбитражная скорость): 1 000 000 бит/с
- Dbitrate (скорость передачи данных): 8 000 000 бит/с
Интерфейсы обычно запускаются автоматически при загрузке системы через canhat.service. Подробнее см. раздел Системные сервисы.
Обычная диагностика
Для обычной проверки CAN не требуется вручную перезапускать интерфейс. Сначала проверьте состояние пользовательского интерфейса can1:
ip -details link show can1
Команда выводит:
- текущее состояние интерфейса;
- режим работы (включён ли CAN FD);
- статистику передачи;
- счётчики ошибок.
Если система работает корректно, интерфейс должен быть включён, а счётчики ошибок должны быть равны 0.

can1.Для просмотра сообщений на пользовательской CAN-шине используйте:
candump can1
Ручное управление интерфейсом
Обычно can0 и can1 уже настроены автоматически через canhat.service. Выполняйте ручное управление интерфейсом только для диагностики или восстановления после ошибки.
Если необходимо вручную включить интерфейс can1:
sudo ip link set can1 up txqueuelen 65535 type can bitrate 1000000 dbitrate 8000000 fd on
Пояснение параметров:
bitrate— скорость арбитража (основной канал управления)dbitrate— скорость передачи данных в режиме CAN FDfd on— включает режим CAN FD
Отключение интерфейса:
sudo ip link set can1 down
Утилиты для работы с CAN
В системе предустановлен пакет can-utils — стандартный набор инструментов для диагностики и работы с CAN.
Отправка сообщений
cansend can1 <ID>##<FLAGS><DATA>
<ID>— идентификатор сообщения (в hex)<FLAGS>— флаг CAN FD-кадра<DATA>— полезная нагрузка
Используется расширенный 29-битный идентификатор, поэтому ID обычно задаётся 8 hex-символами.
Пример:
cansend can1 00000012##1DEADBEEF
Прослушивание шины
Чтобы увидеть все сообщения:
candump can1
Фильтрация по ID:
candump can1,0x12:7ff
Это полезно при отладке, когда необходимо отслеживать конкретные сообщения.
Как правильно тестировать CAN
Работа CAN-шины имеет важную особенность: сообщение считается доставленным только при наличии подтверждения (ACK) от другого устройства.
Отправка и приём на одном интерфейсе:
cansend can1 00000012##1DEADBEEF
candump can1
В этом случае вы можете увидеть сообщение, но это не гарантирует, что оно действительно прошло по шине.
Причина — механизм loopback (эхо), при котором драйвер может отразить отправленный кадр обратно.
Подключите отдельный CAN FD-узел:
- микроконтроллер
- CAN-модуль
- другое устройство
Если сообщения успешно принимаются другим устройством — шина работает корректно.
Не соединяйте can0 и can1 без понимания топологии шины, питания и терминаторов. can0 используется системными узлами ровера, поэтому ошибка подключения может нарушить работу низкоуровневой электроники. Для первичного теста безопаснее использовать внешний CAN FD-узел.
Практические рекомендации
- всегда используйте
can1для пользовательских задач - проверяйте параметры шины перед подключением устройств
- избегайте работы с CAN без второго узла (это даёт ложные результаты)
- при интеграции с ROS 2 используйте отдельные ноды для преобразования CAN ↔ ROS