[Практика 2] Установка ROS на Raspberry Pi Zero W
Фев 11, 2020 в 02:53  •  31 мин  •  читали 1726 раз

В прошлой статье, посвященной практике мы рассмотрели вопрос первичной настройки Raspberry Pi Zero W. В конце я пообещал, что следующая статья данного цикла будет об установке ROS. Обещал - делаю.

 

На самом деле в этом нет ничего сложного. Все делается по мануалу и с первого раза. Однако, я немного упрощу тебе жизнь, мой читатель. В официальном мануале есть некое ветвление, которое зависит от версии Raspbian. Мы поставили Buster Lite, с ней и продолжим работу. Единственное, что я хотел бы отметить - это то, что я обновил систему до версии February 2020.

 

Мы будем ставить kinetic


Соединяемся по SSH (используем PuTTY) и поехали (мы рассматривали это в прошлой статье):


Подсказка: в PuTTY текст вставляется райткликом

 

Для начала надо добавить репозиторий для установки и обновлений:

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

 

Дальше установка цифровой подписи:

$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

 

 

Теперь обновимся:

$ sudo apt-get update
$ sudo apt-get upgrade

 

Выдача этих команд достаточно массивная, поэтому приводить ее я не буду.

 

Потом нужно установить зависимости:

$ sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

 

И проинициализировать rosdep

$ sudo rosdep init
$ rosdep update

 

 

Затем создадим рабочую директорию catkin

$ mkdir -p ~/ros_catkin_ws
$ cd ~/ros_catkin_ws

 

Далее мы получаем основные пакеты, чтобы их собрать. Мы будем использовать wstool.

Для моей малины я выбрал ROS-Comm (версия без gui инструментов)

 

$ rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
$ wstool init src kinetic-ros_comm-wet.rosinstall

 

Первая команда работает достаточно долго, чтобы начать паниковать. При этом без какого-либо вывода. Не

бойтесь, так должно быть.


Можно возобновить загрузку, если wstool init прервана или завершилась неудачно командой:

$ wstool update -j4 -t src

 

Далее речь пойдет о разрешении зависимостей.

Официальный мануал гласит, что не все зависимости разрешимы с помощью rosdep, поэтому мы должны сделать это сами:

 

Создадим директорию и перейдем в нее:

$ mkdir -p ~/ros_catkin_ws/external_src
$ cd ~/ros_catkin_ws/external_src

 

Загрузим `assimp-3.1.1_no_test_models.zip`:

$ wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip

 

 

Распакуем:

$ unzip assimp-3.1.1_no_test_models.zip

 

Собираем:

$ cd assimp-3.1.1
$ cmake .
$ make

 

make работал неприлично долго и выдал много предупреждений (warning и note). Я так понял это нормально. Нет, серьезно, оно собирается около часа. Позаботьтесь о том, чтобы компьютер не перестал работать и wifi не отключился, тогда можно спокойно идти по своим делам.

 

Если будут какие-то проблемы, можно попробовать генератор:

$ rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --exclude collada_parser collada_urdf --tar > kinetic-ros_comm-wet.rosinstall

 

Ура!

 

Когда процесс сборки закончится, можно все это дело установить:

$ sudo make install

Это длится около секунды)

 

Теперь нам нужно разрешить зависимости с помощью rosdep

$ cd ~/ros_catkin_ws
$ rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:buster

Тоже достаточно долгий процесс, но не такой как сборка два шага назад.

 

Теперь нам нужно собрать рабочее пространство catkin

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic

 

Во время этого может произойти ошибка 'Internal Compiler Error'

http://raspberrypimaker.com/adding-swap-to-the-raspberrypi/ - фикс

 

Если не помогло, пробуем это:

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2

 

Всего получается 52 пакета. Тоже долгий процесс (~2 часа), ждем все 52.

 

Возникла такая ошибка:

Прогресс сохранился, ничего не придется делать прям заново.

 

Проблема связана с библиотекой boost, проблема появилась в версии 1.65 (у нас 1.67).

 

Решение: вместо rospack в src/ клоним себе https://github.com/jveitchmichaelis/rospack.git

(рекомендую сохранить куда-нибудь заменяемый rospack, хотя мне он пока не пригодился)

$ mkdir ~/temp
$ mv rospack ~/temp/rospack
$ git clone https://github.com/jveitchmichaelis/rospack.git

 

Потом:

$ sudo apt-get install libtinyxml2-dev

 

И заново:

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic

У меня проблема решилась.


ОУ ЕЕЕЕ

 

Прокидываем переменные:

$ source /opt/ros/kinetic/setup.bash


Сохраняем, чтобы не делать это каждый раз:

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc


Тестим:

И да, оно работает!


 

Весь процесс у меня занял около 7 часов.

 

Официальный мануал

 

Спасибо за внимание!


ps. Если у Вас возникли какие-либо трудности, напишите комментарий с существующей почтой и опишите проблему. Возможно, я смогу Вам помочь.


Копирование материалов допускается только с разрешения автора (vladivanov.dev@gmail.com) в письменной форме.
(Copying of materials is allowed only with the written permission of the author)
Похожие статьи