因为要等着财务审批下来才可以买标定板,于是就先凑合着用打印出来A4大小的二维码标定板用着了。先没有打算标定IMU,只是单纯的标定了双目,使用的双目相机是小觅S1030标准版的。
1.数据的采集
进入SDK的目录下:
cd ROS_WORKSPACE/mynt_eye_sdk/src/MYNT-EYE-S-SDK/
source ./wrappers/ros/devel/setup.bash
roslaunch mynt_eye_ros_wrapper mynteye.launch
打开另外一个终端:
rostopic list 查看所有活动的topic
/mynteye/camera_mesh
/mynteye/depth/camera_info
/mynteye/depth/image_raw
/mynteye/disparity/camera_info
/mynteye/disparity/image_norm
/mynteye/disparity/image_raw
/mynteye/imu/data_raw
/mynteye/left/camera_info
/mynteye/left/image_raw
/mynteye/left_rect/camera_info
/mynteye/left_rect/image_rect
/mynteye/points/data_raw
/mynteye/right/camera_info
/mynteye/right/image_raw
/mynteye/right_rect/camera_info
/mynteye/right_rect/image_rect
/mynteye/temperature/data_raw
/rosout
/rosout_agg
/tf_static
需要用的topic是/mynteye/left/image_raw 和 /mynteye/right/image_raw。
rosbag record -O test.bag /mynteye/left/image_raw /mynteye/right/image_raw
把camera的数据存储到了test.bag文件中,接着对该文件进行修改,降低采集数据的频率。
在kalibr的工作区中激活kalibr
source ~/kalibr_workspace2/devel/setup.bash
kalibr_bagextractor --bag test.bag --image-topics /mynteye/left/image_raw /mynteye/right/image_raw --output-folder dataset #提取出来相机录制的信息。
提取出数据和处理过数据之后,再利用kalibr进行.bag数据的制作
kalibr_bagcreater --floder dataset --output-bag stere_data.bag
2.利用kalibr进行标定
标定之前先要写入target 的标定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]
tagSpacing: 0.3 #ratio of space between tags to tagSize
#example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]
接着进行标定:
kalibr_calibrate_cameras --bag ../stere_data.bag --topic /cam0/image_raw /cam1/image_raw --target ../april_6x6.yaml --models ds-none ds-none
3.利用basalt进行标定
basalt使用的配置文件是json,所以先把配置文件改为json:
{
"target_type": "aprilgrid",
"tagCols": 6,
"tagRows": 6,
"tagSize": 0.022,
"tagSpacing": 0.3
}
接着进行标定:
basalt_calibrate --dataset-path ~/calibration_dir/stere_data.bag --dataset-type bag --aprilgrid ~/calibration_dir/april_6x6.json --result-path ~/calibration_dir/ --cam-types ds ds
这个是存在GUI的标定,可以通过GUI来表示每一个过程。
4.问题与总结
两者都是使用DS模型来进行标定的,但是两者的标定参数还相差挺大,并且重投影误差也较大的。目前的想法是因为标定板的原因,标定板精度不高,而且太小了,等着标定板来了再进行标定。
接着就是标定IMU以及联合标定相机和IMU。
--------------------------------------------分割线------------------------------------------------------------
因为利用kalibr联合标定imu和双目相机操作起来比较简单,于是就把它直接放在这个下面了。
首先双目标定结束后,会产生一个camchain-..stere_data.yaml结果文件,这个会当做输入联合标定的一个输入;
接着要配置一个imu.yaml文件(该文件的信息是由imu的信息得到的,可以通过imu_utils进行标定得到):
#Accelerometers
accelerometer_noise_density: 1.86e-03 #Noise density (continuous-time)
accelerometer_random_walk: 4.33e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 1.87e-04 #Noise density (continuous-time)
gyroscope_random_walk: 2.66e-05 #Bias random walk
rostopic: /imu0 #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
然后采集到的相机和imu数据都集成到一个bag包中:
rosbag record /mynteye/left/image_raw /mynteye/right/image_raw /mynteye/imu/data_raw #生成含有imu数据的bag包
最后进行标定:
kalibr_calibrate_imu_camera --bag ./mix.bag --cam camchain-..stere_data.yaml --imu imu.yaml --target ../april_6x6.yaml