使用 Rosserial 发布数组时出现问题

Problem Publishing an Array with Rosserial

我正在使用我的 arduino 发布一个简单的数组。这是我正在使用的代码:

#include <ros.h>
#include <std_msgs/Int16MultiArray.h>
ros::NodeHandle  nh;
int value[2]={1,6};
std_msgs::Int16MultiArray str_msg;
ros::Publisher chatter("uno", &str_msg);
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
void loop()
{
str_msg.data = value[2];
str_msg.data_length = 2;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}

此代码在 Arduino 上编译但 returns 以下消息:

warning: invalid conversion from 'int' to 'std_msgs::Int16MultiArray::_data_type* {aka int*}' [-fpermissive] str_msg.data = value[2];

此外,当我 运行 在我的终端上回显时,我收到了错误的数组。像这样:

layout: 
dim: []
data_offset: 0
data: [30, 0]

我该如何解决这个问题?非常感谢!

编辑: 感谢 Fruchtzwerg 的帮助,我发现了这个错误。下面的代码就是答案。

#include <ros.h>
#include <std_msgs/Int16MultiArray.h>
ros::NodeHandle  nh;
int value[2]={1,6};
std_msgs::Int16MultiArray str_msg;
ros::Publisher chatter("uno", &str_msg);
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
void loop()
{
str_msg.data = value;
str_msg.data_length = 2;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}

您正在尝试设置 str_msg.data 的值,但它是一个数组而不是单个字段。所以你也需要在这里设置一个索引:

str_msg.data[0] = value[0];
str_msg.data[1] = value[1];

如果以后有更多的字段,可以在这里简单地使用一个memcopy。