樹莓派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