3、话题消息的定义和使用

ROS节点之间进行通信的最重要机制是消息传递,为了在不同的开发语言实现的模块间进行消息通信,ROS利用了简单的、与开发语言无关的接口定义语言来描述模块间传递的消息在ROS中,消息本质上是一种节点间传递信息的数据类型,当节点想要分享信息时,节点可以发布消息到相应的话题中,当节点需要接收信息时,节点可以订阅相应的话题。节点管理器会确保消息传递的互通性,但消息不需要经过节点管理器进行转发。ROS提供了很多预定义的消息类型,但开发者可以通过后缀名为msg的消息文件自定义消息类型,msg文件应放置在程序包的msg目录下。消息类型每行的声明必须包含两部分:域和变量;域定义了消息的数据类型,变量定义了域的名称。域可以是独立域也可以是复合域。

一、对两个重要配置文件的了解

1.package.xml。
package.xml描述了功能包的元信息,也就是描述功能包属性的信息,它定义了程序包的信息,如名称、版本、维护者、编译依赖、执行依赖等。
2、CmakeList.txt
记录了功能包的编译规则,它定义了ROS对cmake的最低要求、编译依赖的程序包、消息文件、服务文件、动作文件、头文件等,还定义了编译输出的可执行文件、目标链接库、安装输出、单元测试等。

如:cmake_minimum_required()
要求的CMake最低版本
project()
程序包的名称
find_package()
编译依赖的程序包
add_message_files(), add_service_files(), add_action_files()
添加消息、服务或响应文件
generate_messages()
生成消息、服务或响应文件
catkin_package()
catkin程序包
add_library()/add_executable()/target_link_libraries()
添加库文件,可执行文件,链接库文件
catkin_add_gtest()
添加测试单元
install()
安装

具体内容可以参考一下这个链接

二、具体的实现步骤

1、定义消息接口

在所在的功能包中创建一个msg的目录,然后在目录下创建一个Person.msg文件,文件内容如下:

string name
uint8  age
uint8  sex

uint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

2、在package.xml中添加功能包依赖

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
//依赖message_generation用于产生与特定语言相关的消息代码,message_generation本身是一个功能包
//依赖message_runtime表示特定语言相关的消息运行依赖
通俗地讲需要message_generation生成C++或Python能使用的代码,需要message_runtime提供运行时的支持,所以package.xml中添加以下两句。总的来说,一定要确保该文件中设置了以下编译和运行的相关依赖。
具体如下:
在这里插入图片描述

3、在CMakeLists.txt添加编译选项

添加预处理代码

//把依赖的程序包添加进去,调用find_package查找依赖的包,必备的有roscpp rospy message_generation,其他根据具体类型添加。

①find_package( …… message_generation)

//在find_package中添加消息生成依赖的功能包message_generation。这样在编译的时候才能找到所需要的的文件。
在这里插入图片描述

②add_message_files(FILES Person.msg)
//指定msg文件,也就是将Person.msg作为我们定义的消息接口,然后在编译的时候就可以发现这个接口&#

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值