【命令行记录】
roscore
mynt相机发布topic
Build
cd
make ros
#Run
source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper mynteye.launch
#With RViz to preview
source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper display.launch
以上命令链接https://github.com/slightech/MYNT-EYE-S-SDK/tree/master/wrappers/ros
使用rosbag记录.bag文件(录制数据子集)
rosbag record -O newbag /mynteye/left/image_raw /mynteye/right/image_raw /mynteye/left_rect/image_rect /mynteye/right_rect/image_rect
kalibr 标定 mynt双目相机
在kalibr_workspace目录下
kalibr_calibrate_cameras --target test/checkerboard_11x7_22x22cm.yaml --bag test/newbag.bag --models pinhole-equi pinhole-equi --topics /mynteye/left_rect/image_rect /mynteye/right_rect/image_rect
如果kalibr_calibrate_cameras command not found,则需要设置环境
source ~/kalibr_workspace/devel/setup.bash
设置环境参考链接为https://blog.csdn.net/snnily/article/details/73107471?utm_source=blogxgwz7
出现[ERROR] [1542119711.427210]: [TargetViewTable]: Tried to add second view to a given cameraId & timestamp. Maybe try to reduce the approximate syncing tolerance.的问题,估计该问题是record得到的bag文件中camera的时间戳不一致导致,解决方法参照该博客:双目内外参数标定
即:
ROS 提供了改变 topic 发布频率的节点throttle, (通常设备采集的频率为 20-60 hz, 这会使得标定的图像过多, 而导致计算量太大. 最好将ros topic的频率降低到4hz左右进行采集.)指令如下 :
rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /left
rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /right
对左右目的ros topic降低频率后就可以制作bag了
rosbag record -O stereo_calibra.bag /left /right
采集好数据集以后, 就可以用已经安装好的 Kalibr 标定双目相机了, 指令如下:
source ros_ws/kalibr/devel/setup.bash
kalibr_calibrate_cameras --bag /home/heyijia/stereo_calibra.bag --topics /left /right --models pinhole-radtan pinhole-radtan --target /home/heyijia/april_6x6_80x80cm_A0.yaml
标定成功最终会得到几个输出文件。
report-imucam-%BAGNAME%.pdf: Report in PDF format. Contains all plots for documentation.
results-imucam-%BAGNAME%.txt: Result summary as a text file.
camchain-imucam-%BAGNAME%.yaml: 这个文件是在输入文件camchain.yaml基础上增加了标定后的cam-imu信息的结果文件。我们想要的T_cam_imu矩阵就在这里。
因为可能存在的人为的安装问题,真实的IMU到相机的的转移矩阵可能不确定.由于没有准确的判定准则,故当前标定的结果,主要基于以下两个方面:
* 真实的IMU坐标系和相机坐标系的转换,即相机和IMU的物理距离
* 标定结果的稳定性上
标定的验证没有成功
验证方法:可以使用calibration validator进行标定的验证,原理是对重投影误差进行量化分析。使用上一步骤的camera标定结果以及标定板的yaml文件,具体命令如下:(参考链接)
kalibr_camera_validator --cam camchain.yaml --target target.yaml
最后的--bag_from_to是选取地5-45s的bag数据,去除了拾取防止设备产生的抖动部分影响。我们建议进行多组标定之后将标定结果进行最佳无偏估计,不建议对R部分直接取平均值,可以将多组数据的R部分转换成四元数。之后进行处理。
else:
IMU和Cam标定数据采集的过程中,通常建议是camera采用20hz,imu采用200hz的频率。避免震动,避免照片模糊等,尤其是在标定开始和标定结束时。
图像和IMU的数据都采集好以后,就可以通过以下命令来生成ROS的bag包格式。
kalibr_bagcreater --folder dataset-dir --output-bag awsome.bag
可以通过rosbag info awsome.bag来检查生成的bag包是不是合格的。
除了bag包,命令还需要的三个参数分别是–target,–cam和–imu,分别是指的采集数据过程中用到的标定板的标准,camera的内参,imu的噪声数据。这里用到的标定板,都是需要安装1比1的比例打印出来,比如从kalibr上下载的pdf是个0.8m*0.8m的标定板。当然你也可以自己制作一个标定板,比如制作一个A4大小的标定板,然后在打印的时候选择不要做缩放,通过kalibr_create_target_pdf –h查看制作的方法。camera的内参标定是比较成熟的技术,这里不做介绍。而IMU的噪声参数一般可以通过IMU器件的datasheet来获得。
假如都没有问题的话,通过运行kalibr_calibrate_imu_camera,我们就能得到pdf,txt,和yaml3个结果文件。
我们主要关注results-imucam-%BAGNAME%.txt文件,根据这个结果来简单看看我们的标定是否有效。
其中reprojection误差最好不要超过5个像素,T_ic/T_ci矩阵中的位移应该根据设备IMU和Camera的实际位置来,一般应该是厘米或者毫米这样的尺度的数值。