树莓派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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可以在
上面是安装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