zoukankan      html  css  js  c++  java
  • 树莓派3安装ros

    树莓派3上面安装ros总结
    参考wiki和诸多博客安装ros仍然遇到了很多问题,重装了好几遍才成功,为了自己和其他人以后再安装ros时,不在重蹈覆辙。
    1.准备和说明
    树莓派3,安装系统Raspbian jessie版本,安装ROS Indigo。
    博主是在树莓派3的Raspbian jessie系统上安装ROS Indigo,注意,下面讲的jessie的上面的安装过程。
    网上很多博文没有说清楚Jessie的安装过程,具体可以查看wiki,后面也将讲到这个。
    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 -

      2.2.然后更新软件源(如果源是最新的不更新也可以,但是可能会出错,最好更新一下)

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

      2.3.安装依赖包

      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.4.初始化rosdep

    $ sudo rosdep init
    $ rosdep update

    3.开始安装

      3.1.创建catkin工作空间编译ros源码

    $ mkdir ~/ros_catkin_ws
    $ cd ~/ros_catkin_ws

      3.2.下载ROS源码

      我安装的是Desktop的版本,因此下载desktop版本的源码并产生package列表。
      desktop包含的工具:ROS, rqt, rviz, and robot-generic libraries。

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

      下载会耗很长时间,可以使用8个线程提高速度

    $ wstool init src indigo-desktop-wet.rosinstall -j8

      如果中途下载中断,可以使用下面的命令恢复下载,如果不确定是否完全下载也可以用下面的命令来检测

    $ wstool update -t src

    注意:

    如果安装ROS-Comm版本,按照下面的命令操作:
    (desktop包含的工具:ROS package, build, and communication libraries. No GUI tools.)

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

      3.3.安装软件源没有的依赖包

      这个地方很重要,wiki上明确指出了每个系统中那些依赖包没有,和ros不同版本需要哪些依赖包。具体如下:
      Raspbian Wheezy的系统中右边的依赖包没有提供: libconsole-bridge-dev, liburdfdom-headers-dev, liburdfdom-dev, liblz4-dev, collada-dom-dev
      Raspbian Jessie的系统中右边的依赖包没有提供: collada-dom-dev
      Ros_Comm版本需要右边的依赖包: libconsole-bridge-dev, liblz4-dev
      Desktop版本需要右边的依赖包: libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev
      从上面的看出来Jessie的系统装desktop版本只需要安装collada-dom-dev
      下面是安装collada-dom-dev的步骤:
        3.3.1.安装编译工具cmake

    $ mkdir ~/ros_catkin_ws/external_src
    $ sudo apt-get install checkinstall cmake

        3.3.2.添加源,否则可能找不到collada-dom-dev包

    $ 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

        3.3.3.安装collada-dom-dev

        注意:我的jessie版本的系统中g++编译器是4.9版本,所以不需要升级g++编译器,但是这个包需要c++11的支持,因此,g++编译需要4.7版本以上。
        升级编译器的语句在后面有说明,自己根据自己的实际情况来。

    $ 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

        check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,选择[2],将名字从 "collada-dom"改为 "collada-dom-dev" ,其余有[y]或[n]的问题都输入'n'按回车, 否则会编译出错。

      3.4.解决rosdep的依赖
      Raspbian Jessie:

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

      接下来的安装会花很长时间。

      注意: Rosdep可能会提示python-rosdep, python-catkin-pkg, python-rospkg, 和 python-rosdistro 安装失败,可以忽略这些错误,因为他们已经由pip安装好了。
      3.5.编译catkin工作空间
        3.5.1.先打三个补丁

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

        将上面的代码添加到

        ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_urdf.cpp与
        ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_to_urdf.cpp和
        ~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp
        文件的最后一个#include(如果#include的下一行是#endif则放到#endif后)行后。
        3.5.2.修改交换空间大小
        树莓派在编译的时候会消耗很多CPU和内存资源,可能会出现死机和编译器内部错误,为了防止这种情况发生,需修改系统交换空间大小。
        注意:这个一定要修改一下,否则很可能会出错。

    $ sudo vi /etc/dphys-swapfile

        找到CONF_SWAPSIZE=100,修改为 CONF_SWAPSIZE=1024

        修改完后重启树莓派才能生效

    $ sudo reboot

        3.5.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

        这部编译需要很长时间,第一次编译需要3个小时以上。

    4.设置ros
    设置一下ROS的环境变量。

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

    设置ROS环境变量在每次启动shell时自动添加到bash会话

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

    到这里我们的ROS完整版就已经成功安装好了,不妨运行roscore试一下

    $ roscore

    成功运行roscore就证明我们安装成功了

    以上是我安装成功时的步骤,然后下面我说明一下我编译时遇到错误。
    首先困扰最大的就是3.3的步骤中安装依赖包,很多博客没有说清楚,我以为jessie也需要安装Desktop版本需要的依赖包: libconsole-bridge-dev, liblz4-dev, liburdfdom-headers-dev, liburdfdom-dev, collada-dom-dev的所有包。
    结果在安装'urdf' 'collada_parser' 'collada_urdf'的时候总是出错
    1.std中没有stod函数等错误,这是因为g++编译器版本过低,或者编译命令没有-std=c++11的选项。
    解决方法:
    升级g++编译

    sudo apt-get install g++-4.9
    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.9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
    sudo update-alternatives --config gcc

    或者添加-std=c++11的选项

    在对应的出错包的目录下面的CMakeLists.txt中添加下面的语句:

    add_compile_options(-std=c++11)

    或者

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++0x")

    例如是urdf包出错就在

    ~/ros_catkin_ws/src/robot_model/urdf/CMakeLists.txt 27行configure_file(urdfdom_compatibility.h.in "${generated_compat_header}" @ONLY)的下面增加add_compile_options(-std=c++11)
    或者
    ~/ros_catkin_ws/src/robot_model/urdf/CMakeLists.txt 15行pkg_check_modules(libpcrecpp libpcrecpp)的下面增加set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++0x")
    我的jessie版本的系统中G++编译器是4.9版本,所以在上面3.3的步骤里面没有增加升级g++编译器的版本,如果g++编译器是4.7以下,可自己升级。
    2./usr/local/include/urdf_world/types.h和/home/pi/ros_catkin_ws/devel_isolated/urdf/include/urdf/urdfdom_compatibility.h中的typedef std::shared_ptr<ModelInterface> ModelInterfaceSharedPtr;这个类型重复定义的错误
    urdfdom_headers中urdf_world/types.h的内容如下:

    /*********************************************************************
    * Software License Agreement (BSD License)
    *
    * Copyright (c) 2008, Willow Garage, Inc.
    * All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions
    * are met:
    *
    * * Redistributions of source code must retain the above copyright
    * notice, this list of conditions and the following disclaimer.
    * * Redistributions in binary form must reproduce the above
    * copyright notice, this list of conditions and the following
    * disclaimer in the documentation and/or other materials provided
    * with the distribution.
    * * Neither the name of the Willow Garage nor the names of its
    * contributors may be used to endorse or promote products derived
    * from this software without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    * POSSIBILITY OF SUCH DAMAGE.
    *********************************************************************/
    
    /* Author: Steve Peters */
    
    #ifndef URDF_WORLD_TYPES_H
    #define URDF_WORLD_TYPES_H
    
    #include <memory>
    
    
    namespace urdf{
    
    class ModelInterface;
    
    // typedef shared pointers
    typedef std::shared_ptr<ModelInterface> ModelInterfaceSharedPtr;
    
    }
    
    #endif

    /usr/local/include/urdf_world/types.h中的typedef boost::shared_ptr<ModelInterface> ModelInterfaceSharedPtr;和上面不同。

    可以看出来安装urdfdom_headers的时候/usr/local/include/urdf_world/types.h会替换成上面的定义方式,出现上面的错误时,可以检查一下,和上面的不同说明urdfdom_headers安装有错。
    因为"collada_parser"的依赖包"liburdfdom-headers-dev"在最近的几个版本都用使用C++11的std替换掉了boost组件,而"collada_parer"源码里面用的依旧是boost组件。
    3.如果替换后还是出错,可能就是我在上面说的,jessie中包含了urdfdom_headers包,所以不需要安装urdfdom_headers等包,那么需要将上面安装的卸载。
    下面给出我的包安装顺序:

    ~~ traversing 187 packages in topological order:
    ~~ - catkin
    ~~ - genmsg
    ~~ - gencpp
    ~~ - genlisp
    ~~ - genpy
    ~~ - bond_core
    ~~ - cmake_modules
    ~~ - class_loader
    ~~ - common_msgs
    ~~ - common_tutorials
    ~~ - cpp_common
    ~~ - desktop
    ~~ - diagnostics
    ~~ - eigen_stl_containers
    ~~ - executive_smach
    ~~ - geometry
    ~~ - geometry_tutorials
    ~~ - gl_dependency
    ~~ - media_export
    ~~ - message_generation
    ~~ - message_runtime
    ~~ - mk
    ~~ - nodelet_core
    ~~ - octomap (plain cmake)
    ~~ - orocos_kdl (plain cmake)
    ~~ - python_orocos_kdl (plain cmake)
    ~~ - qt_dotgraph
    ~~ - qt_gui
    ~~ - qt_gui_py_common
    ~~ - qwt_dependency
    ~~ - random_numbers
    ~~ - robot
    ~~ - robot_model
    ~~ - ros
    ~~ - ros_base
    ~~ - ros_comm
    ~~ - ros_core
    ~~ - ros_tutorials
    ~~ - rosbag_migration_rule
    ~~ - rosbash
    ~~ - rosboost_cfg
    ~~ - rosbuild
    ~~ - rosclean
    ~~ - roscpp_core
    ~~ - roscpp_traits
    ~~ - roscreate
    ~~ - rosgraph
    ~~ - roslang
    ~~ - roslint
    ~~ - rosmake
    ~~ - rosmaster
    ~~ - rosmsg
    ~~ - rospack
    ~~ - roslib
    ~~ - rosparam
    ~~ - rospy
    ~~ - rosservice
    ~~ - rostime
    ~~ - roscpp_serialization
    ~~ - python_qt_binding
    ~~ - roslaunch
    ~~ - rosunit
    ~~ - angles
    ~~ - rosconsole
    ~~ - pluginlib
    ~~ - qt_gui_cpp
    ~~ - resource_retriever
    ~~ - rosconsole_bridge
    ~~ - roslz4
    ~~ - rosbag_storage
    ~~ - rostest
    ~~ - rqt_action
    ~~ - rqt_bag
    ~~ - rqt_bag_plugins
    ~~ - rqt_common_plugins
    ~~ - rqt_console
    ~~ - rqt_dep
    ~~ - rqt_graph
    ~~ - rqt_gui
    ~~ - rqt_logger_level
    ~~ - rqt_moveit
    ~~ - rqt_msg
    ~~ - rqt_nav_view
    ~~ - rqt_plot
    ~~ - rqt_pose_view
    ~~ - rqt_publisher
    ~~ - rqt_py_console
    ~~ - rqt_reconfigure
    ~~ - rqt_robot_dashboard
    ~~ - rqt_robot_monitor
    ~~ - rqt_robot_plugins
    ~~ - rqt_robot_steering
    ~~ - rqt_runtime_monitor
    ~~ - rqt_service_caller
    ~~ - rqt_shell
    ~~ - rqt_srv
    ~~ - rqt_tf_tree
    ~~ - rqt_top
    ~~ - rqt_topic
    ~~ - rqt_web
    ~~ - smach
    ~~ - smclib
    ~~ - std_msgs
    ~~ - actionlib_msgs
    ~~ - bond
    ~~ - diagnostic_msgs
    ~~ - geometry_msgs
    ~~ - eigen_conversions
    ~~ - kdl_conversions
    ~~ - nav_msgs
    ~~ - rosgraph_msgs
    ~~ - rqt_py_common
    ~~ - sensor_msgs
    ~~ - image_geometry
    ~~ - map_msgs
    ~~ - shape_msgs
    ~~ - smach_msgs
    ~~ - std_srvs
    ~~ - stereo_msgs
    ~~ - tf2_msgs
    ~~ - tf2
    ~~ - trajectory_msgs
    ~~ - control_msgs
    ~~ - urdf_parser_plugin
    ~~ - visualization_msgs
    ~~ - geometric_shapes
    ~~ - visualization_tutorials
    ~~ - viz
    ~~ - webkit_dependency
    ~~ - xmlrpcpp
    ~~ - roscpp
    ~~ - bondcpp
    ~~ - bondpy
    ~~ - joint_state_publisher
    ~~ - nodelet
    ~~ - nodelet_tutorial_math
    ~~ - pluginlib_tutorials
    ~~ - roscpp_tutorials
    ~~ - rosout
    ~~ - cv_bridge
    ~~ - diagnostic_aggregator
    ~~ - diagnostic_updater
    ~~ - diagnostic_common_diagnostics
    ~~ - dynamic_reconfigure
    ~~ - filters
    ~~ - message_filters
    ~~ - image_transport
    ~~ - rosnode
    ~~ - rospy_tutorials
    ~~ - rostopic
    ~~ - roswtf
    ~~ - rqt_gui_cpp
    ~~ - rqt_gui_py
    ~~ - rqt_image_view
    ~~ - self_test
    ~~ - smach_ros
    ~~ - tf2_py
    ~~ - topic_tools
    ~~ - rosbag
    ~~ - actionlib
    ~~ - actionlib_tutorials
    ~~ - diagnostic_analysis
    ~~ - nodelet_topic_tools
    ~~ - rqt_launch
    ~~ - tf2_ros
    ~~ - tf
    ~~ - interactive_markers
    ~~ - interactive_marker_tutorials
    ~~ - laser_geometry
    ~~ - tf2_kdl
    ~~ - tf_conversions
    ~~ - turtlesim
    ~~ - turtle_actionlib
    ~~ - turtle_tf
    ~~ - turtle_tf2
    ~~ - urdf
    ~~ - collada_urdf
    ~~ - collada_parser
    ~~ - kdl_parser
    ~~ - robot_state_publisher
    ~~ - rviz
    ~~ - librviz_tutorial
    ~~ - rqt_rviz
    ~~ - rviz_plugin_tutorials
    ~~ - rviz_python_tutorial
    ~~ - visualization_marker_tutorials
    ~~ - xacro
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    View Code

    可以在

    上面是安装Raspbian jessie的过程,下面说明Raspbian Wheezy版本安装ros的步骤:
    1.创建ros代码仓库

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

    2.然后更新软件源(如果源是最新的不更新也可以,但是可能会出错,最好更新一下)

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

    3.安装依赖包

    $ sudo apt-get install python-pip python-setuptools python-yaml python-argparse python-distribute python-docutils python-dateutil python-six
    $ sudo pip install rosdep rosinstall_generator wstool rosinstall

    4.初始化rosdep

    $ sudo rosdep init
    $ rosdep update

    5.创建catkin工作空间编译ros源码

    $ mkdir ~/ros_catkin_ws
    $ cd ~/ros_catkin_ws

    6.下载ROS源码

    我安装的是Desktop的版本,因此下载desktop版本的源码并产生package列表。
    desktop包含的工具:ROS, rqt, rviz, and robot-generic libraries。

    $ 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

    注意:

    如果安装ROS-Comm版本,按照下面的命令操作:
    (desktop包含的工具:ROS package, build, and communication libraries. No GUI tools.)

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

    7.安装软件源没有的依赖包

    根据上面的说明Raspbian Wheezy的系统需要安装这些包: libconsole-bridge-dev, liburdfdom-headers-dev, liburdfdom-dev, liblz4-dev, collada-dom-dev。这也是和Raspbian jessie版本中安装过程的主要区别,不要弄混淆了,否则可能出一些莫名其妙的错误总是失败。
      7.1.创建一个新目录来存放这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太慢直接跳过但是后面报错了。

      7.2.安装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

      7.3.安装liblz4-dev: 

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

      7.4.安装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

      或者

    $ apt-cache search XX | grep XX

      (XX表示包的部分名称)

      运行上面命令在列表中没有看到我们安装的"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

      7.5.安装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'按回车, 否则会编译出错

      7.6.安装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

      check-install开始会让你输入包的描述,可以直接按回车跳过。当checkinstall询问是否改变安装选项时,选择[2],将名字从 "collada-dom"改为 "collada-dom-dev" ,其余有[y]或[n]的问题都输入'n'按回车, 否则会编译出错

    8.解决rosdep的依赖

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

    接下来的安装会花很长时间。

    注意: Rosdep可能会提示python-rosdep, python-catkin-pkg, python-rospkg, 和 python-rosdistro 安装失败,可以忽略这些错误,因为他们已经由pip安装好了。
    9.编译catkin工作空间
      9.1.先打三个补丁

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

      将上面的代码添加到

      ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_urdf.cpp与
      ~/ros_catkin_ws/src/robot_model/collada_urdf/src/collada_to_urdf.cpp和
      ~/ros_catkin_ws/src/rviz/src/rviz/mesh_loader.cpp
      文件的最后一个#include(如果#include的下一行是#endif则放到#endif后)行后。
      9.2.修改交换空间大小
      树莓派在编译的时候会消耗很多CPU和内存资源,可能会出现死机和编译器内部错误,为了防止这种情况发生,需修改系统交换空间大小。
      注意:这个一定要修改一下,否则很可能会出错。

    $ sudo vi /etc/dphys-swapfile

      找到CONF_SWAPSIZE=100,修改为 CONF_SWAPSIZE=1024

      修改完后重启树莓派才能生效

    $ sudo reboot

      9.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

      这部编译需要很长时间,第一次编译需要3个小时以上。

      9.4.设置ros
      设置一下ROS的环境变量。

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

      设置ROS环境变量在每次启动shell时自动添加到bash会话

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

      到这里我们的ROS完整版就已经成功安装好了,不妨运行roscore试一下

    $ roscore

      成功运行roscore就证明我们安装成功了。

    其他系统下ros的安装过程可参考wiki,比较简单这里只给出地址
    debian系统下安装ros:http://wiki.ros.org/kinetic/Installation/Debian
    ubuntu系统下安装ros:http://wiki.ros.org/kinetic/Installation/Ubuntu
    这是github上ros的源码(需要翻墙):https://github.com/ros

    参考博客:
    http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Indigo%20on%20Raspberry%20Pi
    http://blog.csdn.net/crazyquhezheng/article/details/43413231
    http://blog.csdn.net/Super_Miao0/article/details/53571753

  • 相关阅读:
    wpf 打开win8系统软件盘
    wpf DATAgrid模板中button 命令绑定以及命令参数绑定
    <转>WPF 中的绑定
    代码方式给控件添加背景图片(WPF)
    WPF 枚举使用
    wpf 窗体添加背景图片
    c# 读取txt文件中文乱码解决方法
    Kali linux-信息收集-dmitry
    等保2.0所需设备
    Microsoft Dynamics 2013 --Social Pane
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/7300868.html
Copyright © 2011-2022 走看看