В прошлой статье, посвященной практике мы рассмотрели вопрос первичной настройки 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. Если у Вас возникли какие-либо трудности, напишите комментарий с существующей почтой и опишите проблему. Возможно, я смогу Вам помочь.