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
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 |
pi@raspberrypi:~ $ sudo rosdep init |
2 |
pi@raspberrypi:~ $ rosdep update |
5. 创建一个workspace,用来下载和编译ROS完整源码
1 |
pi@raspberrypi:~ $ mkdir ~/ros_catkin_ws |
2 |
pi@raspberrypi:~ $ cd ~/ros_catkin_ws |
6. 下载源码
耗费较长时间
1 |
pi@raspberrypi:~ $ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstall |
2 |
pi@raspberrypi:~ $ wstool init -j8 src indigo-desktop-wet.rosinstall |
使用以下命令恢复下载:
1 |
pi@raspberrypi:~ $ 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 |
pi@raspberrypi:~ $ cd ~/ros_catkin_ws |
2 |
pi@raspberrypi:~ $ 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
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
bool Assimp::IOSystem::ComparePaths(const char *p1, const char *p2) const
{
return !::strcasecmp(p1,p2);
}
#endif
1 |
pi@raspberrypi:~ $ cd ~/ros_catkin_ws |
2 |
pi@raspberrypi:~ $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2 |
3 |
pi@raspberrypi:~ $ 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
$ echo "source/opt/ros/indigo/setup.bash" >> ~/.bashrc
$ roscore