作者: Sam (甄峰) sam_code@hotmail.com
1. ROS消息类型和消息文件:
ROS语言中立,支持Python, C++,
Lisp等。为了支持交叉语言,ROS利用了简单的,语言无关的接口定义语言去描述模块间的消息传递。
它使用这种简化的消息类型描述语言来描述ROS节点发布的数据值,通过这样的描述语言,ROS能够使用多种编程语言生成不同类型消息的源代码。
ROS提供了很多预定义的消息类型,如果我们需要创建一个新的类型,就要把消息的类型定义放在功能包的msg文件夹下(Package介绍时说过)。
在此文件夹下,有用于定义各种消息的文件,它们都以 .msg为扩展名。
2. MSG文件格式:
消息类型必须有两个主要部分:字段,常量。
字段定义了消息中传输的数据类型,如:int32, float32, string.
常量用于定义字段的名称。
int32 id
float32 vel
string name
3. MSG文件的自动解读:
没种语言的代码生成器会通过解读MSG文件,生成类似本种语言的目标文件。
4. 创建自定义消息文件:
一些情况下,需要传输特殊类型的消息, 这时,就需要自定义传输数据类型和数据值的文件.
ROS会根据这些文件内容自动的为我们创建对应语言(C++, Python....)的代码,以便msg能够被节点使用。
4.1:创建MSG文件:
在功能包目录下,创建msg文件夹,并创建一个msg文件:
test_message.msg
内容如下:
int32 width
int32 height
float32 radius
4.2: 配置编译文件:
这个部分比较复杂,先记录下来,后面再具体研究:
A: 确保package.xml内容:
确保在build_depend中包含:generate_messages
在run_depend中包含:message_runtime
B:确保在CMakefiles.txt中:
B1.把message_generation加入到find_package中
B:2. 确保CATKIN_DEPENDS
message_runtime被加入到catkin_package中。
B3:确保刚才建立的msg目录内的.msg文件被正确加入:
B4:确保generate_messages()被打开:
4.3: 编译生成对应语言头文件:
catkin_make
可以在 catkin_ws/devel/include/test_source/test_message.h
看到这个文件。这就是自动创建的头文件。