自定义消息类型的定义
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。
消息的调用
消息发布
这一部分可以参照(二)的内容,其实是一样的。区别在于主循环段不一样,特别的是name字段因为是string字符串所以需要.c_str()一下。
c++ python
消息订阅
跟之前的一模一样。
头文件调用
订阅与发布的主要调用方式,就在代码开始的地方输入头文件,这个Person.h头文件是catkin_make编译功能包后存放在工作空间devel/include下对应的功能包名文件夹下的。
c++ python
CMakeList.txt文件
该文件的修改和已有的消息类型的区别在于最后一行代码,最后一行代码是将这个可执行文件与msg文件产生一个依赖的关系,而原有的消息类型则不需要加入这一行代码也是可以运作的。
题外话
roscore打开的窗口叫rosmaster,它是一个婚介所,帮助发布节点与订阅节点产生联系,一旦二者产生联系,那么该窗口进程就可以被杀死,并不影响节点间的通讯。