#include "ros/ros.h" //包含了使用ROS节点的必要文件
#include "std_msgs/String.h" //包含了使用的数据类型
#include "std_msgs/UInt8MultiArray.h"
#include "std_msgs/MultiArrayDimension.h"
#include <sstream>
#include <iostream>
void float2u8Arry(uint8_t *u8Arry, float *floatdata, bool key)//big small
{
uint8_t farray[4];
*(float *)farray = *floatdata;
if (key == true)
{
u8Arry[3] = farray[0];
u8Arry[2] = farray[1];
u8Arry[1] = farray[2];
u8Arry[0] = farray[3];
}
else
{
u8Arry[0] = farray[0];
u8Arry[1] = farray[1];
u8Arry[2] = farray[2];
u8Arry[3] = farray[3];
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "node_a"); //初始化ROS,节点名命名为node_a,节点名必须保持唯一
ros::NodeHandle n; //实例化节点, 节点进程句柄
ros::Publisher pub = n.advertise<std_msgs::UInt8MultiArray>("cloud_point_ai", 5); //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。
ros::Rate loop_rate(20); //设置发送数据的频率为60Hz 60ms
//ros::ok()返回false会停止运行,进程终止。
std_msgs::UInt8MultiArray r_buffer;
int date_len=1000;
//std::cout<<"date_len="<<date_len<<std::endl;
r_buffer.data.resize(date_len);
for(int i=0;i<date_len;i++)
r_buffer.data[i] =0x01;
int i=0;
uint16_t length_all=1000;
float confidence=0.98;
uint8_t farray_[4];
float2u8Arry(farray_,&confidence,0);
r_buffer.data[0]=(length_all)&0xFF;
r_buffer.data[1]=(length_all>>8)&0xFF;
r_buffer.data[2]=farray_[0];
r_buffer.data[3]=farray_[1];
r_buffer.data[4]=farray_[2];
r_buffer.data[5]=farray_[3];
//https://zhuanlan.zhihu.com/p/427757976
while(ros::ok())
{
for(int j=0;j<6; j++)
printf("%02x ", r_buffer.data[j]);
printf("\n");
i++;
ROS_INFO_STREAM("cloud ai");
std::cout<<i<<std::endl;
pub.publish(r_buffer);
ros::spinOnce(); //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
loop_rate.sleep(); //按前面设置的10Hz频率将程序挂起
}
return 0;
}
rtk
#include "ros/ros.h" //包含了使用ROS节点的必要文件
#include "std_msgs/String.h" //包含了使用的数据类型
#include "std_msgs/UInt8MultiArray.h"
#include "std_msgs/MultiArrayDimension.h"
#include <sstream>
#include <iostream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "node_loc"); //初始化ROS,节点名命名为node_a,节点名必须保持唯一
ros::NodeHandle n; //实例化节点, 节点进程句柄
ros::Publisher pub = n.advertise<std_msgs::UInt8MultiArray>("Location_pose", 5); //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。
ros::Rate loop_rate(50); //设置发送数据的频率为50Hz
//ros::ok()返回false会停止运行,进程终止。
std_msgs::UInt8MultiArray r_buffer;
int date_len=12;
//std::cout<<"date_len="<<date_len<<std::endl;
r_buffer.data.resize(date_len);
for(int i=0;i<12;i++)
r_buffer.data[i] =0x01;
int i=0;
while(ros::ok())
{
/*for(int i=0;i<date_len; i++)
printf("%02x ", r_buffer.data[i]);
printf("\n");*/
i++;
ROS_INFO_STREAM("cloud loc");
std::cout<<i<<std::endl;
pub.publish(r_buffer);
ros::spinOnce(); //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
loop_rate.sleep(); //按前面设置的10Hz频率将程序挂起
}
return 0;
}
test float double
#include <iostream>
#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
double nx;
sscanf(argv[1],"%lf",&nx);
unsigned char * b = (unsigned char*)&nx;
for(int i = 0; i<8; i++)
printf("0x%2X ", b[i]);
printf("\n");
float mx;
sscanf(argv[2],"%f",&mx);
unsigned char * mb = (unsigned char*)&mx;
for(int i = 0; i<4; i++)
printf("0x%2X ", mb[i]);
printf("\n");
uint16_t ucYear;
sscanf(argv[3],"%I64u",&ucYear);
unsigned char * ucYear_ = (unsigned char*)&ucYear;
for(int i = 0; i<2; i++)
printf("0x%2X ",ucYear_[i]);
printf("\n");
unsigned char pMem[] = {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3F};
double *p = (double*)pMem;
printf("%lf\r\n",*p);
// 将float转换为16进制
return 0;
}