1.准备工作
使用v4l2来查看摄像头支持哪些参数的设置,在采集之前进行设置
2.单目相机/双目相机的单独标定
使用opencv和kalibr,opencv进行图像的采集,保存为yuv文件或者其他raw图,保存后的图像专程png,使用
rosrun kalibr kalibr_bagcreater --folder dataPath --output-bag filename.bag
将采集的png图像转化为rosbag,使用rosbag info可以查看bag文件的属性信息。
使用下面的命令进行标定,有几个摄像头就写几个pinhole-radtan,完成后会生成.txt,.pdf和yaml文件。
rosrun kalibr kalibr_calibrate_cameras \
--models pinhole-radtan pinhole-radtan \
--bag bagpath/filename.bag \
--topics /cam0/image_raw /cam1/image_raw \
--target yamlpath/april_8x6.yaml \
--bag-from-to 5 25 \
--show-extraction
3.IMU的标定
采集至少2个小时的静止数据,CSV文件,时间戳,加速度计,陀螺仪共7个列。
将CSV文件可以转换为bag文件,可以参考https://blog.csdn.net/weixin_45432823/article/details/131351554
标定直接参考https://github.com/ori-drs/allan_variance_ros,注意有坑,按照ros的工作空间直接来。
#在~目录下执行以下操作
mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make
cd src
git clone https://github.com/ori-drs/allan_variance_ros
cd ..
catkin_make
pwd
#记得每次新开终端时要艘source或者写入到~/.bashrc中
source 自定义空间名词/build/setup.bash
#将csv文件转换的文件作为输入,输出在制定的路径下
rosrun allan_variance_ros cookbag.py --input BAGPATH/**.bag --output YOURPATH/name.bag
#注意后面的path_to_config_file是一个yaml文件,可以参考allan_variance_ros/config下的.yaml
#imu_topic: '/imu0'
#imu_rate: 200
#measure_rate: 200 # Rate to which imu data is subsampled
#sequence_time: 7200 # 2 hours in seconds
#path_to_folder_containing_bag是包的路径,运行时有可能会遇到numpy版本不兼容
#pip3 install numpy==1.21可以解决
rosrun allan_variance_ros allan_variance [path_to_folder_containing_bag] [path_to_config_file]
#可视化绘图并获取参数
rosrun allan_variance_ros analysis.py --data PATH/NAME.csv
#生成的imu.yaml要进行修改topic和update_rate
4.IMU和摄像头的联合标定
参考链接
http://github.com/ethz-asl/kalibr/wiki/bag-format
文件结构,以双目相机为例。
+-- dataset-dir
+-- cam0
│ +-- 1385030208726607500.png
│ +-- ...
│ \-- 1385030212176607500.png
+-- cam1
│ +-- 1385030208726607500.png
│ +-- ...
│ \-- 1385030212176607500.png
\-- imu0.csv
输入命令,这样就得到了联合bag文件
rosrun kalibr kalibr_bagcreater --folder dataset-dir/. --output-bag cam_imu.bag
联合标定
rosrun kalibr kalibr_calibrate_imu_camera --bag YOURCAM_IMU.bag --cam YOURcamera-camchain.yaml --imu YOURimu.yaml --target 标定板.yaml --show-extraction --bag-from-to start_sec stop_sec