D435相机+pixhwak飞控IMU校准(内参与外参)

前言

最近复刻浙大的自主空中机器人项目,中间遇到很多问题,一个一个解决。按照视频教学的方法,基本里程计不容易飘,但还是想做一下网上流传久远的kalibr标定。主要是查阅资料的时候发现,外参矩阵越精确,VINS效果越好,那么开搞!

D435相机内参标定

1、前置工作
参考该文章,下载好标定板等需要的文件,看两遍视频
2、驱动realsense,启动px4

roslaunch realsense2_camera rs_camera.launch
roslaunch mavros px4.launch

查看话题,找到需要的话题,这些懂ros基础的应该没问题。
3、录包
按照视频教的动作录制

rosbag record -O stereo_calibra.bag /camera/infra1/image_rect_raw /camera/infra2/image_rect_raw /mavros/imu/data /mavros/imu/data_raw

stereo_calibra.bag自己起的包名,/camera/infra1/image_rect_raw /camera/infra2/image_rect_raw /mavros/imu/data /mavros/imu/data_raw 是话题名字
还有上文提到降低话题频率,我感觉不用降低,标定又不是实时跑程序,当然是越准确越好!
如有理解错误,评论指出!
4、运行标定程序
添加环境变量:

source devel/setup.bash

运行标定程序:

rosrun kalibr kalibr_calibrate_cameras --bag stereo_calibra.bag --topics /camera/infra1/image_rect_raw /camera/infra2/image_rect_raw  --models pinhole-equi pinhole-equi --target /home/liuzao/april_6x6_80x80cm.yaml

这里特别注意路径问题,我运行几次都报错了,最后把前面录制的stereo_calibra.bag放在Kalibr_ws/下才好,这是我编译kalibr的工作空间

报错1:
有一个类型的报错,报错信息没有截图,但按照提示能解决
在这里插入图片描述
报错2:
RuntimeError: [CameraChainParameters Reader]: Could not write configuration to camchain-/home/liuzao/stereo_calibra.yaml
这个错误就很烦了,是路径的问题,折腾了几次,多次尝试第四步的命令,最后才解决。

pixhwak IMU内参标定

整体也是参考上文链接,踩过的坑我写一下。
运行launch文件后,即执行这个命令后

roslaunch imu_utils px4_imu.launch

在这里插入图片描述

窗口出现wait for imu data.
千万不要以为程序没跑起来,实际上是程序没有回馈信息,但是在跑。
如果想验证一下,可以把max_time_min设置成1,那么立刻就能看到效果了。
正确应该设置的数字,应该和我图片里面的注释一致。

相机和IMU联合标定

下载一个标准模板,里面的分类如下
相机内参标定的文件:cam_april-camchain.yaml stereo_calibra.bag(这个是自己录制的,不是下载的)
IMU内参标定的文件:imu_adis16448.yaml
标定板文件:april_6x6_80x80cm.yaml

将模板文件里面的参数换成自己前面测得的参数!!!

bag-from-to是截取包的这段运行时间,可以按照实际估摸着来,一般去头去尾5s,像我时长91s,所以截取5~86s。
进入Kalibr_ws文件夹,执行命令:
在这里插入图片描述
放这张图是为了对照命令和文件的位置,因为新手很容易因为这个搞晕,有一些文件是其他地方复制过来的。

rosrun kalibr kalibr_calibrate_imu_camera --target april_6x6_80x80cm.yaml --cam cam_april-camchain.yaml --imu imu_adis16448.yaml --bag stereo_calibra.bag --bag-from-to 5 86

重点来了!!!
cam_april-camchain.yaml 应该长下面这个样子,不然会报错,我之前少了T_cn_cnm1矩阵,结果报错说找不到基线。
在这里插入图片描述

错误1:
RuntimeError: [CameraChainParameters Reader]: invalid camera baseline (cam1 in cam_april-camchain.yaml)
这个就是上面找不到基线的错误!

参考链接

https://blog.csdn.net/qinqinxiansheng/article/details/108629530
https://zhuanlan.zhihu.com/p/309287821
http://admin.guyuehome.com/34592

猜你喜欢

转载自blog.csdn.net/private_Jack/article/details/131122949