2025年ROS 学习应用篇(三)话题Topic学习之自定义话题消息的类型的定义与调用

ROS 学习应用篇(三)话题Topic学习之自定义话题消息的类型的定义与调用自定义消息类型的定义 Person msg 文件的定义 数据接口文件的定义 创建 msg 文件 首先在功能包下新建 msg 文件夹 接着在该文件夹下创建文件 定义 msg 文件内容 一个消息最重要的就是数据结构类型 这就需要引入一个 msg 文件 用于定义一些宏 换句话说 就是定义字符串和数据类型

大家好,我是讯享网,很高兴认识大家。

自定义消息类型的定义

Person.msg文件的定义(数据接口文件的定义)

创建msg文件


讯享网首先在功能包下新建msg文件夹,接着在该文件夹下创建文件。

定义msg文件内容

一个消息最重要的就是数据结构类型。这就需要引入一个msg文件,用于定义一些宏,换句话说,就是定义字符串和数据类型。

一个人有名字,年龄和性别,名字是以字符串的方式输入的,性别的话男女是可以用1和2或者不知道的0来表示,同样年纪也是数字,所以年纪和性别都用unit8来定义。

package.xml文件的编译

还需要在文件中增加依赖的功能包,这就跟python库的引用一样。这一部分分两步,一个是build_depend一个是exec_depent。

这是我们通过终端建立功能包的时候输入的一些依赖,所以如果需要补充依赖的话,除了文件CMakeList.txt文件需要补充package.xml中也需要补齐。

我们自己做的功能包需要的依赖就安排这上面这部分代码的后面即可。

build_depend

build_depend是编译依赖,message_generation是一个消息的编译依赖。

exec_depent 

exec_depent是执行依赖,message_runtime是一个消息的动态执行依赖。

CMakeList.txt文件的修改

添加依赖包

看来我猜的不错,都是在这里添加文件的依赖的。

 链接Person.msg文件

添加这一字段,具体在哪里添加的话,可以通过搜索add_message找到该文档中注释的位置,然后输入就可以了。

链接ROS中已有的依赖

注意,这里是ros中的依赖,开头那里的依赖是ros外的依赖。

链接执行依赖

这一步对应的是exec_depent中添加的依赖,也就是message_runtime。

编译头文件

编译生成Person.h头文件

编译好的头文件.h在如下目录中

自定义消息的调用

消息发布

这一部分可以参照(二)的内容,其实是一样的。区别在于主循环段消息内容不一样,特别的是C++中name字段因为是string字符串所以需要.c_str()一下。

c++                                                                                python  

消息订阅

跟之前的一模一样。

头文件调用

订阅与发布的主要调用方式,就在代码开始的地方输入头文件,这个Person.h头文件是catkin_make编译功能包后存放在工作空间devel/include下对应的功能包名文件夹下的。

 c++                                                                                python  

CMakeList.txt文件

该文件的修改和已有的消息类型的区别在于最后一行代码,最后一行代码是将这个可执行文件与msg文件产生一个依赖的关系,而原有的消息类型则不需要加入这一行代码也是可以运作的。

题外话

roscore打开的窗口叫rosmaster,它是一个婚介所,帮助发布节点与订阅节点产生联系,一旦二者产生联系,那么该窗口进程就可以被杀死,并不影响节点间的通讯。

小讯
上一篇 2025-04-05 15:41
下一篇 2025-02-08 09:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/125201.html