zed2标定
ROS安装
参考网页
ZED ROS Wrapper安装
-
下载并放置在ROS工作空间
cd ~/catkin_ws/src git clone https://github.com/stereolabs/zed-ros-wrapper
-
编译(如果失败建议按照ROS安装中第四个参考网址从头配置,包含显卡驱动、cuda安装、ZED SDK安装)
cd ~/catkin_ws catkin_make zed-ros-wrapper source ./devel/setup.bash
Kalibr安装与使用
参考网页
-
安装Kalibr依赖项,版本不一样需要修改其中的kinetic为melodic
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 sudo pip install python-igraph --upgrade
或melodic版本
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-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 sudo pip install python-igraph --upgrade
-
创建工作区间
mkdir -p~/kalibr_workspace/src cd ~/kalibr_workspace source/opt/ros/indigo/setup.bash catkin init catkin config --extend /opt/ros/indigo catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
-
克隆源文件至kalibr_ws的src目录下
cd~/kalibr_workspace/src git clone https://github.com/ethz-asl/Kalibr.git
-
编译工具源码
cd~/kalibr_workspace catkin build -DCMAKE_BUILD_TYPE=Release -j4
-
刷新工作区间(用于标定命令行打开必须运行)
source~/kalibr_workspace/devel/setup.bash
-
利用官方的标定bag文件进行标定测试(非必须,这里没有做)
https://github.com/ethz-asl/kalibr/wiki/downloads 下载对应文件
对于Multiple camera calibration文件,可用如下命令测试:
source ~/kalibr_ws/devel/setup.bash kalibr_calibrate_cameras --target /home/bruce/dataset/april_6x6.yaml --bag /home/bruce/dataset/static.bag --models pinhole-equi pinhole-equi omni-radtan omni-radtan --topics /cam0/image_raw /cam1/image_raw /cam2/image_raw /cam3/image_raw
注意:–target后面是指向yaml文件的路径,–bag后面指向bag文件所在的位置。
ZED2相机标定
-
下载打印标定板
选择 Aprilgrid 6x6 0.8x0.8 m (unscaled) 下载打印pdf并修改yaml文件,修改ymal参数需要具体测量,方法如图:
tagCols 为标定格每行个数
tagRows 为标定格每列个数
tagSize 为标定格二维码边长,单位m
#我实际使用的参数,具体值需要测量
target_type: ‘aprilgrid’ #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.088 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
-
ZED2标定数据录制
可以根据需求修改了ZED2的分辨率,在ZED2_WS/src/zed-ros-wrapper/zed_wrapper/params文件夹下找到common.yaml,设置resolution为3,即VGA模式,实际分辨率大小为672*376。
然后打开ZED2相机开启数据录制:
roslaunch zed_wrapper zed2.launch
启用左右摄像头可视化功能,以确保将标定板保持在相机范围内(如果报错可以使用一半)
rosrun image_view image_view image:=/zed2/zed_node/left/image_rect_color & rosrun image_view image_view image:=/zed2/zed_node/right/image_rect_color
kalibr在处理标定数据的时候要求图像的频率不可过高,降低图像数据到20HZ,IMU数据至200HZ.
rosrun topic_tools throttle messages /zed2/zed_node/imu/data_raw 200 /zed2/zed_node/imu/data_raw2 rosrun topic_tools throttle messages /zed2/zed_node/left/image_rect_color 20 /zed2/zed_node/left/image_rect_color2 rosrun topic_tools throttle messages /zed2/zed_node/right/image_rect_color 20 /zed2/zed_node/right/image_rect_color2
录制数据
rosbag record -O Kalibr_data.bag /zed2/zed_node/imu/data_raw /zed2/zed_node/left/image_rect_color /zed2/zed_node/right/image_rect_color
-
开始相机标定
kalibr_calibrate_cameras --bag Kalibr_data.bag --topics /zed2/zed_node/left/image_rect_color /zed2/zed_node/right/image_rect_color --models pinhole-radtan pinhole-radtan --target april_6x6_80x80cm.yaml
-
得到类似以下格式结果,命名
camchain.yaml
cam0: cam_overlaps: [1] camera_model: pinhole distortion_coeffs: [0.962084349711143] distortion_model: fov intrinsics: [334.23991339518517, 333.6035571693483, 368.20264278064553, 252.393048692916] resolution: [752, 480] rostopic: /zed2/zed_node/left/image_rect_color cam1: T_cn_cnm1: - [0.9999904159643447, 0.0026734233431591698, -0.003467100673890538, -0.1172292375035688] - [-0.002666210133778015, 0.999994275307285, 0.002083428947247444, 0.0001658846059485747] - [0.003472650713385957, -0.002074164960638575, 0.9999918192349059, -0.0002328222935304919] - [0.0, 0.0, 0.0, 1.0] cam_overlaps: [0] camera_model: pinhole distortion_coeffs: [0.9617138563016285] distortion_model: fov intrinsics: [330.66005261900216, 330.07191301082963, 371.03802575515203, 231.03601204806853] resolution: [752, 480] rostopic: /zed2/zed_node/right/image_rect_color
ZED2 IMU标定
-
imu_utils的安装
参考github上的安装要求即可,且依赖于code_utils,需要先安装code_utils,然后创建catkin工作空间,必须先把code_utils放进去catkin_make,然后再把imu_utils文件放入工作空间中catkin_make,否则会报错找不到code_utils
-
下载code_utils: https://github.com/gaowenliang/code_utils
解压至catkin下的src文件,然后在code_utils下面找到sumpixel_test.cpp,修改#include "backward.hpp"为 #include “code_utils/backward.hpp”
然后运行
catkin_make
错误提示:
code_utils/backward.hpp:216:30: fatal error: elfutils/libdw.h: No such file or directory compilation terminated.
运行:
apt-get install libdw-dev
安装对应的库即可,一般安装这个就可以,如果这样还不可以试试:sudo apt-get install elfutils
-
**下载imu_utils:**https://github.com/gaowenliang/imu_utils
再次
catkin_make
-
-
接下来就可以就可以标定IMU了
-
根据imu_utils文件夹里面的A3.launch改写ZED2标定启动文件:ZED2_calibration.launch注意,max_time_min对应的参数,默认是30,意味着半个小时,如果数据录制时间超过两小时可以不用修改,如果不足,这个时间值要改为略小于真实时间。我的内容如下:
<launch> <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"> <param name="imu_topic" type="string" value= "/zed2/zed_node/imu/data_raw"/> <param name="imu_name" type="string" value= "ZED2"/> <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/> <param name="max_time_min" type="int" value= "30"/> <param name="max_cluster" type="int" value= "200"/> </node> </launch>
-
单独录制IMU数据,录制过程中必须保持相机静止不动
rosbag record -O imu_calibration /zed2/zed_node/imu/data_raw
-
启动标定
roslaunch imu_utils ZED2_calibration.launch
-
回放数据
rosbag play -r 200 imu_calibration.bag
-
-
最后可以得到标定结果文件:
/home/ipsg/tool/utils_ws/src/imu_utils/data/ZED2_imu_param.yaml
类似以下内容:
%YAML:1.0 --- type: IMU name: ZED2 Gyr: unit: " rad/s" avg-axis: gyr_n: 1.8222305208357593e-03 gyr_w: 3.7133721747382378e-05 x-axis: gyr_n: 2.1821037744825752e-03 gyr_w: 4.3929681760916831e-05 y-axis: gyr_n: 1.6623543812424751e-03 gyr_w: 4.1416410773020793e-05 z-axis: gyr_n: 1.6222334067822277e-03 gyr_w: 2.6055072708209496e-05 Acc: unit: " m/s^2" avg-axis: acc_n: 1.9690445544535126e-02 acc_w: 5.2966882234280319e-04 x-axis: acc_n: 2.0618609665773655e-02 acc_w: 5.4447136705058940e-04 y-axis: acc_n: 1.7485637447877407e-02 acc_w: 6.3371577751311896e-04 z-axis: acc_n: 2.0967089519954317e-02 acc_w: 4.1081932246470108e-04
-
将IMU的标定结果保存到文件
imu.yaml
中:#Accelerometers accelerometer_noise_density: 2.4753056458491202e-02 #Noise density (continuous-time) accelerometer_random_walk: 5.1092097834339175e-04 #Bias random walk #Gyroscopes gyroscope_noise_density: 4.0642638745600332e-03 #Noise density (continuous-time) gyroscope_random_walk: 2.6537322064011450e-05 #Bias random walk rostopic: /imu0 #the IMU ROS topic update_rate: 200.0 #Hz (for discretization of the values above)
联合标定
-
联合标定目的:
-
双目 + IMU数据录制(按照 相机标定 中第2条的录制方法,1分钟即可,也可以3分钟并修改第三步的
--bag-from-to 5 45
为--bag-from-to 10 120
) -
标定,采用之前得到的相机标定结果和IMU标定结果
camchain.yaml
和imu.yaml
kalibr_calibrate_imu_camera \ --target april_6x6_24x24mm.yaml \ --bag images_imu.bag \ --bag-from-to 5 45 \ --cam camchain.yaml \ --imu imu.yaml \ --imu-models scale-misalignment \ --timeoffset-padding 0.1
- –bag-from-to 5 45: because there are shocks in the dataset (sensor pick-up/lay-down), only the data between 5s to 45s is used(5-45数据被采用)
-
得到最终报告