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

view source
print ?
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

source /opt/ros/indigo/setup.bash

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

$ roscore

你可能感兴趣的:(Ros)