在樹莓派上編譯安裝ROS2
來自專欄 人工智慧筆記
ROS2正式發布已經有一段時間了,但是並沒有發布樹莓派適用的二進位安裝源.而樹莓派是常用的IOT和機器人的開(yu)發(le)環境,於是我嘗試在樹莓派上編譯安裝了ROS2,其中遇到了各種各樣的坑,在這記錄一下,避免其他人再次踩坑.
硬體:
Raspberry Pi 3
環境:
Raspbian stretch
(這是一個潛在的坑,務必使用最新的系統鏡像,否則由於cmake和一些依賴版本過舊會導致報錯.)
正式開始
讓我們先看看官方WIKI怎麼說,相信官方的wiki一定是很靠(keng)譜(die)的.
https://github.com/ros2/ros2/wiki/Linux-Development-Setupros2/ros2
ros2/ros2首先,準備一個全新安裝的stretch,做一些初始化設置
主要是把locale 設為en_US.UTF-8
樹莓派是通過raspi-config來設置.
修改鏡像源 ~/.config/pip/pip.conf
如果是修改全局源則是/etc/pip.conf
[global]index-url = http://mirrors.aliyun.com/pypi/simple/[install]trusted-host=mirrors.aliyun.com
安裝依賴(此處有修改,wiki中是針對x86,有些包會找不到)
sudo apt-get updatesudo apt-get install git wgetsudo apt-get install build-essential cppcheck cmake libopencv-dev python-empy python3-dev python3-empy python3-nose python3-pyparsing python3-setuptools python3-yaml libtinyxml-dev libeigen3-dev# dependencies for testingsudo apt-get install clang-format pydocstyle pyflakes python3-coverage python3-mock python3-pep8 uncrustify# Install argcomplete for command-line tab completion from the ROS2 tools.# Install from pip rather than from apt-get because of a bug in the Ubuntu 16.04 version of argcomplete:sudo pip3 install argcomplete# additional testing dependencies from pip (because not available on ubuntu 16.04)sudo pip3 install flake8 flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-docstrings flake8-import-order flake8-quotes pytest pytest-cov pytest-runner# dependencies for FastRTPSsudo apt-get install libasio-dev libtinyxml2-dev# dependencies for RVizsudo apt-get install libcurl4-openssl-dev libqt5core5a libqt5gui5 libqt5opengl5 libqt5widgets5 libxaw7-dev libgles2-mesa-dev libglu1-mesa-dev qtbase5-dev
然後,我們把代碼pull下來
mkdir -p ~/ros2_ws/srccd ~/ros2_wswget https://raw.githubusercontent.com/ros2/ros2/release-latest/ros2.reposvcs-import src < ros2.repos
嗯,看起來很簡單嘛,相信你已經遇到了第一個坑,vcs命令找不到?
爬坑:
sudo pip install vcstool
什麼?pip也找不到?
wget https://bootstrap.pypa.io/get-pip.pysudo python3 get-pip.py
什麼?git也找不到?
sudo apt install git
什麼?居然沒有報錯?好了,泡個茶,靜靜地等待代碼下載到本地.
等待的時候,讓我們看看wiki下一步要幹什麼:(由於我用不到ros1所以這裡選擇不安裝ros1 bridge)
cd ~/ros2_ws/src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install --skip-packages ros1_bridge
如果你直接運行上面的build工具,會有一連串的報錯,不停地報錯,讓你抓狂的報錯,因為缺少相關依賴.
爬坑:(下面有多少個包,就是我爬了多少次坑,一把辛酸淚...)
sudo pip3 install pyparsing empysudo apt install cmake libasio-dev libtinyxml2-dev libpcre3-dev libeigen3-dev
然而,當你以為一切都ok的時候,你苦等了幾個小時,pi3卡死了...
爬坑:提高swap
修改
/etc/dphys-swapfile
樹莓派默認100 mb 修改為1000.
CONF_SWAPSIZE=1000
保存然後重啟.
然後睡前重新運行build命令.第二天早上起來,你就會發現ros2安裝好了.
注意:
如果你安裝的是無桌面的lite系統,你還可以跳過rviz相關的包,用下面的命令build
src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install --skip-packages ros1_bridge rviz2 rviz_assimp_vendor rviz_common rviz_default_plugins rviz_ogre_vendor rviz_rendering rviz_rendering_tests rviz_yaml_cpp_vendor
測試是否安裝成功:
在一個終端中運行
. ~/ros2_ws/install/local_setup.bashros2 run demo_nodes_cpp talker
在另一個終端中運行
. ~/ros2_ws/install/local_setup.bashros2 run demo_nodes_py listener
為了方便使用可以在.bashrc中添加
source /opt/ros/ardent/setup.bash
如果你想使用argcomplete包
你可以
source /opt/ros/ardent/share/ros2cli/environment/ros2-argcomplete.bash
另外建議不要遠程ssh安裝,避免鏈接意外斷開,如果一定要遠程,建議使用tmux,具體使用方法可以谷歌搜索.
推薦閱讀:
TAG:樹莓派RaspberryPi | 機器人操作平台ROS |