使用kalibr对双目-IMU进行标定(小觅相机)
有些地方也没有弄得很清楚,有错误的地方欢迎大家批评指正
(っ•̀ω•́)っ✎⁾⁾ 我爱学习,学习使我进步
使用设备和环境
小觅 MYNTEYE-S1030
Ubuntu 16.04
所以用的是 ROS Kinetic
kalibr的安装
kalibr的GitHub网址,可参看其wiki进行安装和各种标定。
下面我再记录一遍使用ros的安装过程:
安装依赖项
-
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-kinetic-vision-opencv ros-kinetic-image-transport-plugins ros-kinetic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev
===
*其中,如果是ROS indigo,上面有三项注意要修改:ros-indigo-vision-opencv ros-indigo-image-transport-plugins ros-indigo-cmake-modules
其他版本的ROS应该类似。 -
sudo pip install python-igraph --upgrade
*第一次安装的时候没成功,但是之后可以用kalibr提供的数据集进行标定,但是之后标定,好像无法识别pinhole-radtan model。
*我在安装过程中遇到过好几次失败,网上查的办法都不太好使,可能是网络的问题,好险最后又成功了。
关于igraph:
igraph is on the Python Package Index with pre-compiled wheels for most Python distributions and platforms, so in most cases it can simply be installed using pip. ——引自官网
创建catkin工作空间
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
- *(这步一般不需要,安装ROS一般都将其写入了环境变量中了)
source /opt/ros/kinetic/setup.bash
catkin init
catkin config --extend /opt/ros/kinetic
- *(这步应该也不需要,Necessary for catkin_tools >= 0.4.)因为我用了反而不能catkin make了
catkin config --merge-devel # Necessary for catkin_tools >= 0.4.
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
编译
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ..
-
catkin build -DCMAKE_BUILD_TYPE=Release -j4
编译完成
运行
每当准备运行kalibr时,在终端输入source ~/kalibr_workspace/devel/setup.bash
加入环境变量。
可以用官方提供的数据集,测试一下。一个运行的例子:kalibr_calibrate_imu_camera --target april_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag mydata.bag --bag-from-to 5 45
准备标定板
具体可参见:Calibration targets
kalibr提供的Aprilgrid的download链接,使用的是Google drive。
有需要的可以在下面百度云盘下载:
链接: https://pan.baidu.com/s/1PGuf0P_Ta8x9Qhod_byq3g 提取码: r4ts
关于标定板,我就使用的是电脑打开PDF显示的。用尺子量的2cm,但还是蛮怀疑这个准确度的。
april_6x6_80x80cm.yaml文件,只需要修改tagSize修改为你的tag长度。
target_type: ‘aprilgrid’ #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.02 #size of apriltag, edge to edge [m] #只要改动这里就行
tagSpacing: 0.3 #ratio of space between tags to tagSize
安装MYNT-EYE-S-SDK
安装ROS版
此处只写了安装ROS版的:(其他的就make install / make samples
也挺简单的)
cd ~/MYNT-EYE-S-SDK
make ros
即可。
使用
打开相机:source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper mynteye.launch
打开 RViz 预览:source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper display.launch
标定双目
使用kalibr是标定采集好的.bag文件
使用MYNT采集数据
数据集要求:固定小觅相机,在相机视野中移动 aprilgrid 标定板。
注意关掉IR光(我怕打的光可能影响匹配),进入MYNT-EYE-S-SDK文件夹,进入wrappers/ros/src/mynt_eye_ros_wrapper/config/device/standard.yaml,应该这样就可以了。
- 打开相机
source wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper display.launch
- 调整频率
kalibr推荐使用 4Hz 图像帧率,这里使用topic_tools/throttle降低接收频率
使用方法:throttle messages <intopic> <msgs_per_sec> [outtopic]
rosrun topic_tools throttle messages /mynteye/left/image_raw 4.0 /mynteye/left/image_raw
rosrun topic_tools throttle messages /mynteye/right/image_raw 4.0 /mynteye/right/image_raw
- 有的参考博客会直接改名为
/left
和/right
,这个时候标定完生成的yaml中,也会记录topic的名字,那在标定双目-IMU间关系时,注意topic统一即可。
- record
rosbag record -O stereo_calib.bag /mynteye/left/image_raw /mynteye/right/image_raw
假设保存在了~/
路径下。
运行时大概长这样:
标定
source ~/kalibr_workspace/devel/setup.bash
-
kalibr_calibrate_cameras --bag /home/jmliu/stereo_calib.bag --topics /mynteye/left/image_raw /mynteye/right/image_raw --models pinhole-radtan pinhole-radtan --target /home/jmliu/mynt_calib/april_6x6_80x80cm.yaml
(注意修改路径) - 可在当前路径得到三个文件
标定stereo-imu的关系
采集数据
数据集要求:在相机视野中固定 aprilgrid 标定板,移动相机,绕三轴(yaw-pitch-roll)旋转,且有上下、左右、推进推远、画8字的运动,运动不要过快。
最好是image 20hz, IMU 200hz,其他的也可以。
这里我是进入MYNT-EYE-S-SDK文件夹,进入wrappers/ros/src/mynt_eye_ros_wrapper/config/device/standard.yaml,修改的频率: 应该这就样可以了。
rosbag record -O stereo_imu_calib.bag /mynteye/left/image_raw /mynteye/right/image_raw /mynteye/imu/data_raw
标定
标定会使用到imu.yaml,主要包括频率、噪声、随机游走的值,应该是给定一个大概的初值。
我直接使用了kalibr里提供的imu_adis16448.yaml文件,现在想来应该有问题。我发现在MYNT-EYE-VINS-FUSION-Samples的MYNT-EYE-VINS-FUSION-Samples/config/mynteye/mynteye_stereo_imu_config.yaml中有关于imu parameters的设置。
使用这个参数应该可以。
kalibr_calibrate_imu_camera --target /home/jmliu/mynt_calib/april_6x6_80x80cm.yaml --cam /home/jmliu/camchain-homejmliustereo_calib.yaml --imu /home/jmliu/imu.yaml --bag /home/jmliu/stereo_imu_calib.bag --bag-from-to 2 45
其中需注意的点:
- imu.yaml 中注意修改imu的topic。(这是imu_adis16448.yaml,按格式修改数值即可)
-
--bag-from-to
参数,如果数据集开始和最后有抬起相机的动作,请加上这个参数,去除这部分的数据。抬起放下的动作会对标定有一定影响。没有可不加。 - 会使用到上面标定双目间关系的yaml
- 注意修改路径。
结果
主要参考教程
[1] SDK doc 官方教程
[2] 贺博的博客:Kalibr 标定双目内外参数以及 IMU 外参数
版权声明:本文为「白巧克力亦唯心」原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.****.net/heyijia0327/article/details/83583360
[3] 小觅相机运行VINS-Fusion(二)——Camera-IMU参数标定
版权声明:本文为「changshen_xu」原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.****.net/****_XCS/article/details/93524356