截至 2017/4/18 主要有两个问题已解决
首先, 树莓派编译到179个包的时候 ,会出错, 咨询过github的作者,说liburdf headers liburdf这个包更改了部分内容,将boost的内容替换成c++11,所以 要降到0.4.2或者0.4.0 这个版本。
其次,如果RVIZ不能启动的话,注意查看urdfdom这个包是否安装正常。//如果之前有安装过ros,添加其他包的时候,注意安装完之后,记得运行 sudo ldconfig 进行动态库链接,博主一开始没有做,一直提示无法启动urdfdom_sensor.h 文件共享报错。
//附上常用的几个debian指令 老鸟绕过
删除原来已安装的包 dpkg -P //查看已安装的包 dpkg -L apache2
附上链接 github两个包链接:
https://github.com/ros/urdfdom_headers/releases/tag/0.4.2
https://github.com/ros/urdfdom/releases/tag/0.4.2
根据官网的的指导教程中的两个相关的包 替换成这两个包就可以编译通过。
附上collada-dom的百度链接,这个包要下载很久,很浪费时间,博主下完之后,保存了下来。
https://pan.baidu.com/s/1jI2wqCA
至此,ros的安装的坑躺完了。
附上官网的 教程 链接和参考的一篇博客的链接。
http://wiki.ros.org/ROSberryPi/Installing ROS Indigo on Raspberry Pi
如果 有什么问题 建议 参考 官网,有人说官网很容易出错,但是其实我感觉,理解了官网的意思 应该没什么问题, 就是有些小细节, 底下 这篇文章 会指出。
然后我自己 补充 一个地方。
以下的教程参考了超级cooper的博客:
就是关于collada 这个包的安装, 执行安装之后 会提示安装成功,但是Resolve Dependencies时
执行
rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie 会出现collada fasiled , 关于 python那几个 不用管他,但是这个选项我查了一下官网, 如下
Unavailable Dependencies
Following packages are not available for Raspbian:
Raspbian Wheezy: libconsole-bridge-dev, liburdfdom-headers-dev, liburdfdom-dev, liblz4-dev, collada-dom-dev
Raspbian Jessie: collada-dom-dev
对于raspbian 这个包一开始就说是不能 用的,那为什么 还提供 安装 ?? 完全无法理解。外国人在想什么?
1、准备材料
树莓派3B, ROS Indigo, 16G SD卡,Raspbian OS(博主装的是jessie)
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_generator wstool rosinstall
2.3初始化rosdep
$ sudo rosdep init
$ rosdep update
3、开始安装
3.1创建catkin工作空间用于编译ROS源码
$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws
接下来下载ROS源码,我们要安装的是完整版(Desktop)
下载并产生package列表,耐心等待
$ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-desktop-wet.rosinstall
$ wstool init src indigo-desktop-wet.rosinstall
可以使用多线程下载来提高下载速度
$ wstool init src indigo-desktop-wet.rosinstall -j8
如果中途下载中断,可以使用下面的命令恢复下载,如果不确定是否完全下载也可以用下面的命令来检测
$ wstool update -t src
3.2解决依赖
3.2.1安装软件源没有的依赖包
这部分很重要,编译报错的原因大多数都是在这里,很多人在编译的过程中报错卡在"collada_parser"这里,这是因为"collada_parser"的依赖包"liburdfdom-headers-dev"在最近的几个版本都用使用C++11的std替换掉了boost组件,而"collada_parer"源码里面用的依旧是boost组件,所以我们不能直接安装最新版本(2.4)的"liburdfdom-headers-dev",这里我们要安装的是1.0.0版本,但是1.0.0版本又缺少一个头文件utils.h,具体解决方法在下面。
由于libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev这5个依赖包不在Raspbian的软件源里面,不能直接通过apt-get安装,需要下载源码手动编译安装
创建一个新目录来存放这5个依赖包
$ 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
注意:update这一步不能省,确保全部更新完成,即使网络不好也要执行,博主在这一步因为update太慢直接跳过但是后面报错了。
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' 的错误,按照下面的步骤将gcc版本升级到gcc 4.7+
sudo apt-get install g++-4.7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --config gcc
liblz4-dev:
$ cd ~/ros_catkin_ws/external_src
$ apt-get source -b lz4
$ sudo dpkg -i liblz4-*.deb
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
前面分析了编译过程可能出现"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 checkinstall make install
安装"liburdfdom-headers-dev"后我们还要下载添加一个文件(utils.h)到/usr/local/include/urdf_model目录下,否则编译会报错
$ cd /usr/local/include/urdf_model
$ sudo wget https://raw.githubusercontent.com/ros/urdfdom_headers/master/urdf_model/include/urdf_model/utils.h
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
check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,选择[2],将名字从 "urdfdom"改为"liburdfdom-dev" ,其余有[y]或[n]的问题都输入'n'按回车, 否则会编译出错
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 DOM/Collada DOM 2.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
check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,选择[2],将名字从 "collada-dom"改为 "collada-dom-dev" ,其余有[y]或[n]的问题都输入'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
这个命令会寻找所有src目录的package并递归安装依赖,要安装的依赖包有点多,耐心等待吧。
注意: Rosdep可能会提示python-rosdep, python-catkin-pkg, python-rospkg, 和 python-rosdistro 安装失败,可以忽略这些错误,因为他们已经由pip安装好了。
3.3编译catkin工作空间
3.3.1在开始编译之前,先打两个补丁。
$ 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
3.3.2修改交换空间大小
树莓派在编译的时候会消耗很多CPU和内存资源,可能会出现死机和编译器内部错误,为了防止这种情况发生,需修改系统交换空间大小。
$ sudo nano /etc/dphys-swapfile
找到CONF_SWAPSIZE=100,修改为 CONF_SWAPSIZE=1024
修改完后重启树莓派才能生效
$ sudo reboot
3.3.3正式编译和安装
$ cd ~/ros_catkin_ws
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo
执行上面命令默认使用4个核心来编译,会使得CPU的使用率长时间为100%,容易死机,所以我们可以加上-j2参数设定树莓派使用2个核心编译。
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo -j2
接下来要做的事情就是睡一觉或者干别的事情,没有好几个小时是不能编译好的。
...
...
...
不出什么意外等待几个小时后我们的ROS就编译安装完成了,下面我们设置一下ROS的环境变量。
$ source /opt/ros/indigo/setup.bash
设置ROS环境变量在每次启动shell时自动添加到bash会话
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
到这里我们的ROS完整版就已经成功安装好了,不妨运行roscore试一下
$ roscore
成功运行roscore就证明我们安装成功了,接下来就可以按照官网教程愉快地学习了,距离做出自己的ROS移动平台又近了一步。
注意事项:上面libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev这几个package一定要按照顺序正确安装,尤其要注意名字有没有修改正确,如果安装错误必须得按照依赖关系卸载并重新安装。在update和安装依赖包的时候可能会因为网络问题中断,所以一定仔细看终端输出的信息,提示失败就重新执行命令。
//最后补充一下,原博客 未写的东西。
$ source /opt/ros/indigo/setup.bash 这样以后你执行ros环境的时候,就会帮你添加ros环境。