简要:
使用imu_tk以及imu_utils对imu标定。
一、imu_tk标定
1. 标定流程
使用对应的ros_wrapper来加载数据。其数据运动过程参考对应git上的readme,
Record a bag file with IMU topic (e.g.
rosbag record -O imu /imu
).Procedure:
- Left the IMU static for 50 seconds.
- Rotate the IMU and then lay it in a different attitude.
- Wait for at least 1 seconds.
- Have you rotated the IMU 36 ~ 50 times? If not, go back to step 2.
- Done.
tips:变换imu姿态的过程中,最好将IMU固定到某个有重量物体上旋转静止,单纯用手旋转会有轻微的抖动,感觉不太好;其中第三条等待1s这个,不如多等一会,5s左右合适;频率不要太低,一开始10hz导致计算总是失败。
从代码上看,系统首先计算整个bag数据的方差,然后利用这个方差(×N)来寻找静止时间段,最少寻找12(min_num_intervals_)个静止的时间段才会进行下一步计算。(剩余的代码没有看,因为我主要是这步错了,所以主要看得这一步。)
对应会给出如下几个矩阵作为结果,最终的结果会打印在终端:
加速度计
Misalignment Matrix
1 0.00931641 0.0365531
0 1 -0.00443462
-0 0 1
Scale Matrix
0.998645 0 0
0 0.998098 0
0 0 0.996958
Bias Vector
0.0519509
0.132995
-0.0129506Accelerometers calibration: inverse scale factors:
1.00136
1.00191
1.00305
角速度计
Gyroscopes calibration: residual 0.00461895
Misalignment Matrix
1 0.00365644 0.0296156
-0.00776619 1 0.00522669
-0.0200886 0.0053562 1
Scale Matrix
0.999833 0 0
0 1.01073 0
0 0 1.00325
Bias Vector
-9.35939e-05
4.13307e-05
-0.00040904Gyroscopes calibration: inverse scale factors:
1.00017
0.989384
0.996757
会有一些图显示中间结果,没细看,感觉就是找的静止时间段
结果使用主要就是参考这两个公式吧。
加速度计:
角速度计:
其中,为矫正后的输出,为未矫正前的输入,为白噪声。为三轴不互相垂直带来的误差,对应上述结果中的Misalignment Matrix;为scale的误差,对应上述结果中的Scale Matrix;为bias,对应上述结果中的Bias Vector。角速度计公式与结果对应关系和加速度计是一样的。
tips:估结果准确性的话,目前的想法是可以参考迭代结果的误差。
2. 算法原理
先参考这篇吧,回头有空重读论文再重写(估计难了~) 。论文在此。
二、imu_utils标定
1.标定流程
标定流程比较简单,采集一个静置120分钟的imu数据,然后使用roslaunch imu_utils ***.launch进行标定。
2. 算法原理
(待写)