编译messages,services,或者actions

本文介绍如何在ROS项目中正确配置消息(message)、服务(service)和动作(action)的依赖关系。涉及package.xml和CMakeLists.txt文件的具体设置,以及如何确保消息包的独立性和正确编译。

package.xml

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
<depend>std_msgs</depend>

这个标签推荐写消息依赖。这个例子假设std_msgs是唯一的依赖项。确定在这个标签里提及所有的消息包的依赖项。

为了生成actions,增加一个依赖项:

<depend>actionlib_msgs</depend>

CMakeLists.txt

对于Cmake,找到一个message_generation和任何所依赖的消息,服务和动作的catkin包:

find_package(catkin REQUIRED COMPONENTS message_generation std_msgs)

为了编译动作,包括actionlib_msgs在依赖中:

find_package(catkin REQUIRED
             COMPONENTS
             actionlib_msgs
             message_generation
             std_msgs)

接下来,列出消息的定义:

add_message_files(DIRECTORY msg
                  FILES
                  YourFirstMessage.msg
                  YourSecondMessage.msg
                  YourThirdMessage.msg)

类似的,如果有一个服务要生成的话:

add_service_files(DIRECTORY srv
                  FILES
                  YourService.srv)

生成动作,添加:

add_action_files(DIRECTORY action
                 FILES
                 YourStartAction.action
                 YourStopAction.action)

然后,用下面指令生成所有的消息,服务,动作目标:

generate_messages(DEPENDENCIES std_msgs)

确认catkin_package()指令声明了消息,服务和动作所依赖的包:

catkin_package(CATKIN_DEPENDS message_runtime std_msgs)

一个好的ROS实践收集了所有的消息,服务和动作到一个独立的包内,其中不包括其他的API。那简化了包的依赖图。

然而,可以用消息包提供脚本和程序。如果这样做了,消息生成目标需要在依赖此消息的程序运行之前编译消息包。每个使用消息头的目标都需要声明一个依赖:

add_dependencies(your_program ${${PROJECT_NAME}_EXPORTED_TARGETS})

如果编译目标使用了从其他catkin包导入的消息或者服务头是,做类似的声明:

add_dependencies(your_program ${catkin_EXPORTED_TARGETS})

因为catkin是自动安装消息,服务和动作目标的,所以不需要额外的install()命令安装它们。

cmake_minimum_required(VERSION 3.0.2) project(helloworld) ## Compile as C++11, supported in ROS Kinetic and newer # add_compile_options(-std=c++11) ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs ) ## System dependencies are found with CMake's conventions # find_package(Boost REQUIRED COMPONENTS system) ## Uncomment this if the package has a setup.py. This macro ensures ## modules and global scripts declared therein get installed ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html # catkin_python_setup() ################################################ ## Declare ROS messages, services and actions ## ################################################ ## To declare and build messages, services or actions from within this ## package, follow these steps: ## * Let MSG_DEP_SET be the set of packages whose message types you use in ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). ## * In the file package.xml: ## * add a build_depend tag for "message_generation" ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in ## but can be declared for certainty nonetheless: ## * add a exec_depend tag for "message_runtime" ## * In this file (CMakeLists.txt): ## * add "message_generation" and every package in MSG_DEP_SET to ## find_package(catkin REQUIRED COMPONENTS ...) ## * add "message_runtime" and every package in MSG_DEP_SET to ## catkin_package(CATKIN_DEPENDS ...) ## * uncomment the add_*_files sections below as needed ## and list every .msg/.srv/.action file to be processed ## * uncomment the generate_messages entry below ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) ## Generate messages in the 'm
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值