rosserial multi-array issue
Here is the relevant parts of my Arduino code:
#include <Arduino.h>
#include "TeensyThreads.h"
// for ROS
#include <ros.h>
#include <std_msgs/Int16.h>
#include <std_msgs/Int16MultiArray.h>
volatile int liDARfront = -1;
volatile int liDARleft = -1;
volatile int liDARright = -1;
// ROS Variables
ros::NodeHandle nh;
std_msgs::Int16 front_msg;
std_msgs::Int16 left_msg;
std_msgs::Int16 right_msg;
std_msgs::Int16MultiArray lidar; //multiarray
ros::Publisher range_front("lidar/range_front", &front_msg);
ros::Publisher range_left("lidar/range_left", &left_msg);
ros::Publisher range_right("lidar/range_right", &right_msg);
ros::Publisher lidar_pub("lidarArray", &lidar); //multiarray
void setup()
{
Serial1.begin(115200); // HW Serial for TFmini Front
Serial2.begin(115200); // HW Serial for TFmini Left
Serial3.begin(115200); // HW Serial for TFmini Right
Serial.begin(115200); // Serial output through USB to computer
delay (100); // Give a little time for things to start
// init ros node
nh.initNode();
nh.advertise(range_front);
nh.advertise(range_left);
nh.advertise(range_right);
// for multiarray
lidar.layout.dim = (std_msgs::MultiArrayDimension *)
malloc(sizeof(std_msgs::MultiArrayDimension) * 2);
lidar.layout.dim[0].label = "lidar";
lidar.layout.dim[0].size = 2;
lidar.layout.dim[0].stride = 1*2;
lidar.layout.data_offset = 0;
lidar.layout.dim_length = 1;
lidar.data_length = 8;
lidar.data = (int *)malloc(sizeof(int)*2);
nh.advertise(lidar_pub);
}
void loop()
{
delay(10); // Don't want to read too often as TFmini samples at 100Hz
Serial.println(liDARfront);
// publish to ROS
front_msg.data = liDARfront;
left_msg.data = liDARleft;
right_msg.data = liDARright;
// collect to one topic
lidar.data[0] = liDARfront;
lidar.data[1] = liDARleft;
lidar.data[2] = liDARright;
range_front.publish( &front_msg );
range_left.publish( &left_msg );
range_right.publish( &right_msg );
lidar_pub.publish( &lidar);
nh.spinOnce();
}
I get an error that reads:
Arduino: 1.8.5 (Linux), TD: 1.41, Board: "Teensy 3.2 / 3.1, Serial, 96 MHz (overclock), Faster, US English"
TFmini: In function 'void setup()':
error: cannot convert 'int*' to 'std_msgs::Int16MultiArray::_data_type* {aka short int*}' in assignment
lidar.data = (int *)malloc(sizeof(int));
^
cannot convert 'int*' to 'std_msgs::Int16MultiArray::_data_type* {aka short int*}' in assignment
any help would be much appreciated!