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

Настройка 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

Шаг 1

Сохраните (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, как показано ниже

Шаг 3 В данном разделе было описано, как установить can-utils для взаимодействия с CAN и CAN-FD на Raspberry Pi, а также как добавить включение этого интерфейса в автозапуск. Далее разберем примеры получения и отправки сообщений по CAN-FD на низком уровне с помощью Arduino.