How to use rospublisher to publish a byte value
I did a s.bus reading on ardiuno, it can work perfectly when i link to ROS, but there is problem with my code:
#include <ArduinoHardware.h>
#include <ros.h>
#include <std_msgs/String.h>
#include <FUTABA_SBUS.h>
#include <Streaming.h>
int maximumRange = 400; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance
byte localdata[25] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
double Kp=0, Ki=0, Kd=1;
double Setpoint, Input, Output;
int i=0;
FUTABA_SBUS sBus;
ros::NodeHandle nh;
std_msgs::String str_msg;
ros::Publisher chatter("sbusdata", &str_msg);
void sbus_encoder()
{
localdata[0] = sBus.sbusData[0];
localdata[1] = (sBus.channels[0] );
localdata[2] = (sBus.channels[0]>>8 | sBus.channels[1]<<3);
localdata[3] = (sBus.channels[1]>>5 | sBus.channels[2]<<6);
localdata[4] = (sBus.channels[2]>>2);
localdata[5] = (sBus.channels[2]>>10 | sBus.channels[3]<<1);
localdata[6] = (sBus.channels[3]>>7 | sBus.channels[4]<<4);
localdata[7] = (sBus.channels[4]>>4 | sBus.channels[5]<<7);
localdata[8] = (sBus.channels[5]>>1);
localdata[9] = (sBus.channels[5]>>9 | sBus.channels[6]<<2);
localdata[10] = (sBus.channels[6]>>6 | sBus.channels[7]<<5);
localdata[11] = (sBus.channels[7]>>3);
localdata[12] = (sBus.channels[8] );
localdata[13] = (sBus.channels[8]>>8 | sBus.channels[9]<<3);
localdata[14] = (sBus.channels[9]>>5 | sBus.channels[10]<<6);
localdata[15] = (sBus.channels[10]>>2);
localdata[16] = (sBus.channels[10]>>10 | sBus.channels[11]<<1);
localdata[17] = (sBus.channels[11]>>7 | sBus.channels[12]<<4);
localdata[18] = (sBus.channels[12]>>4 | sBus.channels[13]<<7);
localdata[19] = (sBus.channels[13]>>1);
localdata[20] = (sBus.channels[13]>>9 | sBus.channels[14]<<2);
localdata[21] = (sBus.channels[14]>>6 | sBus.channels[15]<<5);
localdata[22] = (sBus.channels[15]>>3);
localdata[23] = sBus.sbusData[23]; //flag
localdata[24] = 0x00;
for(int i=0;i<25;i++)
{
//Serial1.write(localdata[i]);
str_msg.data = localdata[i];
chatter.publish(&str_msg);
}
}
void setup(){
sBus.begin();
Serial.begin(115200);
nh.initNode();
nh.advertise(chatter);
// sBus.channels[0]=990;
}
void loop(){
sBus.FeedLine();
sBus.PassthroughSet(0);
if (sBus.toChannels == 1){
//sBus.UpdateServos();
sBus.UpdateChannels();
sBus.toChannels = 0;
if(sBus.channels[5]>1500)//limit
{
if(sBus.channels[0]>1000)//throttle limit
{ sBus.channels[0]=1000;}
if(sBus.channels[1]<940)//left yaw limit
{sBus.channels[1]=940;}
if(sBus.channels[1]>1040)//right yaw limit
{sBus.channels[1]=1040;}
if(sBus.channels[2]<940)//pitch infront limit
{sBus.channels[2]=940;}
if(sBus.channels[2]>1040)//pitch backwards limit
{sBus.channels[2]=1040;}
if(sBus.channels[3]<940)//roll left limit
{sBus.channels[3]=940;}
if(sBus.channels[3]>1040)//roll right limit
{sBus.channels[3]=1040;}
}
sbus_encoder();
}
}
This is the error shown:
sbus_example.pde: In function ‘void sbus_encoder()’:
sbus_example.pde:56:35: error: invalid conversion from ‘byte {aka unsigned char}’ to ‘std_msgs::String::_data_type {aka const char*}’ [-fpermissive]
How can i convert this code so that the publisher ...