std_msgs::UInt8MultiArray发布数组

#include "ros/ros.h"
#include "std_msgs/Float32.h"
#include <sstream>
#include <iostream>
#include "std_msgs/UInt8MultiArray.h"
#include "std_msgs/MultiArrayDimension.h"
using namespace std;
int main(int argc, char **argv)
{

  ros::init(argc, argv, "talker");
  ros::NodeHandle n;


  ros::Publisher chatter_pub = n.advertise<std_msgs::UInt8MultiArray>("chatter", 1000);
  ros::Rate loop_rate(10);
  while (ros::ok())
  {
	std_msgs::MultiArrayLayout msg;
 
const unsigned int data_sz = 10;
std_msgs::UInt8MultiArray m;

m.layout.dim.push_back(std_msgs::MultiArrayDimension());
m.layout.dim[0].size = data_sz;
m.layout.dim[0].stride = 1;
m.layout.dim[0].label = "bla";
cout<<"==========================="<<endl;

// only needed if you don't want to use push_back
m.data.resize(data_sz);
m.data[0] = 2;
m.data[1] = 1;



 chatter_pub.publish(m);  
 ros::spinOnce();

 loop_rate.sleep();

  }


  return 0;
}



  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
std_msgs::UInt8MultiArrayROS中的一种消息类型,代表了一个无符号8位整数数组。下面是如何在ROS中使用它进行发布和订阅的示例代码。 首先,在发布方,我们需要创建一个ros::Publisher对象来发布std_msgs::UInt8MultiArray类型的消息。假设我们要发布一个包含10个元素的UInt8MultiArray,可以按照以下方式创建并填充它: ``` #include <ros/ros.h> #include <std_msgs/UInt8MultiArray.h> #include <vector> int main(int argc, char **argv) { ros::init(argc, argv, "my_publisher"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<std_msgs::UInt8MultiArray>("my_topic", 10); std_msgs::UInt8MultiArray msg; std::vector<uint8_t> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; msg.data = data; ros::Rate loop_rate(10); while (ros::ok()) { pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); } return 0; } ``` 在上述代码中,我们创建了一个名为“my_publisher”的节点,并通过ros::Publisher对象发布了名为“my_topic”的主题。我们还填充了一个名为msg的std_msgs::UInt8MultiArray消息,其中包含10个元素的数组。在while循环中,我们每秒发布这个消息10次。 接下来,在订阅方,我们需要创建一个ros::Subscriber对象来接收std_msgs::UInt8MultiArray类型的消息。假设我们要接收来自“my_topic”主题的消息,可以按照以下方式创建并填充它: ``` #include <ros/ros.h> #include <std_msgs/UInt8MultiArray.h> void myCallback(const std_msgs::UInt8MultiArray::ConstPtr& msg) { ROS_INFO("Received %zu elements", msg->data.size()); for (uint8_t d : msg->data) { ROS_INFO("%d", d); } } int main(int argc, char **argv) { ros::init(argc, argv, "my_subscriber"); ros::NodeHandle nh; ros::Subscriber sub = nh.subscribe<std_msgs::UInt8MultiArray>("my_topic", 10, myCallback); ros::spin(); return 0; } ``` 在上述代码中,我们创建了一个名为“my_subscriber”的节点,并通过ros::Subscriber对象订阅了名为“my_topic”的主题。我们还定义了一个名为myCallback的回调函数,当收到消息时将被调用。在回调函数中,我们使用ROS_INFO打印收到的数组的大小和每个元素的值。 最后,我们在main函数中调用ros::spin(),以等待消息的到来并调用回调函数。 运行发布方和订阅方的节点,您应该能够在订阅方终端中看到收到的消息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值