Раз уж читатель наткнулся на эту статью, рассказывать что такое Armbian и ROS не буду. Сразу к делу. Будем ставить ROS2 на одноплатный компьютер BananaPi M5 под управлением этого самого Armbian.
BananaPi разных версий можно купить у нас в RobotClass:
Итак, начальные условия такие:
- Banana Pi M5;
- SD-карта размером 16 Гб;
- Armbian Jammy.
К моменту публикации этой статьи уже был Armbian Bullseye, но собрать на нём ROS2 не вышло — colcon просто ничего не делал и ошибок в лог не кидал.
Подготовка и сборка ROS2
Устанавливаем набор пакетов с помощью apm. Работаем под учётной записью обычного пользователя:
sudo apt update && sudo apt install -y \ build-essential wget git cmake \ python3-pip python3-rosinstall-generator \ python3-colcon-common-extensions \ python3-flake8* python3-pytest python3-pytest-cov python3-pytest-repeat python3-pytest-rerunfailures \ python3-setuptools libcunit1-dev
Затем с помощью pip ставим ещё несколько пакетов:
sudo pip3 install -U rosdep sudo pip3 install -U vcstool sudo pip3 install -U catkin_pkg sudo pip3 install -U rosdistro sudo pip3 install -U colcon-common-extensions
Далее создаём папку ros2 вместе с подпапкой src в домашней папке пользователя. И переходим в ros2:
mkdir -p ~/ros2/src cd ~/ros2
Загружаем список репозиториев, из которых будет собираться ROS:
rosinstall_generator ros_base --deps --rosdistro humble > ros2.repos
Теперь клонируем эти репозитории в папку src. Процесс будет длиться минут пять, а в это время в консоли будут рисоваться точки — индикатор прогресса.
vcs import src < ros2.repos
Инициализируем и обновляем утилиту rosdep:
sudo rosdep init rosdep update
Теперь сборка зависимостей.
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers python3-catkin-pkg-modules python3-rosdistro-modules" --rosdistro humble
Особое внимание на директиву skip-keys. Суть в том, что некоторые пакеты, хоть убей, не хотят собираться в команде. Если так происходит, и в ходе сборки вываливается ошибка вида:
ament_pep8: No definition of [python3-pep8] for OS version []
то следует этот пакет указать в skip-keys, а затем установить его вручную. При написании данной статьи мне пришлось так поступить с: python3-catkin-pkg-modules и python3-rosdistro-modules. Как видите, я их рекомендовал установить с помощью PIP в самом начале нашего путешествия.
Теперь самое долгое — сборка. Займёт около часа.
colcon build --symlink-install
Готово! ROS2 собран. Теперь мы проверим его работоспособность с помощью двух базовых узлов: talker и listener. Но для начала, их тоже нужно будет собрать.
Сборка примеров
Создаём папку для примеров, с подпапкой src. И переходим в src:
mdkir -p ~/ros2_ex/src cd ~/ ros2_ex/src
Теперь клонируем репозиторий с примерами:
git clone -b humble https://github.com/ros2/demos
Параметр -b humble указывает на то, что нужно скачать примеры именно из ветки humble. Если этого не сделать (как в официальной инструкции), то код примеров может и не собраться.
Возвращаемся в папку ros2_ex и собираем код пакета demo_nodes_cpp:
cd ~/ros2_ex colcon build --packages-up-to demo_nodes_cpp
Готово. Теперь запустим два узла: talker и listener — это Hello World в мире ROS.
Запуск talker и listener
Каждый раз, когда вы открываете новый терминал, необходимо подключать окружение специальным скриптом:
source ~/ros2_ex/install/local_setup.bash
Далее, запустим два узла в разных терминалах. Открываем первый терминал и запускаем talker. Этот узел отправляет в шину ROS текстовые сообщения формата: Hello World: индекс_счетчика.
source ~/ros2_ex/install/local_setup.bash
ros2 run demo_nodes_cpp talker

Затем открываем второй терминал, в котором также подгружаем окружение. Запускаем узел listener. Этот узел подписан на сообщения, которые отправляет его друг talker. Узел транслирует получаемые сообщения в консоль.
source ~/ros2_ex/install/local_setup.bash
ros2 run demo_nodes_cpp listener
Получим такой вывод:

Вот и всё. ROS2 установлен и теперь одноплатный компьютер может стать сердцем очередного робота!
Полезные ссылки
Официальная инструкция по установке ROS2 Humble на Ubuntu:
https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
Armbian для BananaPi M5:
Спасибо за статью. Собрал ROS2 Humble на Orange Pi Lite 1Gb по этому гайду. Из проблем основными были две:
1) Как выяснилось при сборке 1 Гб оперативной памяти и 512 Мб swap недостаточно, colcon встает при попытке собрать rclcpp ( и на сборку демо, кстати, тоже не хватает памяти). Решилось расширением swap, действовал по этой статье https://diytimes.ru/post/147 .
2) Для сборки демо не хватало пакета «example_interfaces». Скачал и собрал его с githab`а в соответствии с https://answers.ros.org/question/331633/ros2-colcon-build-fails-on-demo-pkg-docker/
нужно добавить эту папку example_interfaces https://github.com/ros2/example_interfaces в директорию ros2_ex/src/demos