树莓派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..tgz
$ cd collada-dom-2.4.
$ 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 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 --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++)

或者

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  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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

可以在

上面是安装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.*.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 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 --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..tgz
$ cd collada-dom-2.4.
$ 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

树莓派3安装ros的更多相关文章

  1. 树莓派安装ros

    之前电脑安装过ros感觉还好,没成想这次在树莓派上安装费老劲了,出现了很多错误,装了卸,卸了装废了半天劲下面将一些安装的错误和问题做个总结方便以后的安装也希望给别人一个参考 ros安装(对照自己的版本 ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——3.在ubuntu16.04中安装ROS kinetic

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. Ubuntu安装 Docker CE,VNC访问docker图形界面并安装ROS

    从包安装 如果您无法使用Docker的存储库来安装Docker CE,则可以下载.deb适用于您的发行版的 文件并手动安装.每次要升级Docker CE时都需要下载新文件. 安装Docker CE,将 ...

  4. ubuntu14上安装ros教程

    安装ROS 官方的安装教程地址 http://wiki.ros.org/cn/jade/Installation/Ubuntu 建议安装indigo版的 下面的教程是安装jade版的 配置Ubuntu ...

  5. 树莓派centos安装的基本配置

    萌新再发一帖,这篇文章呢主要是为大家在树莓派上安装centos以后提供一个问题的解决方案. 首先我呢觉得好奇就在某宝上花了两百来块钱买了一套树莓派,很多人喜欢在树莓派上安装Debian,我呢更青睐用R ...

  6. ROS_Kinetic_01 在ubuntu 16.04安装ROS Kinetic 2017.01更新

    ROS_Kinetic系列学习(一),在ubuntu 16.04安装ROS Kinetic. Celebrating 9 Years of ROS! ubuntu16.04已经发布半年多了,ROS的K ...

  7. TX2 安装 ROS 依赖库错误解决办法

    一.更换ubuntu 16.04 更新源 1. 更新源 deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse rest ...

  8. GO语言.树莓派.环境安装和测试

    Go是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.为了方便搜索和识别,有时会将其称为Golang 记录一下如何在树莓派上安装语言环境 第一步: 下载安装包 http ...

  9. Ubuntu16.04 安装ROS及其IDE

    一. ROS的安装 1. 进入ROS官方网站 http://wiki.ros.org/ 2. Install -> ROS Kinetic Kame -> Ubuntu 3. 详情可参考所 ...

随机推荐

  1. 剑指offer总结一:字符、数字重复问题

    问题1:字符串中第一个不重复的字符 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是" ...

  2. 纯css、js 的H5页面对接echarts

    做项目时,会遇到一些零碎的技术点.记录下来以防忘记 需求:做可视化界面,但是需要兼容ie8,需要用纯css.js 的H5页面对接echarts,下面为效果图(带定时器循环显示tooltip). 实现方 ...

  3. HDU 6040

    题意略. 思路:题目就是在询问你m次,第k小是哪个数.首先我们可以想到直接排序后,即可O(1)来查找询问.但是题目中n的范围给的是1e7, 无法承受nlogn的复杂度.从而想到另外一种求静态第k小的方 ...

  4. 百度地图Canvas实现十万CAD数据秒级加载

    背景 前段时间工作室接到一个与地图相关的项目,我作为项目组成员主要负责地图方面的设计和开发.由于地图部分主要涉及的是前端页面的显示,作为一名Java后端的小白,第一次写了这么多HTML和JavaScr ...

  5. 第1章 NLP基础

    大纲 NLP基础概念 NLP的发展与应用 NLP常用术语以及扩展介绍 1.1 什么是NLP 基本分类 自然语言生成(Natural Language Generation,NLG) 指从结构化数据中以 ...

  6. Worker Service in ASP .NET Core

    介绍 提到 ASP.NET Core,我们多半会想到 ASP.NET MVC.ASP.NET Web API.Razor page 及 Blazor.随着 .NET Core 3.0 的推出,今天会介 ...

  7. Android环境配置(Eclipse全开发环境下载)

    Android环境配置 前期准备 Android环境的Eclipse: 网站链接:https://www.runoob.com/w3cnote/android-tutorial-eclipse-adt ...

  8. nginx-springboot-vue前后端分离跨域配置

    nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...

  9. 浅谈JavaWeb发展

    真的认认真真了解JavaWeb的发展,还是因为突然帮朋友弄个没什么功能的小网站时的突然奇想.但是上来就搭SSM的框架,搭到一半却想起来没什么功能那么麻烦干嘛.干脆不用框架,可是又蒙了,不用框架怎么写. ...

  10. Codeforces Round #506 (Div. 3) 1029 D. Concatenated Multiples

    题意: 给定n个数字,和一个模数k,从中选出两个数,直接拼接,问拼接成的数字是k的倍数的组合有多少个. 思路: 对于a,b两个数,假定len = length of (b),那么a,b满足条件就是a ...