教程
IMU编程主要分两部分:下位机的控制器获取IMU数据发送给上位机,上位机获取IMU数据之后进行算法处理。
下位机编程
上位机编程
机器人中,上位机一般用ros实现,上位机接收到数据之后,需要进行哪些处理?
1,标准化量程和单位转换
如果下位机给上位机传递的是直接从IMU读取的原始数据,没有经过量程和单位转换,就需要再上位机进行转换。
2,IMU数据发布
sensor_msgs/msg/Imu:
std_msgs/Header headerbuiltin_interfaces/Time stampint32 secuint32 nanosecstring frame_idgeometry_msgs/Quaternion orientationfloat64 x 0float64 y 0float64 z 0float64 w 1
float64[9] orientation_covariance # Row major about x, y, z axesgeometry_msgs/Vector3 angular_velocityfloat64 xfloat64 yfloat64 z
float64[9] angular_velocity_covariance # Row major about x, y, z axesgeometry_msgs/Vector3 linear_accelerationfloat64 xfloat64 yfloat64 z
float64[9] linear_acceleration_covariance # Row major x, y z
[ 0.01, 0.0, 0.0, # x轴方差 0.01 rad^20.0, 0.01, 0.0, # y轴方差 0.01 rad^20.0, 0.0, 0.01 ] # z轴方差 0.01 rad^2
行优先(row-major)存储顺序
在代码中,上述矩阵会被按行展开成一个长度为9的一维数组:
[C_00, C_01, C_02, C_10, C_11, C_12, C_20, C_21, C_22]
协方差矩阵要如何设置:
个人认为需要哦根据IMU的出厂手册设置。