本贴参考自:https://blog.csdn.net/weixin_37661634/article/details/118902745的
IMU+单目相机标定的部分
kalibr官方教程:https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration
一. 打印官方使用的标定板:
官方下载: https://github.com/ethz-asl/kalibr/wiki/downloads 生成标定板的命令: kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.08 --tspace 0.3
这里推荐的是 Aprilgrid 标定板。 https://github.com/ethz-asl/kalibr/wiki/calibration-targets 关于标定板的说明参考文章链接:https://blog.csdn.net/Hanghang_/article/details/10354603 这里有三个参数的说明,标定板格子大小之类的。 我下载的是Aprilgrid 6x6 0.5x0.5 m (unscaled) 使用adobe acrobat pro dc 软件自定义缩放40%打印,A4纸刚好能打印出来 。
原版的参数是: 6X6 tags 6乘6个格子 一个大格子size=5.5cm 一个小格子spacing=1.65cm
40%的缩放: 6X6 tags 一个大格子size=2.2cm 一个小格子spacing=0.66cm 记得打印出来用尺子量一下,以免出现差错。 下载官网提供的yaml格式文件,修改参数,也可以直接用我下面的。
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.022 #size of apriltag, edge to edge [m],大格子边长0.022=2.2cm
tagSpacing: 0.3 #ratio of space between tags to tagSize,小格子边长/大格子边长
然后把打印的标定纸贴在墙上 官方说明:
标定需要三个文件,一个是相机的标定文件,一个是IMU的标定文件,一个是录制的数据包
二.录制数据包
- 打开相机和IMU:roslaunch realsense2_camera rs_camera.launch
并且调节帧率,相机20Hz, IMU200Hz,并分别以/color和/imu为话题名发布
kalibr推荐使用 4Hz 图像帧率,这里使用topic_tools/throttle降低接收频率
rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color
rosrun topic_tools throttle messages /camera/imu 200.0 /imu
- 先把目录移动到刚刚建立的kalibr工作环境目录下。
然后执行 source devel/setup.sh
rosbag record -b 4096 -O dynamic /color /imu
打开rosbag录制命令 3. 上下三次,左右三次,翻转三次,上下平移三次,左右平移三次,前后三次,随机移动多次(任意) 注意:下面的过程需要确保标定板在相机视野中旋转轴部分: pitch轴 向下倾斜: 向上倾斜: Yaw轴 向右倾斜:
向左倾斜:
Roll轴 向右侧翻:
向左侧翻:
平移部分: 向上平移: 向下平移: 向左平移:
向右平移:
向前平移:
向后平移: 接着随机移动多次(任意) 图像和IMU的数据都采集好以后,就可以通过以下命令来生成ROS的bag包格式。 kalibr_bagcreater --folder dataset-dir --output-bag awsome.bag
可以通过rosbag info awsome.bag来检查生成的bag包是不是合格的。
三. 重写yaml文件
同样是用kalibr标定的,camchain-camd435i.yaml,所以直接使用相机yaml文件即可: (1)相机标定的yaml文件
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [-0.14627678771168612, 0.031132819617662677, -0.0016199154527738965,
-0.01257776985511912]
distortion_model: radtan
intrinsics: [259.05353479443266, 256.15264741602005, 290.7955146414971, 234.21114661849504]
resolution: [640, 480]
rostopic: /color
(2)新建imu.yaml 在kalibr工作环境目录下新建imu.yaml文件:
#Accelerometers
accelerometer_noise_density: 2.0477290485501922e-02 #Noise density (continuous-time)
accelerometer_random_walk: 4.2308969579290693e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 2.2488785808195085e-03 #Noise density (continuous-time)
gyroscope_random_walk: 1.5385085422768701e-05 #Bias random walk
rostopic: /imu #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
原文链接:https:
其中以下IMU标定参数已知(标定过程参考:https://blog.csdn.net/Hanghang_/article/details/103546033), 将结果对应地填到以上imu.yaml中去:
Gyr:
avg-axis:
gyr_n: 2.2488785808195085e-03
gyr_w: 1.5385085422768701e-05
Acc:
avg-axis:
acc_n: 2.0477290485501922e-02
acc_w: 4.2308969579290693e-04
四.使用Kalibr进行标定
在Kalibr工作目录下执行 source devel/setup.sh
执行指令:
kalibr_calibrate_imu_camera --target checkerboard.yaml --cam camd455i.yaml --imu imu.yaml --bag dynamic.bag --show-extraction
(个人使用–show-extraction会出现段错误,因此不使用)可以录制2分钟,生成文件名字为:
camchain-imucam-dynamic.yaml
其中T_cam_imu,就是我们需要的外参。
错误:ImportError: No module named scipy.optimize
解决办法:
sudo apt-get install python-scipy
做完这些就可以耐心等待结果了。。。(另一个博主:运行时间会根据你录制数据包的大小和电脑性能而定,我录制了将近两分钟,电脑是四年前的神舟,所以速度较慢,大概用了有半个小时以上,可以去喝杯咖啡再回来看看。) 生成好多个文件,主要关注一个文件: camchain-imucam-dynamic.yaml
Transformation (cam0):
-----------------------
T_ci: (imu0 to cam0):
[[ 0.99579733 0.0648917 0.06462771 -0.01794528]
[-0.06212431 0.99710033 -0.04394886 0.01608132]
[-0.06729222 0.03974921 0.9969412 -0.07784444]
[ 0. 0. 0. 1. ]]
T_ic: (cam0 to imu0):
[[ 0.99579733 -0.06212431 -0.06729222 0.01363058]
[ 0.0648917 0.99710033 0.03974921 -0.01177593]
[ 0.06462771 -0.04394886 0.9969412 0.07947285]
[ 0. 0. 0. 1. ]]
关于参数文件的 使用贴一个说法:原文链接:https://blog.csdn.net/qq_21830903/article/details/111319119 假如都没有问题的话,通过运行kalibr_calibrate_imu_camera,我们就能得到pdf,txt,和yaml3个结果文件。 我们主要关注results-imucam-%BAGNAME%.txt文件,根据这个结果来简单看看我们的标定是否有效。 其中reprojection误差最好不要超过5个像素,T_ic/T_ci矩阵中的位移应该根据设备IMU和Camera的实际位置来,一般应该是厘米或者毫米这样的尺度的数值。 ———————————————— 版权声明:本文为CSDN博主「快乐飞奔的小菜鸡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
关于参数文件中的参数的官方说明:
官方视频中使用的命令: 生成的参数文件和图表(看起来好高大上,又觉得毕业有望了) 泡泡机器人关于标定结果生成的图表的说明:泡泡图表说明 /// 下面的部分有待探索(图片来自官方视频) 打开kalibr_calibration_imu_camera文件注释其中覆盖旧文档的命令 使用了新的标定执行命令生成了看起来更吊的图表
|