当前位置:   article > 正文

stm32与ros通信,imu_stm32 485+ros通讯

stm32 485+ros通讯

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

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

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

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

  1. while (1)
  2. {
  3. /* USER CODE END WHILE */
  4. // dmp_getdata();
  5. // MPU6050_Read_Temp();
  6. // imu_data1.pit=My_Mpu6050.pitch;
  7. // imu_data1.rol=My_Mpu6050.roll;
  8. // imu_data1.yaw=My_Mpu6050.yaw;
  9. HAL_Delay(20);
  10. DataTrans();
  11. /* USER CODE BEGIN 3 */
  12. }
  13. /* USER CODE END 3 */

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

我的stm32_to_ros_datrans.h文件

  1. #include "main.h"
  2. typedef union
  3. {
  4. float data;
  5. uint8_t data8[4];
  6. } data_u;
  7. //struct imu_data imu_data;
  8. typedef struct{
  9. float yaw;
  10. float pit;
  11. float rol;
  12. }imu_data ;
  13. //void DataTrans(struct imu_data imu_data);
  14. void DataTrans(void);

我的stm32_to_ros_datrans.c文件

  1. #include "stm32_to_ros_datrans.h"
  2. #include "usart.h"
  3. #include "main.h"
  4. #include "inv_mpu.h"
  5. #include "inv_mpu_dmp_motion_driver.h"
  6. #include "my_mpu6050.h"
  7. //void DataTrans(struct imu_data imu_data)
  8. imu_data imu_data1;
  9. void DataTrans(void)
  10. {
  11. // imu_data1.pit=My_Mpu6050.pitch;
  12. // imu_data1.rol=My_Mpu6050.roll;
  13. // imu_data1.yaw=My_Mpu6050.yaw;
  14. //读取
  15. dmp_getdata();
  16. MPU6050_Read_Temp();
  17. uint8_t _cnt = 0;
  18. data_u _temp; // 声明一个联合体实例,使用它将待发送数据转换为字节数组
  19. uint8_t data_to_send[100]; // 待发送的字节数组
  20. data_to_send[_cnt++]=0xAA;
  21. data_to_send[_cnt++]=0xBB;
  22. // 将要发送的数据赋值给联合体的float成员
  23. // 相应的就能更改字节数组成员的值
  24. //_temp.data = imu_data1.yaw;
  25. _temp.data = My_Mpu6050.yaw;
  26. data_to_send[_cnt++]=_temp.data8[0];
  27. data_to_send[_cnt++]=_temp.data8[1];
  28. data_to_send[_cnt++]=_temp.data8[2];
  29. data_to_send[_cnt++]=_temp.data8[3]; // 最高位
  30. // _temp.data = imu_data1.pit;
  31. _temp.data = My_Mpu6050.pitch;
  32. data_to_send[_cnt++]=_temp.data8[0];
  33. data_to_send[_cnt++]=_temp.data8[1];
  34. data_to_send[_cnt++]=_temp.data8[2];
  35. data_to_send[_cnt++]=_temp.data8[3]; // 最高位
  36. // _temp.data = imu_data1.rol;
  37. _temp.data = My_Mpu6050.roll;
  38. data_to_send[_cnt++]=_temp.data8[0];
  39. data_to_send[_cnt++]=_temp.data8[1];
  40. data_to_send[_cnt++]=_temp.data8[2];
  41. data_to_send[_cnt++]=_temp.data8[3]; // 最高位
  42. // 串口发送
  43. HAL_UART_Transmit(&huart2, data_to_send, _cnt, 0xFFFF);
  44. }

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

msg:话题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/661269
推荐阅读
相关标签
  

闽ICP备14008679号