ros机器人编程实践(3.2)- 自定义消息类型发布与接收

245
0
2020年8月10日 08时22分

前言

《Ros机器人编程实践》第三章例程二定义虚数数据类型。

实现过程

创建工作区参见上一章博客:


ros机器人编程实践(3.1)-将消息发布在话题上

 

先看下basic包的文件结构:

 

cd ~/catkin_ws/src/basic
ls
tree

 

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图

 

ok下面开始操作

1、创建我们的消息类型,也就是创建Complex.msg文件

cd ~/catkin_ws/src/basic
mkdir msg
cd msg
vi Complex.msg

 

用vim编辑,先按键盘上的i进入输入模式,输入如下:

 

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(1)

 

按Esc退出编辑模式,输入”:wq”(注:引号内全部内容包括” : “),保存并退出。

2、编辑package.xml文件

cd ..
vi package.xml

 

2.1、在 <build_depend>rospy</build_depend> <build_depend>std_msgs</build_depend>
在这些build_depend附近加入:

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

 

注意:如果是indigo版本的ros,exec_depend需要换成run_depend。

 

2.2 同上esc退出编辑模式,输入“:wq”保存并退出。

 

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(2)

 

3、编辑CMakeLists.txt文件

vi CMakeLists.txt

 

3.1、修改find_package(),加上message_generation:

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(3)

 

3.2修改catkin_package(),加上message_runtime:

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(4)

 

3.3修改add_message_files(),加上Complex.msg:

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(5)

 

3.4修改generate_message(),去掉系统生成时加上的注释:

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(6)

 

4、在basic包的src下添加message_publisher.py和message_subscriber.py文件:

cd src
vi message_publisher.py
vi message_subscriber.py

 

分别把代码粘贴进去:

 

message_publisher.py

 

#!/usr/bin/env python
import roslib; roslib.load_manifest('basic')
import rospy
from basic.msg import Complex

from random import random

rospy.init_node('message_publisher')

pub=rospy.Publisher('complex',Complex)

rate=rospy.Rate(2)

while not rospy.is_shutdown():
	msg=Complex()
	msg.real=random()
	msg.imaginary=random()
	pub.publish(msg)
	rate.sleep()

message_subscriber.py

 

#!/usr/bin/env python
import roslib; roslib.load_manifest('basic')
import rospy
from basic.msg import Complex

def callback(msg):
	print 'Real:',msg.real
	print 'Imaginary',msg.imaginary
	print

rospy.init_node('message_subscriber')
sub = rospy.Subscriber('complex', Complex,callback)
rospy.spin()

 

5、打开一个终端运行roscore:

roscore

 

6、返回catkin_ws的根目录,catkin_make编译并运行pub脚本

cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun basic message_publisher.py

 

7、打开另一个终端,运行subscriber.py

rosrun basic message_subscriber.py

 

8、运行结果:

ros机器人编程实践(3.2)- 自定义消息类型发布与接收插图(7)

 

发表评论

后才能评论