使用 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。
我正在使用我的 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。