树莓派3-Jessie编译安装ROS-indigo完整版

来源:互联网 发布:seo基础理论 编辑:程序博客网 时间:2024/05/13 10:22

树莓派3-Jessie编译安装ROS-indigo完整版

发布时间:2016年10月20日 09:31:21    浏览数:4388次    来自:Ray
大家在学习ROS中有时候直接使用笔记本或者工控机(小主机),比较麻烦、价格也比较贵,然后很多人就把主意打到小型的嵌入式计算机中如TK1、树莓派、香蕉派等,然而这些设备安装ROS时或多或少有些问题,例如教程只有 ...

大家在学习ROS中有时候直接使用笔记本或者工控机(小主机),比较麻烦、价格也比较贵,然后很多人就把主意打到小型的嵌入式计算机中如TK1、树莓派、香蕉派等,然而这些设备安装ROS时或多或少有些问题,例如教程只有安装ros-comm版本的,很多功能使用受限,很多小伙伴想把ROS-Desktop移植到这些设备上,但是坑比较多,然后一直过程一波三折,很少有走下去的,我在前期也走过这些坑,当时看了很多的教程,比如最有名的就是博主东方赤龙的树莓派2编译完整版的ROS-indigo,后来树莓派3发行,在树莓派2的基础上增加了板载蓝牙、无线,并且相应的性能也提升了,这时候我也有点心痒痒,于是继续入坑准备用树莓派3编译完整版indigo(其他版本类似,不过建议还是用indigo的),因为树莓派3的系统是jessie(树莓派2是wheezy,wheezy和jessie的区别大家百度一下就知道了),所以有些小细节要改,遂做如下记录:

作者发人肺腑的告诫:

不要试图在树莓派raspbian系统上编译完整的ros了,毫无意义,简直在浪费生命,浪费人生,买个二手笔记本也就几百块。

本文作者为ROSClub---Ray

转载请注明作者及其来源

补充:collada_parser编译错误的问题找到了

urdfdom_headers库刚刚更新,替换了std::shared_ptr所以导致collada_parser编译错误

网友:==(401565005)爆料。

QQ图片20160921170050.png

===================可能要安装的东西==========================

Installation

The rosinstall_generator can be installed via a Debian package from the ROS repositories:

sudo apt-get updatesudo apt-get install python-rosinstall-generator

For other platforms (where the Debian package is not available) it can be installed from PyPI using pip:

sudo pip install rosinstall-generator

=======================================================

1、安装前准备

树莓派3,TF卡16G,Raspbian OS(JESSIE),ROS Indigo,Win32DiskImager

1.1 Raspbian OS

在树莓派官网下载磁盘镜像,最新镜像为RASPBIAN JESSIE,

[点此下载](https://www.raspberrypi.org/downloads/raspbian/)

注意:选择RASPBIAN JESSIE,我下载的时候是2016-05-27的

1.2 烧写Raspbian jessie镜像

使用Win32DiskImager将下载好的树莓派镜像(.img文件)烧写进准备好的TF卡中

注意:在Win32DiskImager中不要选错盘符

2、准备ROS Indigo源代码及依赖库

2.0 更改swap file

swap大小改成2GB(根据你的内存卡定,我的16g所以此处设置是2g),小了经常编译时经常内部错误(安装ROS也一样,不过安装ROS时设置1GB就够了)。

sudo vim /etc/dphys-swapfile

然后找到并修改

CON_SWAPSIZE=2048

保存退出,重启一下电脑。

2.1 准备工作

先添加代码源,然后更新系统,再添加ROS代码库的key。

以下操作全在Xshell下操作

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

更新系统(***********一定要更新,不更新绝对出错

pi@raspberrypi:~ $ sudo apt-get updatepi@raspberrypi:~ $ sudo apt-get upgrade

2.2 安装必要软件包

pi@raspberrypi:~ $ sudo apt-get install python-pip python-setuptools python-yaml python-distribute python-docutils python-dateutil python-sixpi@raspberrypi:~ $ sudo pip install rosdep rosinstall_generator wstool rosinstall

2.3 初始化rosdep

pi@raspberrypi:~ $ sudo rosdep initpi@raspberrypi:~ $ rosdep update

3、编译ROS源码

3.1 编译前准备

3.1.1 创建一个workspace,用来下载和编译ROS完整源码

pi@raspberrypi:~ $ mkdir ~/ros_catkin_wspi@raspberrypi:~ $ cd ~/ros_catkin_ws

3.1.2 下载源码

ROS官方提供了两种源码包,

一种是ROS-Comm(官方推荐),里面仅包含了基本必备内容,没有GUI等工具;

一种是Desktop,里面除了ROS-Comm包含的基本必备内容外,还包含了rqt,rviz和robot-generic等工具。

这里我们选择Desktop版,如果只想安装ROS-Comm版,只需要将下面的命令中desktop替换为ros_comm即可。

pi@raspberrypi:~ $ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstallpi@raspberrypi:~ $ wstool init -j8 src indigo-desktop-wet.rosinstall

这样所有ROS代码会被下载到~/ros_catkin_ws/src目录中,-j8参数意思是开启8个线程一起下载。

如果下载异常中断,可以尝试使用以下命令恢复下载:

pi@raspberrypi:~ $ wstool update -j4 -t src

3.2 解决ROS依赖问题

在正式编译ROS之前,我们还需要手动安装以下几个依赖包:

libconsole-bridge-dev, liburdfdom-headers-dev, liburdfdom-dev, liblz4-dev, and collada-dom-dev。

ROS_Comm所需依赖包:libconsole-bridge-dev and liblz4-dev

Desktop所需依赖包:libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev

3.2.1 为这些依赖包建立单独的用于编译安装的文件夹,同时安装checkinstall和cmake:

pi@raspberrypi:~ $ mkdir ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install checkinstall cmake

3.2.2 安装libconsole-bridge-dev

pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install libboost-system-dev libboost-thread-devpi@raspberrypi:~ $ git clone https://github.com/ros/console_bridge.gitpi@raspberrypi:~ $ cd console_bridgepi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install

***在最后一步checkinstall的时候,会询问多个问题,在有一个问题提供多个选项的时候,选择2修改包名称为libconsole-bridge-dev,然后在之后的两个问题都选择N,否则最后编译时会出错。

3.2.3 安装liburdfdom-headers-dev

pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ git clone https://github.com/ros/urdfdom_headers.gitpi@raspberrypi:~ $ cd urdfdom_headerspi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install

***在最后一步checkinstall的时候,会询问多个问题,在有一个问题提供多个选项的时候,选择2修改包名称为liburdfdom-headers-dev,然后在之后的两个问题都选择N,否则最后编译时会出错。

3.2.4 安装liburdfdom-dev

pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_srcpi@raspberrypi:~ $ sudo apt-get install libboost-test-dev libtinyxml-devpi@raspberrypi:~ $ git clone https://github.com/ros/urdfdom.gitpi@raspberrypi:~ $ cd urdfdompi@raspberrypi:~ $ cmake .pi@raspberrypi:~ $ sudo checkinstall make install

***在最后一步checkinstall的时候,会询问多个问题,在有一个问题提供多个选项的时候,选择2修改包名称为liburdfdom-dev,然后在之后的两个问题都选择N,否则最后编译时会出错。

3.2.5 安装collada-dom-dev

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

这里的collada-dom-2.4.0.tgz大概几十兆,建议本地下载后传到树莓派中(可以使用rzsz命令,自行搜索使用方法)

***在最后一步checkinstall的时候,会询问多个问题,在有一个问题提供多个选项的时候,选择2修改包名称为collada-dom-dev,然后在之后的两个问题都选择N,否则最后编译时会出错。

3.2.6 安装liblz4-dev

pi@raspberrypi:~ $ cd ~/ros_catkin_ws/external_src  pi@raspberrypi:~ $ wget http://archive.raspbian.org/raspbian/pool/main/l/lz4/liblz4-1_0.0~r122-2_armhf.deb  pi@raspberrypi:~ $ wget http://archive.raspbian.org/raspbian/pool/main/l/lz4/liblz4-dev_0.0~r122-2_armhf.deb  pi@raspberrypi:~ $ sudo dpkg -i liblz4-1_0.0~r122-2_armhf.deb liblz4-dev_0.0~r122-2_armhf.deb

3.3 使用rosdep解决剩余依赖

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

上面命令会遍历所有的package并递归安装依赖

***3.5 修改部分代码(编译某些包错误可能需要修改以下文件)

在/home/pi/ros_catkin_ws/src/rviz/src/rviz目录中找到mesh_loader.cpp文件,找到以下代码区域:

#if defined(ASSIMP_UNIFIED_HEADER_NAMES)#include #include #include #include #include #else#include #include #include #include #include #endif

在这段代码之后,增加以下代码段,保存退出。

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

===============note !!! collada_to_urdf.cpp and collada_urdf.cpp file path============

在/home/pi/ros_catkin_ws/src/robot_model/collada_urdf/src目录中找到collada_to_urdf.cpp和collada_urdf.cpp文件,也同样添加以上代码段后保存退出。

这样在之后的编译过程中就不会再有报错信息。

3.6 编译安装ROS

pi@raspberrypi:~ $ cd ~/ros_catkin_wspi@raspberrypi:~ $ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2pi@raspberrypi:~ $ source /opt/ros/indigo/setup.bash

编译命令最后的-j2参数是开启两个线程编译,默认不带参数是使用四线程,但是对于树莓派的cpu和内存来说,容易因耗尽资源而死机中断。

至此,在树莓派3上编译安装ROS就完成了。

作者水平有限,如有错误请及时指出。

大家可以用树莓派配置主从机操作:ROS中多机通信最简单的配置方法-树莓派 to PC

参考链接:

http://blog.csdn.net/u013494117/article/details/51751939

http://blog.csdn.net/crazyquhezheng/article/details/43413231

https://www.raspberrypi.org/downloads/raspbian/

http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Indigo%20on%20Raspberry%20Pi
http://blog.csdn.net/zister/article/details/51882019

原创粉丝点击