1. 程式人生 > >樹莓派3安裝ros-indigo

樹莓派3安裝ros-indigo

1.更改swap file

swap大小改成1GB

1 sudo vim /etc/dphys-swapfile
2 CON_SWAPSIZE=1024

2.新增源及更新

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

$ wgethttps://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudoapt-key add -

$ sudo apt-getupdate

$ sudo apt-getupgrade

upgrade耗費較長時間

3.安裝必要軟體包

$ sudo apt-getinstall Python-pip python-setuptools python-yaml python-distributepython-docutils python-dateutil python-six

$ sudo pip installrosdep rosinstall_generator wstool rosinstall

4. 初始化rosdep

1
[email protected]:~ $ sudo rosdep init
2 [email protected]:~ $ rosdep update

5. 建立一個workspace,用來下載和編譯ROS完整原始碼

1 [email protected]:~ $ mkdir ~/ros_catkin_ws
2 [email protected]:~ $ cd ~/ros_catkin_ws

6. 下載原始碼

耗費較長時間

1 [email protected]:~ $ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstall
2 [email protected]:~ $ wstool init -j8 src indigo-desktop-wet.rosinstall

使用以下命令恢復下載:

1 [email protected]:~ $ wstool update -j4 -t src

7. 解決ROS依賴問題

建立一個新目錄來存放這5個依賴包

$ mkdir~/ros_catkin_ws/external_src

$ sudo apt-getinstall checkinstall cmake

$ sudo sh -c 'echo"deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contribnon-free rpi" >> /etc/apt/sources.list'

$ sudo apt-getupdate

libconsole-bridge-dev:

$ cd~/ros_catkin_ws/external_src

$ sudo apt-getbuild-dep console-bridge

$ apt-get source -bconsole-bridge

$ sudo dpkg -ilibconsole-bridge0.2*.deb libconsole-bridge-dev_*.deb

liblz4-dev

$ cd~/ros_catkin_ws/external_src

$ apt-get source -blz4

$ sudo dpkg -iliblz4-*.deb

liburdfdom-headers-dev:

$ cd~/ros_catkin_ws/external_src

Git clonehttps://github.com/ros/urdfdom_headers.git

$ cdurdfdom_headers

$ git reset --hard9aed725

$ cmake .

$ sudo checkinstallmake install

前面分析了編譯過程可能出現"collada_parser"報錯的原因,這裡的'9aed725'就是將"liburdfdom-headers-dev"的安裝版本變成我們需要的1.0.0版本。

check-install開始會讓你輸入包的描述,可以直接按回車跳過。當checkinstall詢問是否改變安裝選項時,選擇[2],將名字從"urdfdom-headers" 改為 "liburdfdom-headers-dev",其餘有[y]或[n]的問題都輸入'n'按回車, 否則會編譯出錯

注:因為rosdep不認這幾個package預設安裝的名字,所以需要我們在安裝的時候修改package名

安裝完成後我們可以用下面的命令來檢視已安裝的包

$ dpkg -l

執行上面命令在列表中沒有看到我們安裝的"liburdfdom-headers-dev"包,或者package名沒有修改成功,執行下面命令重新安裝(為確保這裡的每個依賴包都正確安裝,建議每安裝一個包之後都用這個方法檢查一遍)

$ sudo checkinstallmake install

安裝"liburdfdom-headers-dev"後我們還要下載新增一個檔案(utils.h)到/usr/local/include/urdf_model目錄下,否則編譯會報錯

$ cd/usr/local/include/urdf_model

$ sudo wgethttps://raw.githubusercontent.com/ros/urdfdom_headers/master/urdf_model/include/urdf_model/utils.h

liburdfdom-dev

$ cd~/ros_catkin_ws/external_src

$ sudo apt-getinstall libboost-test-dev libtinyxml-dev

$ git clonehttps://github.com/ros/urdfdom.git

$ cd urdfdom

$ cmake .

$ sudo checkinstallmake install

check-install開始會讓你輸入包的描述,可以直接按回車跳過。當checkinstall詢問是否改變安裝選項時,選擇[2],將名字從 "urdfdom"改為"liburdfdom-dev其餘有[y]或[n]的問題都輸入'n'按回車, 否則會編譯出錯

collada-dom-dev:

$ cd~/ros_catkin_ws/external_src

$ sudo apt-getinstall libboost-filesystem-dev libxml2-dev

$ wgethttp://downloads.sourceforge.NET/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgz

$ tar -xzfcollada-dom-2.4.0.tgz

$ cdcollada-dom-2.4.0

$ cmake .

$ sudo checkinstallmake install

check-install開始會讓你輸入包的描述,可以直接按回車跳過。當checkinstall詢問是否改變安裝選項時,選擇[2],將名字從 "collada-dom"改為 "collada-dom-dev其餘有[y]或[n]的問題都輸入'n'按回車, 否則會編譯出錯


 使用rosdep解決剩餘依賴

1 [email protected]:~ $ cd ~/ros_catkin_ws 
2 [email protected]:~ $ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie

上面命令會遍歷所有的package並遞迴安裝依賴

8. 編譯安裝ROS

在開始編譯之前,先打兩個補丁。

$ nano~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_urdf.cpp

修改 ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_urdf.cpp檔案,在最後一個#include(如果#include的下一行是#endif則放到#endif後)行後加入以下程式碼:

#ifdef __arm__ 
#include <strings.h>
bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const 
{  
return !::strcasecmp(p1,p2);  
}

#endif

$ nano~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp

修改~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp檔案,在最後一個#include(如果#include的下一行是#endif則放到#endif後)行後加入以下程式碼:

#ifdef __arm__ 
#include <strings.h>
bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const 
{  
return !::strcasecmp(p1,p2);  
}  
#endif

1 [email protected]:~ $ cd ~/ros_catkin_ws
2 [email protected]:~ $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2
3 [email protected]:~ $ source /opt/ros/indigo/setup.bash

執行上面命令預設使用4個核心來編譯,會使得CPU的使用率長時間為100%,容易宕機,所以我們可以加上-j2引數設定樹莓派使用2個核心編譯。

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

source /opt/ros/indigo/setup.bash

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

$ roscore