樹莓派3-Jessie編譯安裝ROS-indigo完整版 發布時間:2016年10月20日 09:31:21 瀏覽數:4388次 來自:Ray 大家在學習ROS中有時候直接使用筆記本或者工控機(小主機),比較麻煩、價格也比較貴,然後很多人就把主意打到小型的嵌入式電腦中如TK1、樹莓派、香蕉派等,然而這些裝置安裝ROS時或多或少有些問題,例如教程只有 ...
大家在學習ROS中有時候直接使用筆記本或者工控機(小主機),比較麻煩、價格也比較貴,然後很多人就把主意打到小型的嵌入式電腦中如TK1、樹莓派、香蕉派等,然而這些裝置安裝ROS時或多或少有些問題,例如教程只有安裝ros-comm版本的,很多功能使用受限,很多小夥伴想把ROS-Desktop移植到這些裝置上,但是坑比較多,然後一直過程一波三折,很少有走下去的,我在前期也走過這些坑,當時看了很多的教程,比如最有名的就是博主東方赤龍的樹莓派2編譯完整版的ROS-indigo,後來樹莓派3發行,在樹莓派2的基礎上增加了板載藍芽、無線,並且相應的效能也提升了,這時候我也有點心痒痒,於是繼續入坑準備用樹莓派3編譯完整版indigo(其他版本類似,不過建議還是用indigo的),因為樹莓派3的系統是jessie(樹莓派2是wheezy,wheezy和jessie的區別大家百度一下就知道了),所以有些小細節要改,遂做如下記錄:
作者發人肺腑的告誡:
不要試圖在樹莓派raspbian系統上編譯完整的ros了,毫無意義,簡直在浪費生命,浪費人生,買個二手筆記本也就幾百塊。
本文作者為ROSClub---Ray
轉載請註明作者及其來源
補充:collada_parser編譯錯誤的問題找到了
urdfdom_headers庫剛剛更新,替換了std::shared_ptr所以導致collada_parser編譯錯誤
網友:==(401565005)爆料。
===================可能要安裝的東西==========================
Installation
The rosinstall_generator can be installed via a Debian package from the ROS repositories:
sudo apt-get updatesudo apt-get install python-rosinstall-generator
For other platforms (where the Debian package is not available) it can be installed from PyPI using pip:
sudo pip install rosinstall-generator
=======================================================
1、安裝前準備
樹莓派3,TF卡16G,Raspbian OS(JESSIE),ROS Indigo,Win32DiskImager
1.1 Raspbian OS
在樹莓派官網下載磁碟鏡像,最新鏡像為RASPBIAN JESSIE,
[點此下載](https://www.raspberrypi.org/downloads/raspbian/)
注意:選擇RASPBIAN JESSIE,我下載的時候是2016-05-27的
1.2 燒寫Raspbian jessie鏡像
使用Win32DiskImager將下載好的樹莓派鏡像(.img檔案)燒寫進準備好的TF卡中
注意:在Win32DiskImager中不要選錯盤符
2、準備ROS Indigo原始碼及依賴庫
2.0 更改swap file
swap大小改成2GB(根據你的記憶卡定,我的16g所以此處設定是2g),小了經常編譯時間經常內部錯誤(安裝ROS也一樣,不過安裝ROS時設定1GB就夠了)。
sudo vim /etc/dphys-swapfile
然後找到並修改
CON_SWAPSIZE=2048
儲存退出,重啟一下電腦。
2.1 準備工作
先添加代碼源,然後更新系統,再添加ROS程式碼程式庫的key。
以下操作全在Xshell下操作
pi@raspberrypi:~ $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu jessie main" > /etc/apt/sources.list.d/ros-latest.list'pi@raspberrypi:~ $ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
更新系統(***********一定要更新,不更新絕對出錯)
pi@raspberrypi:~ $ sudo apt-get updatepi@raspberrypi:~ $ sudo apt-get upgrade
2.2 安裝必要軟體包
pi@raspberrypi:~ $ sudo apt-get install python-pip python-setuptools python-yaml python-distribute python-docutils python-dateutil python-sixpi@raspberrypi:~ $ sudo pip install rosdep rosinstall_generator wstool rosinstall
2.3 初始化rosdep
pi@raspberrypi:~ $ sudo rosdep initpi@raspberrypi:~ $ rosdep update
3、編譯ROS源碼
3.1 編譯前準備
3.1.1 建立一個workspace,用來下載和編譯ROS完整源碼
pi@raspberrypi:~ $ mkdir ~/ros_catkin_wspi@raspberrypi:~ $ cd ~/ros_catkin_ws
3.1.2 下載源碼
ROS官方提供了兩種源碼包,
一種是ROS-Comm(官方推薦),裡面僅包含了基本必備內容,沒有GUI等工具;
一種是Desktop,裡面除了ROS-Comm包含的基本必備內容外,還包含了rqt,rviz和robot-generic等工具。
這裡我們選擇Desktop版,如果只想安裝ROS-Comm版,只需要將下面的命令中desktop替換為ros_comm即可。
pi@raspberrypi:~ $ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstallpi@raspberrypi:~ $ wstool init -j8 src indigo-desktop-wet.rosinstall
這樣所有ROS代碼會被下載到~/ros_catkin_ws/src目錄中,-j8參數意思是開啟8個線程一起下載。
如果下載異常中斷,可以嘗試使用以下命令恢複下載:
pi@raspberrypi:~ $ wstool update -j4 -t src
3.2 解決ROS依賴問題
在正式編譯ROS之前,我們還需要手動安裝以下幾個依賴包:
libconsole-bridge-dev, liburdfdom-headers-dev, liburdfdom-dev, liblz4-dev, and collada-dom-dev。
ROS_Comm所需依賴包:libconsole-bridge-dev and liblz4-dev
Desktop所需依賴包:libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev
3.2.1 為這些依賴包建立單獨的用於編譯安裝的檔案夾,同時安裝checkinstall和cmake:
pi@raspberrypi:~ $ mkdir ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install checkinstall cmake
3.2.2 安裝libconsole-bridge-dev
pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install libboost-system-dev libboost-thread-devpi@raspberrypi:~ $ git clone https://github.com/ros/console_bridge.gitpi@raspberrypi:~ $ cd console_bridgepi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install
***在最後一步checkinstall的時候,會詢問多個問題,在有一個問題提供多個選項的時候,選擇2修改包名稱為libconsole-bridge-dev,然後在之後的兩個問題都選擇N,否則最後編譯時間會出錯。
3.2.3 安裝liburdfdom-headers-dev
pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ git clone https://github.com/ros/urdfdom_headers.gitpi@raspberrypi:~ $ cd urdfdom_headerspi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install
***在最後一步checkinstall的時候,會詢問多個問題,在有一個問題提供多個選項的時候,選擇2修改包名稱為liburdfdom-headers-dev,然後在之後的兩個問題都選擇N,否則最後編譯時間會出錯。
3.2.4 安裝liburdfdom-dev
pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install libboost-test-dev libtinyxml-devpi@raspberrypi:~ $ git clone https://github.com/ros/urdfdom.gitpi@raspberrypi:~ $ cd urdfdompi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install
***在最後一步checkinstall的時候,會詢問多個問題,在有一個問題提供多個選項的時候,選擇2修改包名稱為liburdfdom-dev,然後在之後的兩個問題都選擇N,否則最後編譯時間會出錯。
3.2.5 安裝collada-dom-dev
pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install libboost-filesystem-dev libxml2-devpi@raspberrypi:~ $ wget http://downloads.sourceforge.net/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgzpi@raspberrypi:~ $ tar -xzf collada-dom-2.4.0.tgzpi@raspberrypi:~ $ cd collada-dom-2.4.0pi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install
這裡的collada-dom-2.4.0.tgz大概幾十兆,建議本地下載後傳到樹莓派中(可以使用rzsz命令,自行搜尋使用方法)
***在最後一步checkinstall的時候,會詢問多個問題,在有一個問題提供多個選項的時候,選擇2修改包名稱為collada-dom-dev,然後在之後的兩個問題都選擇N,否則最後編譯時間會出錯。
3.2.6 安裝liblz4-dev
pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_src pi@raspberrypi:~ $ wget http://archive.raspbian.org/raspbian/pool/main/l/lz4/liblz4-1_0.0~r122-2_armhf.deb pi@raspberrypi:~ $ wget http://archive.raspbian.org/raspbian/pool/main/l/lz4/liblz4-dev_0.0~r122-2_armhf.deb pi@raspberrypi:~ $ sudo dpkg -i liblz4-1_0.0~r122-2_armhf.deb liblz4-dev_0.0~r122-2_armhf.deb
3.3 使用rosdep解決剩餘依賴
pi@raspberrypi:~ $ cd ~/ros_catkin_ws pi@raspberrypi:~ $ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie
上面命令會遍曆所有的package並遞迴安裝依賴
***3.5 修改部分代碼(編譯某些包錯誤可能需要修改以下檔案)
在/home/pi/ros_catkin_ws/src/rviz/src/rviz目錄中找到mesh_loader.cpp檔案,找到以下代碼地區:
#if defined(ASSIMP_UNIFIED_HEADER_NAMES)#include #include #include #include #include #else#include #include #include #include #include #endif
在這段代碼之後,增加以下程式碼片段,儲存退出。
#ifdef __arm__#include bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const{return !::strcasecmp(p1, p2);}#endif
===============note !!! collada_to_urdf.cpp and collada_urdf.cpp file path============
在/home/pi/ros_catkin_ws/src/robot_model/collada_urdf/src目錄中找到collada_to_urdf.cpp和collada_urdf.cpp檔案,也同樣添加以上程式碼片段後儲存退出。
這樣在之後的編譯過程中就不會再有報錯資訊。
3.6 編譯安裝ROS
pi@raspberrypi:~ $ cd ~/ros_catkin_wspi@raspberrypi:~ $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2pi@raspberrypi:~ $ source /opt/ros/indigo/setup.bash
編譯命令最後的-j2參數是開啟兩個線程編譯,預設不帶參數是使用四線程,但是對於樹莓派的cpu和記憶體來說,容易因耗盡資源而死機中斷。
至此,在樹莓派3上編譯安裝ROS就完成了。
作者水平有限,如有錯誤請及時指出。
大家可以用樹莓派配置主從機操作:ROS中多機通訊最簡單的配置方法-樹莓派 to PC
參考連結:
http://blog.csdn.net/u013494117/article/details/51751939
http://blog.csdn.net/crazyquhezheng/article/details/43413231
https://www.raspberrypi.org/downloads/raspbian/
http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Indigo%20on%20Raspberry%20Pi
http://blog.csdn.net/zister/article/details/51882019