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

前言

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

实现过程

创建工作区参见上一章博客:
ros机器人编程实践(3.1)-将消息发布在话题上

先看下basic包的文件结构:

cd ~/catkin_ws/src/basic
ls
tree

在这里插入图片描述
ok下面开始操作
1、创建我们的消息类型,也就是创建Complex.msg文件

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

用vim编辑,先按键盘上的i进入输入模式,输入如下:
在这里插入图片描述
按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”保存并退出。
在这里插入图片描述
3、编辑CMakeLists.txt文件

vi CMakeLists.txt

3.1、修改find_package(),加上message_generation:
在这里插入图片描述
3.2修改catkin_package(),加上message_runtime:
在这里插入图片描述
3.3修改add_message_files(),加上Complex.msg:
在这里插入图片描述
3.4修改generate_message(),去掉系统生成时加上的注释:
在这里插入图片描述
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、运行结果:
在这里插入图片描述

发布了53 篇原创文章 · 获赞 5 · 访问量 2208

猜你喜欢

转载自blog.csdn.net/qq_37668436/article/details/104181758