您的位置:首页 > 运维架构

树莓派3代Raspbian Jessie安装ROS-Indigo-Desktop

2016-11-03 21:00 686 查看
手上有块树莓派3,最近实验室要求在树莓派上安装ROS-indigo-desktop版,参考了几篇教程,趟了无数坑,花费了数个日夜终于有些眉目,记录下来供以后参考。

==============================参考的网址==============================

CSDN博客:http://blog.csdn.net/crazyquhezheng/article/details/43413231

ROSCLub:http://www.rosclub.cn/portal.php?mod=view&aid=182

国外的一个网页(也可能不是):http://jorgbosman.eu/Robot_Operating_System_on_Raspberry_Pi

最重要的,官网:http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Indigo%20on%20Raspberry%20Pi

以及在安装过程中用到的github网站,对我来说起到了决定性作用:https://github.com/ros

==============================安装过程==============================

CSDN博主东方赤龙写的很详细了,可以对照着他的博客和官网安装,安装过程中命令稍有不同,对于不同的命令我完全按照官网来的。首先确定树莓派的系统。我的是Raspbian Jessie,安装时要很据系统选择对应的命令行。安装前最好给pi分配足够的swap空间,建议2G。本人时后期出错才分配的,耽误了不少事。本人根据http://www.lxway.com/69189161.htm 仅分配了1G,貌似也够用。

接下来的命令都是官网上的,直接看官网就好了,我会在过程中说出我所遇到的问题。

2准备

2.1准备ROS代码库

Raspbian Jessie:

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu jessie main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -


更新

$ sudo apt-get update
$ sudo apt-get upgrade


2.2安装引导程序依赖项(是这么翻译吧?)

Raspbian Jessie:

$ sudo apt-get install python-pip python-setuptools python-yaml python-distribute python-docutils python-dateutil python-six
$ sudo pip install rosdep rosinstall_
4000
generator wstool rosinstall


2.3初始化rosdep

$ sudo rosdep init
$ rosdep update


3安装

3.1创建catkin工作空间

$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws


下载desktop版本的ros核心包

$ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstall
$ wstool init src indigo-desktop-wet.rosinstall


如果下载过程中任何原因中断,可以继续下载:

$ wstool update -t src


一段时间下载好后会发现 ~/ros_catkin_ws/src 目录里多了很多东西。

3.2解决依赖项

3.2.1没有的包

有五个包在Raspbian是没有的,所以需要我们手动安装一下。官网可以看到,要安装desktop版的ROS需要libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev这五个。

首先在ros_catkin_ws下新建一个目录external_src 用来装这五个不可获得包

$ mkdir ~/ros_catkin_ws/external_src
$ sudo apt-get install checkinstall cmake
$ sudo sh -c 'echo "deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi" >> /etc/apt/sources.list'
$ sudo apt-get update


1)下面按装第一个libconsole-bridge-dev:

$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get build-dep console-bridge
$ apt-get source -b console-bridge
$ sudo dpkg -i libconsole-bridge0.2*.deb libconsole-bridge-dev_*.deb


官网说可能会遇到-std=c++11的相关错误,我没遇到。

2)下面安装第二个liblz4-dev:

$ cd ~/ros_catkin_ws/external_src
$ apt-get source -b lz4
$ sudo dpkg -i liblz4-*.deb


3)下面安装第三个liburdfdom-headers-dev:

$ cd ~/ros_catkin_ws/external_src
$ git clone https://github.com/ros/urdfdom_headers.git  //暂停一下看下面
$ cd urdfdom_headers
$ git reset --hard 9aed725
$ cmake .
$ sudo checkinstall make install


这里我要重点说啊,简直是个大坑!

首先,作者在今年7月份在github上更新了urdfdom_headers,做了什么优化作为小白的我并不了解,就是这一更新导致了后期编译所有包时collada_parser总不能通过,本人在这里浪费了大量时间,最终得到了这个消息并在https://github.com/ros上找到了urdfdom_headers以前的版本0.4.1。在github上下载解压后放到~/ros_catkin_ws/external_src/urdfdom_headers目录里覆盖。

第二,
$ git reset --hard 9aed725
这条命令执行后会发现路径~/pi/ros_catkin_ws/external_src/urdfdom_headers/urdf_model/include/urdf_model 下的 utils.h头文件不见了,后期编译时会报错找不到该文件,所以建议不执行该语句。具体原因本人仍没搞清,毕竟太菜了。

第三,执行
$ sudo checkinstall make install
命令时,会问某个目录不存在是否创建,选y;又提示输入描述,直接enter跳过,接着出现一堆选项,按官网说的输入2把名字改为liburdfdom-headers-dev。后面忘记了是否有问题,有的话全部n。

4)下面安装第四个liburdfdom-dev:

$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get install libboost-test-dev libtinyxml-dev
$ git clone https://github.com/ros/urdfdom.git  //暂停一下看下面
$ cd urdfdom
$ cmake .
$ sudo checkinstall make install


同样urdfdom_headers用了老版本,urdfdom也要用老版本,本人在https://github.com/ros上下载了0.3版本,解压拷贝到~/ros_catkin_ws/external_src/urdfdom目录下进行覆盖。执行
$ sudo checkinstall make install
时遇到选项输入2改名为liburdfdom-dev, 如果后面还有问题就都输入n。

5)下面安装第五个collada-dom-dev:

$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get install libboost-filesystem-dev libxml2-dev
$ wget http://downloads.sourceforge.net/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgz $ tar -xzf collada-dom-2.4.0.tgz
$ cd collada-dom-2.4.0
$ cmake .
$ sudo checkinstall make install


执行
$ sudo checkinstall make install
时遇到选项输入2改名为collada-dom-dev, 如果后面还有问题就都输入n。

3.2.2用rosdep解决依赖项

Raspbian Jessie:

$ cd ~/ros_catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie


官网一句话很重要:Note: Rosdep may report that python-rosdep, python-catkin-pkg, python-rospkg, and python-rosdistro failed to install; however, you can ignore this error because they have already been installed with pip.就是说如果这几个包报错安装不了,不要管它们,不要浪费时间在这里纠错。

官网的下一步是编译catkin工作空间,根据经验,就这么编译的话会报错,为了节省宝贵时间,提前做些处理。

在/home/pi/ros_catkin_ws/src/robot_model/collada_urdf/src目录下找到collada_to_urdf.cpp和collada_urdf.cpp两个文件,在

#include <assimp/Importer.hpp>
#include <assimp/postprocess.h>


后面加下列代码:

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


然后在 ~/ros_catkin_ws/src/rviz/src/rviz/路径下找到mesh_loader.cpp文件,在

#include <assimp/aiPostProcess.h>
#include <assimp/IOStream.h>
#include <assimp/IOSystem.h>
#endif


之后添加

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


3.3编译catkin工作空间

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


编译188个包。全部编译完时,ros安装成功。

$ source /opt/ros/indigo/setup.bash


==============================小结==============================

从周一到周四晚上,另加周二的一个通宵,共用了四天才成功在树莓派上安装好ros。每一步都可能花费相当长的时间,有的甚至超乎想象,而且树莓派还会时不时的假死,耐心等待吧。可能还有其他问题本人没留意到或没遇到,希望大家能指正出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: