ROS发布自定义数组和数据

主要使用std_msgs数据结构

rosmsg show std_msgs

在这里插入图片描述自定义话题消息
1、新建msg文件
2、修改CMakeLists.txt文件
3、修改package.xml文件
4、生成对应头文件
5、编写发布者程序
6、编写接收者程序

1、一个数组+一个浮点数据

cd catkin_ws
mkdir msg && cd msg
gedit test.msg

float32[[]  a
float32     b

2、在find_package中添加geometry_msgs message_generation,
取消add_message_files和FILES以及下面反括号的注释,在下面添加一行mypath.msg
取消generate_messages所在部分的注释,将geometry_msgs添加进去
取消catkin_package所在部分的注释,在std_msgs后面添加message_runtime

find_package(catkin REQUIRED COMPONENTS 
   ...
    message_generation
    )
add_message_files(
 FILES
 test.msg
	)
catkin_package(
  INCLUDE_DIRS include
#  LIBRARIES gazebo_nav
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)
generate_messages(
  DEPENDENCIES
  geometry_msgs
  std_msgs  # Or other packages containing msgs
)

3、在package.xml文件中添加依赖

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

4、
msg头文件在devel/include/功能包名/test.h
5、C++发布者

#include <ros/ros.h>
#include <std_msgs/Float32.h>
#include <功能包名/test.h>

int main(int argc,char** argv)
{
    ros::init(argc,argv,"matrix_pub");
    ros::NodeHandle n;
    ros::Publisher pub = n.advertise<gazebo_nav::matrix_msg>("matrix_test",10);
    ros::Rate loop(10);
    while (ros::ok())
    {
        gazebo_nav::matrix_msg msg;
        msg.a = {1,2,3};
        msg.b =4.0;        
        pub.publish(msg);
        ros::spinOnce();
        loop.sleep();
    }
    return 0;

6、C++订阅者

#include <ros/ros.h>
#include <功能包名/test.h>
#include <std_msgs/Float32.h>

std::vector<int> v1;
float32 b;
void matrix_CB(const gazebo_nav::matrix_msg& msg)
{
    ROS_INFO("this is matrix msg sub:");
    for(int i=0;i < msg.a.size();i++)
    {
        v1.push_back(msg.a[i]);
    }
		b.push_back(msg.b)
}
int main(int argc,char** argv)
{
    ros::init(argc,argv,"matrix_test_sub");
    ros::NodeHandle n;
    ros::Subscriber sub = n.subscribe("matrix_test",10,matrix_CB);
    ros::Rate r(10);
    ros::spin();
    return 0;
}

python发布者

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from 功能包名.msg import Test
from random import random

rospy.init_node('test_publisher')

pub=rospy.Publisher('test',Test,queue_size=5)

rate =rospy.Rate(2)

while not rospy.is_shutdown():
    msg = Test()
    msg.a =[(random(),random(),random(),random()),(random(),random(),random(),random())]
    msg.b = 3.3
    pub.publish(msg.ccc)
    rate.sleep()

python订阅者

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from 功能包名.msg import Test
from random import random
def pointCallback(msg):
		a = msg.a
		b = msg.b
def point_subscriber():
    rospy.init_node('test_subscribe')
    rospy.Subscriber('test',Test,pointCallback)
    rospy.spin()

if __name__ == '__main__':
    point_subscriber()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞同学

随时为您服务

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值