树莓派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的源码(需要FQ):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