ROS自定义嵌套数组消息,实现多对象数据传输


前言

本文主要实现两级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

效果图:
在这里插入图片描述
上图为发布方,下图为接收方

总结

相对来说,整体操作不难,但学习时在网络上关于自定义消息的博客较少,特别是这类数组自定义消息,所以分享出来方便大家交流讨论。

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值