前言
本文主要实现两级ROS自定义消息,方便开发者在实际开发中实现更多消息格式需求。
一、自定义消息格式
1、F1.msg
float64 x
float64 y
float64 w
float64 h
int64 id
#int64 num
float64 probability
2、F2.msg
F1[] object
int16 num
这里面的F2.msg将F1.msg作为一个类,并在后续通过类数组的形式存储消息数据,实现多个对象的数据传输。
二、消息传输实现
1、cmakeList设置
代码如下(示例):
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find otEXPORTED_TARGETSher catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
## Generate messages in the 'msg' folder
add_message_files(
FILES
F1.msg
F2.msg
)
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs
)
###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES communication_yolo
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
2、代码测试
#!/usr/bin/env python
import rospy
from communication_yolo.msg import F1
from communication_yolo.msg import F2
from std_msgs.msg import String
rospy.init_node("msg_ros") #初始化Ros节点
pub = rospy.Publisher("msg_test",F2,queue_size=100) #创建发布对象,指定发布方的话题和消息类型
while(1):
msg_pub2=F2()
msg_pub2.num=0
msg=0
j=0
n=4 #假设一共有4个对象
while j < n:
msg_pub=F1()
msg_pub.x=msg+1
msg_pub.y=msg+2
msg_pub.w=msg+3
msg_pub.h=msg+4
msg_pub.id=j
j=j+1
msg=msg+10
msg_pub2.object.append(msg_pub)
print(msg_pub2)
pub.publish(msg_pub2)
rospy.spin()
py代码配置略,ros启动略
效果展示
在工作空间下运行
source ./devel/setup.bash
rosrun communication_yolo msgtest.py
发布方效果图:
在工作空间下运行,接收发布方消息
source ./devel/setup.bash
rostopic echo msg_test
效果图:
上图为发布方,下图为接收方
总结
相对来说,整体操作不难,但学习时在网络上关于自定义消息的博客较少,特别是这类数组自定义消息,所以分享出来方便大家交流讨论。