|
有时候我们需要定义自己的msg,而ROS wiki上ROS Tutorials的教程让新手不是很好理解。在wiki上有介绍创建msg,下一步介绍发布和订阅,然而创建的msg是Num,发布的却是std_msgs/String。对于小白而言看起来就比较吃力了。但是在ROS上对在C++/Python上然后使用也是有说明的,如Messages,DefiningCustomMessages。
这篇博客就对如何创建自己的msg并且发布(C++)做一个详细的介绍。
创建自己的msg
Step1:首先进入自己的workspace。
Step2:创建一个包,取名为encode_talker,用来发布编码器数据信息。依赖rospy、roscpp、message_generation、message_runtime。
Step3:进入encode_talker包,创建msg文件夹和自己的msg
Step4:然后编辑Encode.msg,定制自己的数据。这里加入左右轮速
Step5:如果按照上述过程来的话就可跳过该步骤。否则需要在package.xml加入依赖,确保有以下两句话:
Step6:修改 CMakeLists.txt文件。
用find_packag中加入message_generation的依赖。有了step2这步也可以跳过。
然后得添加msg文件
为了确保CMake知道在什么时候重新配置我们的project,确保添加了以下代码。
这时的CMakeLists.txt是这样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Step7:编译并且测试ROS是否能够识别消息。
然后在终端上可以看到:
如果忘记Encode所在包,可以运行
这时终端上会显示
发布自己的msg
在创建自己的msg之后,接下来编写一个发布器把消息发布出去。
Step8:首先创建一个发布的C++文件(当前目录在工作空间 ~/catkin_ws)
在文件中编写代码,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在DefiningCustomMessages中可以知道怎么在C++中使用我们的msg,消息类型都被归属到与package相对应的域名空间下。在上面第2行以添加头文件的方式添加我们自己定义的msg:
在第7、10行使用了我们的msg,以下面的形式来表示:
Step9:修改CMake文件,在文件底部添加以下代码,第三行代码是为可执行文件添加对生成的消息文件的依赖
Step10:编译并且运行publisher节点
首先运行master
在一个新的终端下运行节点
再打开一个新的终端查看我们发布的消息,并且用rostopic echo查看数据

最后附上代码: encode_talker.tar
参考:
CSDN BLOG:
http://blog.csdn.net/heyijia0327/article/details/41654963
ROS WIKI:
http://wiki.ros.org/cn/ROS/Tutorials/CreatingMsgAndSrv
http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29
http://wiki.ros.org/roscpp/Overview/Messages
http://wiki.ros.org/cn/ROS/Tutorials/DefiningCustomMessages
|