Перейти к основному содержимому

Работа с 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.

Состояние интерфейса CAN в терминале
Пример вывода состояния пользовательского CAN-интерфейса 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 FD
  • fd 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