最近在捣鼓我自己制作的IMU模块,STM32通过IIC读取MPU9250的原始数据,然后通过串口发送给ros端,ros端进行解析,并通过话题发布出去!这时我就考虑了,未来可能出现的数据情况,如下:
解算后的姿态角度:
俯仰角 | float64 | pitch |
偏航角 | float64 | yaw |
翻滚角 | float64 | roll |
旋转角 | float64 | w |
原始加速度和角速度的数据:
原始加速度x轴 | int32 | linear_acceleration_raw_x |
原始加速度y轴 | int32 | linear_acceleration_raw_y |
原始加速度z轴 | int32 | linear_acceleration_raw_z |
原始角速度x轴 | int32 | angular_velocity_raw_x |
原始角速度y轴 | int32 | angular_velocity_raw_y |
原始角速度z轴 | int32 | angular_velocity_raw_z |
换算后有物理量的加速度和角速度数据:
加速度x轴 | int32 | linear_acceleration_x |
加速度y轴 | int32 | linear_acceleration_y |
加速度z轴 | int32 | linear_acceleration_z |
角速度x轴 | int32 | angular_velocity_x |
角速度y轴 | int32 | angular_velocity_y |
角速度z轴 | int32 | angular_velocity_z |
决定好具体有啥类型的数据后,开始搞起来!
1、首先创建一个存放message文件的文件夹
2、新建三个msg文件
3、编写message代码
①Imu_data.msg代码:
int32 x
int32 y
int32 z
②Orientation_data.msg代码:
float64 pitch
float64 yaw
float64 roll
float64 w
③imu.msg代码:
Orientation_data orientation
Imu_data linear_acceleration_raw
Imu_data angular_velocity_raw
Imu_data linear_acceleration
Imu_data angular_velocity
分析一下:
首先分别定义了两种类型,一种是int32类型和float64类型,然后通过imu.msg进行添加复用!~
4、配置
①配置package.xml
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
②配置CMakeLists.txt
我们也可以看到生成的消息应该放在msg的文件夹中
5、开始编译
编译完我们看下我们转换后的文件在哪里~
我们可以看到编译完系统给我们转换为.h头文件,到时直接包含头文件即可~
Python的话可以看下这里
6、查看消息的内容~
rosmsg show robot_start/imu
编写代码包含的头文件包含以下即可:
然后在发布话题修改成我们自定义的消息即可~