stm32与ros通信,imu

对于初学者,ros与stm32的通信网上的教程都不太友好,所以看我的把

关于这篇博客,其实可以参考我的前三篇,这只是一个综合

将dmp库的包和ros与stm32通信的文件加入路径,相关文件包含头文件

在我的mian()函数的while中,我的发送函数无参数

  while (1)
  {
    /* USER CODE END WHILE */
//      dmp_getdata();
//      MPU6050_Read_Temp();
//      imu_data1.pit=My_Mpu6050.pitch;
//      imu_data1.rol=My_Mpu6050.roll;
//      imu_data1.yaw=My_Mpu6050.yaw;
	  HAL_Delay(20);
      DataTrans();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

注意,DataTrans()里面不要有hal_delay();不然就无法向ros传输值

我的stm32_to_ros_datrans.h文件

#include "main.h"

typedef union
{
	float data;
	uint8_t data8[4];
} data_u;

//struct imu_data imu_data;
typedef struct{
    float yaw;
    float pit;
    float rol;
}imu_data ;


//void DataTrans(struct imu_data imu_data);
void DataTrans(void);

我的stm32_to_ros_datrans.c文件

#include "stm32_to_ros_datrans.h"
#include "usart.h"
#include "main.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "my_mpu6050.h"
//void DataTrans(struct imu_data imu_data)
imu_data imu_data1;
void DataTrans(void)
{
//      imu_data1.pit=My_Mpu6050.pitch;
//      imu_data1.rol=My_Mpu6050.roll;
//      imu_data1.yaw=My_Mpu6050.yaw;
    //读取
    dmp_getdata();
    MPU6050_Read_Temp();
	uint8_t _cnt = 0;
	data_u _temp; // 声明一个联合体实例,使用它将待发送数据转换为字节数组
    uint8_t data_to_send[100]; // 待发送的字节数组
	
	data_to_send[_cnt++]=0xAA;
	data_to_send[_cnt++]=0xBB;
		
	// 将要发送的数据赋值给联合体的float成员
	// 相应的就能更改字节数组成员的值
	//_temp.data = imu_data1.yaw;
    _temp.data = My_Mpu6050.yaw;
	data_to_send[_cnt++]=_temp.data8[0];
	data_to_send[_cnt++]=_temp.data8[1];
	data_to_send[_cnt++]=_temp.data8[2];
	data_to_send[_cnt++]=_temp.data8[3]; // 最高位
	
//	_temp.data = imu_data1.pit;
    _temp.data = My_Mpu6050.pitch;
	data_to_send[_cnt++]=_temp.data8[0];
	data_to_send[_cnt++]=_temp.data8[1];
	data_to_send[_cnt++]=_temp.data8[2];
	data_to_send[_cnt++]=_temp.data8[3]; // 最高位
	
   // _temp.data = imu_data1.rol;
   _temp.data = My_Mpu6050.roll;
	data_to_send[_cnt++]=_temp.data8[0];
	data_to_send[_cnt++]=_temp.data8[1];
	data_to_send[_cnt++]=_temp.data8[2];
	data_to_send[_cnt++]=_temp.data8[3]; // 最高位
	
    // 串口发送
	HAL_UART_Transmit(&huart2, data_to_send, _cnt, 0xFFFF); 
}

关于ros端,可以参考我的前面的ros与stm32通信的代码,是一样的,这里就不多介绍了

msg:话题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值