描述了如何使用catkin工作空间覆盖系统中存在的包,用来测试和开发。
覆盖意思是在系统现存的相同的包上,从源码编译和使用一个ROS包。用这种方式,新的或者改动版的包“overlay”安装的包。
一、前提条件
需要最新版本的wstool。
1 . 首先安装ros-tutorials包通过apt-get:
$ sudo apt-get install ros-groovy-ros-tutorials
接下来覆盖这个ros包用同样的包但是是在工作空间内的源码。
二、用一个catkin工作空间覆盖
下面配置一个工作空间为了编译和source被覆盖包的源码。
1 . 创建一个catkin工作空间
为了管理不同source的多个源码包,推荐使用wstool。
创建一个文件夹保存新的工作空间:
$ mkdir -p ~/overlay_ws
$ cd ~/overlay_ws
2 . 添加包到catkin工作空间
使用wstool装配src文件夹:
$ mkdir -p ~/overlay_ws/src
$ cd ~/overlay_ws/src
$ wstool init
第三条指令创建一个初始化“.rosinstall”文件在src文件夹里面,包括所下载的源码的资源定位符合版本。现在从源码添加ros包到src文件夹:
$ wstool set ros_tutorials --git git://github.com/ros/ros_tutorials.git
$ wstool update
第一条指令使用git配置登记了“ros_tutorials”在“.rosintall”中,并且第二条指令下载文件。
Note:这里不一定适用wstool,可以使用git下载是一样的效果:
$ git clone git://github.com/ros/ros_tutorials.git
3 . 编译工作空间
在编译之前,确认环境配置正确:
$ source /opt/ros/indigo/setup.bash
编译工作空间:
$ cd ~/overlay_ws/
$ catkin_make
一旦编译完成,source了devel空间,工作空间内的包便覆盖了之前系统安装的包。
$ source ~/overlay_ws/devel/setup.bash
4 . 测试覆盖的包
$ roscd rospy_tutorials
$ pwd
~/overlay_ws/src/ros_tutorials/rospy_tutorials
三、链接catkin工作空间
有可能同时使用几个catkin工作空间,从而将一群catkin包的编译过程和另一群catkin包分开。
创建第二个工作空间:
$ mkdir -p ~/overlay_ws_overlay/src
$ cd ~/overlay_ws_overlay/src
$ catkin_init_workspace
$ cd ~/overlay_ws_overlay
$ source ~/overlay_ws/devel/setup.bash
$ catkin_make
注意输出如何告知覆盖链:
...
-- This workspace overlays: /home/<user>/overlay_ws/devel;/opt/ros/groovy
...
覆盖需要想要依赖的工作空间当配置的时候是激活的。所以如果删除build文件夹和配置,必须再一次source各自的setup.sh用来创建工作空间链。
为了测试覆盖,打开新终端,source新的setup.sh在overlay_ws_overlay中:
$ source ~/overlay_ws_overlay/devel/setup.bash
$ roscd rospy_tutorials
$ pwd
/home/<user>/overlay_ws/src/ros_tutorials/rospy_tutorials
也能创建另一个rospy_tutorials的副本在第二个覆盖工作空间内:
$ cd ~/overlay_ws_overlay/src
$ wstool init
从源码添加ros包到src文件夹内:
$ wstool set ros_tutorials --git git://github.com/ros/ros_tutorials.git
$ wstool update
用roscd检查是否覆盖起作用:
$ roscd rospy_tutorials
$ pwd
/home/<user>/overlay_ws/src/ros_tutorials/rospy_tutorials
此时不工作。为了让ros工具找到一个新的包,需要配置它至少一次。roscd起作用在需要更新的位置缓存基础上。
$ cd ~/overlay_ws_overlay
$ catkin_make
# this updates the cache for roscd
$ rospack profile
$ roscd rospy_tutorials
$ pwd
/home/<user>/overlay_ws_overlay/src/ros_tutorials/rospy_tutorials
做一个简要的重述:
$ roscd rospy_tutorials
roscd: command not found
$ source /opt/ros/groovy/setup.bash
$ roscd rospy_tutorials
$ pwd
/opt/ros/groovy/share/rospy_tutorials
$ source ~/overlay_ws/devel/setup.bash
$ roscd rospy_tutorials
$ pwd
/home/<user>/overlay_ws/src/ros_tutorials/rospy_tutorials
$ source ~/overlay_ws_overlay/devel/setup.bash
$ roscd rospy_tutorials
$ pwd
/home/<user>/overlay_ws_overlay/src/ros_tutorials/rospy_tutorials$
此文只做普及,尽量不要如此使用。