ROS实战之catkin

在之前PC端Ubuntu上创建ROS程序包和编译ROS程序一直都是用的rosbuild的方式来进行的,觉得这种方式比较简单方便,而且买的《ROS机器人程序设计》也是用的这种方式。后来为了以后能够在不同平台上进行编译,师兄让我使用catkin的方式来对操作ROS程序,于是就上wiki上去学习了一下,基本上是基于以下几个网页进行了解的。
catkin or rosbuild
http://wiki.ros.org/catkin_or_rosbuild
catkin
http://wiki.ros.org/catkin/
CMakeList.txt
http://wiki.ros.org/catkin/CMakeLists.txt
由于英语水平有限,只能做简单地理解了。
catkin主要是用在较大规模程序或者是有意做交叉平台的场合
rosbuild主要用于ubuntu上的简单编译等
在功能包(packages)和功能包集(stack)
catkin是以metapackages(综合包)来替代功能包集的,在创建工作空间的时候就已经将功能包放入到综合包中,之后可以使用catkin_make一键来进行多个功能包的并行编译
rosbuild需要通过roscreate-stacks来手动建立功能包集
Build阶段
catkin既可以根据ROS_PACKAGES_PATH的路径来寻找依赖包也可以通过catkin_make -DCMAKE_PREFIX_PATH=来自己确认依赖包的路径。当需要对功能包进行独立地编译时(命名空间的独立)可以通过catkin_make_isolate来实现
rosbuild主要根据ROS_PACKAGES_PATH来寻找依赖包,并且其编译功能包都是单独编译的。
工作空间的布局(WorkSpace layout)
catkin的程序包只能严格地按照其要求放在工作空间下的src文件夹中,这样才可以通过catkin_make来对多个程序包进行编译
rosbuild的程序包可以放在工作空间下的任意位置,由rosmake来直接对单个程序包进行编译。
创建的文件(Build files)
rosbuild中主要的两个文件为manifest.xml和CMakeList.txt
catkin中主要的两个文件为packages.xml和CMakeList.txt
manifest.xml/packages.xml:主要是声明对包的依赖
CMakeList.txt:对包路径的规定以及添加欲编译的节点程序

Catkin的应用

创建工作空间
1. catkin_init_workspace:生成src目录里面存放着初始化工作空间的CMakeList.txt
2. catkin_make:生成devel空间和build空间
3. 运行source devel/setup.sh添加该工作空间的路径到ROS_PACKAGE_PATH中
创建程序包
1. catkin_create_pkg …:进入工作空间的src目录下使用该命令创建程序包以及其所依赖的包
2. catkin_make:进入工作空间的顶级目录运行该命令可以一次性编译该工作空间中的多个程序包,此时各程序包的命名空间是相互依赖的
2.1 单独编译一个包可以使用一下步骤:
1. cd /your package path
2. mkdir build
3. cd build
4. cmake ..
5. make
2.2 不依赖的单独编译工作空间中的各个程序包:使用catkin_make_isolated,如果你的两个程序包包含了两个相同名称的节点,而你不使用该命令进行编译的话,则会出现依赖错误。
2.3 如果程序包的源文件不在当前工作空间中,可以使用:catkin_make –source xx文件所在路径
编译程序包
编译的命令在创建程序包的步骤最后已经说明了,这里说下在执行catkin_make之前的一些工作。
1. 编辑package.xml文件,加入你新加入的所依赖的包,此处以图像处理中所需用到的包为例,我加入了以下指令来说明我后面增加的依赖包
<run_depend>sensor_msgs</run_depend>
<run_depend>image_transport</run_depend>
<run_depend>cv_bridge</run_depend>

2. 编辑CMakeList.txt文件,使用以下语句来查找添加的依赖包

find_package(catkin REQUIRED COMPONENTS
    sensor_msgs
    cv_bridge
    image_transport)
find_package(OpenCV 2 REQUIRED)
  1. 编辑CMakeList.txt文件,使用以下语句来添加参与编译的节点程序
add_executable(node name src/node program)#添加可执行节点
target_link_libraries(node name ${catkin_LIBRARIES})#链接库
add_dependencies(node name package name_generator_messages_cpp)#为可执行文件添加对生成的消息文件的依赖,因为catkin把所有的package并行的编译,所以如果你要使用其他catkin工作空间中其他package的消息,你同样也需要添加对他们各自生成的消息文件的依赖,感觉就是一个先导入头文件的过程。

看上面给出的三个网站看的还是有一些东西不理解,就把自己理解的说出来了,如有不对,请指出,欢迎大家多交流:-)。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值