树莓派上安装完整的ROS indigo(2017418 修正)

    xiaoxiao2021-04-17  35

    截至 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环境。
    转载请注明原文地址: https://ju.6miu.com/read-673231.html

    最新回复(0)