关于需要下载的环境和具体的包参考【1】
记录标定过程:
一、IMU标定
①录制imu的rosbag
rosbag record /JpImu -O imu.bag
②标定
rosbag play -r 200 imu.bag
roslaunch imu_utils myimu.launch
#myimu.launch中的内容
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/JpImu"/>
<param name="imu_name" type="string" value= "Jumper"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
结果
标定好的参数包括各方向的随机噪声与随机游走
acc加速度计 gyr陀螺仪
acc_n 加速度计测量噪音标准偏差
gyr_n 陀螺仪测量噪音标准偏差
acc_w 加速计偏置随机工作噪声标准偏差
gyr_w 陀螺仪偏差随机工作噪音标准偏差
g_norm重力大小
%YAML:1.0
---
type: IMU
name: Jumper
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 1.6297593109783825e-04
gyr_w: 7.9880976154197437e-07
x-axis:
gyr_n: 1.2154791769264959e-04
gyr_w: 1.0460312155296074e-06
y-axis:
gyr_n: 2.6550656064572141e-04
gyr_w: 1.1492813149654235e-06
z-axis:
gyr_n: 1.0187331495514383e-04
gyr_w: 2.0111675413089223e-07
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 2.1427082834357042e-02
acc_w: 3.7509524328926784e-04
x-axis:
acc_n: 1.7444512899695036e-02
acc_w: 2.9017057410089543e-04
y-axis:
acc_n: 1.7125722308117455e-02
acc_w: 2.9807899892436837e-04
z-axis:
acc_n: 2.9711013295258625e-02
acc_w: 5.3703615684253967e-04
二、相机标定
①相机标定录制rosbag前需要降低图像帧率
将<intopic>上的消息到指定的频率
rosrun topic_tools throttle messages <intopic> <msgs_per_sec> [outtopic]
# intopic: 订阅的话题
# msgs_per_sec: 频率,每秒允许通过的最大消息数
# outtopic: throttle节点发布的话题名,可以省略,默认为intopic_throttle
rosrun topic_tools throttle messages /JpImage 4.0 /jpimage
也可以通过throttle修改话题名称 ,参考【3】
②录制相机的rosbag
rosbag record /jpimage -O camera.bag
标定板选用二维码aprilgrid
③相机标定
rosrun kalibr kalibr_calibrate_cameras --bag cam.bag --topics /jpimage --models pinhole-radtan --target apriltag.yaml --show-extraction
###############
--bag后面是录制的数据包的路径;
--topics后面是待标定的话题数据(已经控制频率后的);
--models后面是相机/畸变模型,有几目相机就要写几个,这里是两个针孔模型相机,所以是两个pinhole-radtan;相应地,其他支持的模型可以查看https://github.com/ethz-asl/kalibr/wiki/supported-models。
--target后面是标定板参数文件的路径;
--show-extraction是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要;
--bag-from-to后面是想要使用数据时间段的起始时间和结束时间,单位:秒(s),这个参数可以剔除掉刚开始录制和结束时一些出入视野等画面。
④相机标定结果
cam-report-cam.pdf
包含绘制的图片和标定的参数。cam-results-cam.txt
以文本文件储存的标定结果。cam-camchain.yaml
以YAML格式储存的标定结果。它可以直接用来作为相机-IMU校正的输入。
三、联合标定
相机-IMU联合标定总共需要准备好4个文件,分别是包含标定相机和IMU数据的rosbag,IMU内参yaml,相机内外参yaml,标定板yaml.
①录制相机和imu的rosbag
注意,参考【2】:
- 录制数据包时,充分激励IMU在三轴平移和三轴旋转上的运动;
- 尽可能减少震动,尤其是在拿起和放下传感器时(关于这点,可以使用参数--bag-from-to指定数据包使用的时间,但在过程中依然要减少传感器的震动)
- 通过保持较低的快门时间和良好的照明等来尽量减少图片的运动模糊。
#录制数据包时同样也要控制图像数据频率。
rosrun topic_tools throttle messages /JpImage 4.0 /jpimage
rosbag record /jpimage /JpImu -O cam-imu.bag
②IMU内参yaml、相机内外参yaml、标定板yaml
1)联合标定中imu内参yaml格式如下(kalibr_imu.yaml)
#Accelerometers
accelerometer_noise_density: 2.1427082834357042e-02 #Noise density (continuous-time)
accelerometer_random_walk: 3.7509524328926784e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 1.6297593109783825e-04 #Noise density (continuous-time)
gyroscope_random_walk: 7.9880976154197437e-07 #Bias random walk
rostopic: /JpImu #the IMU ROS topic
update_rate: 100.0 #Hz (for discretization of the values above)
2)相机内外参yaml用之前得到的cam-camchain.yaml
3) 标定板yaml apriltag.yaml
③联合标定
rosrun kalibr kalibr_calibrate_imu_camera --target dynamic/apriltag.yaml --cam dynamic/cam-camchain.yaml --imu dynamic/kalibr_imu.yaml --bag dynamic/cam_imu.bag --bag-from-to 5 85 --show-extraction --imu-models scale-misalignment --timeoffset-padding 0.1
######
--target后面是标定板路径;
--cam后面相机内外参路径;
--imu后面是对应格式的imu内参路径;
--bag后面是录制的数据包路径;
--bag-from-to后面是想要使用数据时间段的起始时间和结束时间,单位:秒(s)
--show-extraction是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要。
--imu-models imu模型设置
--timeoffset-padding 0.1 不加可能导致优化失败
④结果