赞
踩
对于初学者,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:话题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。