欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-01 08:50:03
...

前言

《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)-自定义消息类型发布与接收
按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)-自定义消息类型发布与接收
3、编辑CMakeLists.txt文件

vi CMakeLists.txt

3.1、修改find_package(),加上message_generation:
ros机器人编程实践(3.2)-自定义消息类型发布与接收
3.2修改catkin_package(),加上message_runtime:
ros机器人编程实践(3.2)-自定义消息类型发布与接收
3.3修改add_message_files(),加上Complex.msg:
ros机器人编程实践(3.2)-自定义消息类型发布与接收
3.4修改generate_message(),去掉系统生成时加上的注释:
ros机器人编程实践(3.2)-自定义消息类型发布与接收
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)-自定义消息类型发布与接收

相关标签: 学习记录