ros uint8 send

#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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值