Настройка Raspberry Pi
Образ на Raspberry PI
Для работы с модулями VBCores на верхнем уровне мы собрали образ для Raspberry Pi5, который включает в себя:
- Образ операционной системы, построенный на основе ОС Ubuntu 24.04.1 LTS (Noble Numbat)
- Установлен ROS2 Jazzy Jalisco
- Имя пользователя:
pi - Сетевое имя образа:
ros2vbcores - Пароль по умолчанию:
brobro - Автоматическое подключение к Wi-Fi сетям:
SSID: TurtleBro/TurtleBro5G
psw: turtlew001
Чтобы подключиться к Raspberry Pi по ssh:
ssh pi@ros2vbcores.local
Установлены следующие утилиты:
- can-utils
- Yakut
- boost
- ros2-bridge
- net-tools
- wavemon
Установлены следующие ROS пакеты:
- ros-jazzy-tf-transformations
- ros-jazzy-usb-cam
- ros-jazzy-rosbridge-server
Настройка CAN на RPI
Если вы работаете на своем образе для Raspberry Pi, то для работы с CAN необходимо установить can-utils — набор полезных и удобных инструментов отладки, использующих интерфейс SocketCAN. Для установки их на Raspberry используйте следующую команду:
sudo apt-get install can-utils
can-utils содержат следующие полезные инструменты:
- candump - позволяет отображать, фильтровать и записывать CAN пакеты
- canplayer - воспроизводит записанные CAN пакеты
- cansend - отправляет один CAN пакет
- cangen - генерирует случайные пакеты
- canbusload - отображение текущей нагрузки на шину CAN
В данной инструкции будут рассмотрены утилиты candump и cansend, потому что ими мы и будем чаще всего пользоваться. С остальными утилитами мы предлагаем читателю ознакомиться самостоятельно на странице GitHub.
Чтобы запустить интерфейс для работы с CAN на Raspberry Pi, введите команду
sudo ip link set can0 up txqueuelen 65535 type can bitrate 1000000
Если у вас вышла ошибка "Cannot find device "can0"", сделайте следующее:
sudo nano /boot/firmware/config.txt
В конец открывшегося файла добавьте строчку
dtoverlay=seeed-can-fd-hat-v2
Сохраните (Ctrl+S) и закройте (Ctrl+X) файл. Перезагрузите Raspberry Pi:
sudo reboot
Сообщения, получаемые и отправляемые через CAN, — это некоторое количество байтов. Чтобы посмотреть, что в CAN посылаются пакеты, мы используем утилиту candump:
candump can0
Введя эту команду, мы увидим абсолютно все пакеты, передаваемые по CAN. Если нам нужно посмотреть сообщения, имеющие определенный ID, например 100, мы переводим ID в шестнадцатеричную систему счисления (в нашем примере 100=0x64) и выполняем команду candump can0,ID:7ff. Для ID 100 она выглядит следующим образом:
candump can0,064:7ff
Используем утилиту cansend для отправки сообщения (4 байта DE AD BE EF) в CAN, ID сообщения 100 (0x64):
cansend can0 00000064#DEADBEEF
Команда отключения интерфейса:
sudo ifconfig can0 down
CAN-FD
Шина CAN-FD – это следующий этап развития классической шины CAN. CAN-FD обеспечивает более высокую скорость передачи данных и больший объем передаваемых данных в одном кадре. Если вы проделали все шаги по установке can-utils, описанные выше, ничего дополнительно устанавливать не придется. Отличаться будет только команда запуска интерфейса:
sudo ip link set can0 up txqueuelen 65535 type can bitrate 1000000 dbitrate 8000000 fd on
Далее мы будем использовать CAN-FD, с точки зрения использования утилит, ничего не поменяется. Прочитать подробнее о различиях CAN и CAN-FD можно здесь.
Чтобы не включать интерфейс для общения с CAN-FD каждый раз, удобно настроить автозапуск can-utils. Для этого создайте небольшой скрипт canup.sh в домашней директории и пропишите в нем команду запуска CAN-FD.
sudo nano /usr/local/bin/canup.sh
В файл вставьте:
#!/bin/sh
sudo ip link set can0 up txqueuelen 65535 type can bitrate 1000000 dbitrate 8000000 fd on
Сохраните (Ctrl+S) и закройте (Ctrl+X) файл. Далее сделайте его исполняемым:
sudo chmod +x /usr/local/bin/canup.sh
Добавим созданный скрипт в автозапуск.
cd /etc/systemd/system
sudo nano canstart.service
В файл вставьте:
[Unit]
Description=Autostart Can
After=network.target
[Service]
Type=oneshot
User=root
Group=root
ExecStart=/usr/local/bin/canup.sh
Restart=on-failure
StandardOutput=append:/var/log/can_service.log
StandardError=append:/var/log/can_service.err
[Install]
WantedBy=multi-user.target
Сохраните и закройте. После в терминале выполните команды:
sudo systemctl daemon-reload
sudo systemctl enable canstart.service
sudo systemctl start canstart.service
Все, теперь каждый раз при включении вашего компьютера интерфейс can будет запускаться автоматически. Полезно знать команду
ip -details link show can0
Эта команда позволяет получить информацию об интерфейсе can0. Отметим, что если при получении и отправке сообщений не возникает никаких ошибок, то в записи об ошибках вы увидите 0, как показано ниже
В данном разделе было описано, как установить can-utils для взаимодействия с CAN и CAN-FD на Raspberry Pi, а также как добавить включение этого интерфейса в автозапуск. Далее разберем примеры получения и отправки сообщений по CAN-FD на низком уровне с помощью Arduino.