ZED_mini文档:Stereolabs Docs: API Reference, Tutorials, and Integration
目录
ubuntu 20.04 zed sdk安装
官网参考链接:https://www.stereolabs.com/docs/installation/linux
安装好显卡驱动和cuda后,开始安装zed sdk
下载sdk:ZED_SDK_Ubuntu20_cuda11.8_v4.1.2.zstd.run
ZED SDK 4.1 - Download | Stereolabs
转到已下载安装程序的文件夹安装 zstd。
sudo apt install zstd
chmod +x ZED_SDK_Ubuntu20_cuda11.8_v4.1.2.zstd.run
./ZED_SDK_Ubuntu20_cuda11.8_v4.1.2.zstd.run #先按q,后面都按y(可根据需要选择下载内容,都按y资源较多比较费时)
安装完成后重启,之后输入如下命令检验:
cd /usr/local/zed/tools
./ZED_Explorer #可查看双目图像,分辨率,内参等信息
cd /usr/local/zed/tools
./ZED_Depth_Viewer #可查看深度图像,对于cuda配置有要求,可能运行失败
软件功能:
ZED Calibration——用于ZED校准;
ZED Sensor Viewer——ZED传感器,ZED2支持;
ZED Explorer——用于zed相机的实时预览和录制;
ZED Depth Viewer——捕获和显示深度图像和点云;
ZEDfu——ZED相机的实时3D映射和制图;
使用ZED Sensor Viewer工具可看到mini内置imu的输出信息,包括加速度、角速度及姿态。
卸载sdk:
cd /usr/local
sudo rm -rf zed
ubuntu 20.04 zed ROS接口安装
官网参考链接:Getting Started with ROS and ZED - Stereolabs
mini支持输出:
左右校正/未校正图像
深度图
彩色 3D 点云
视觉里程计:相机的位置和方向
姿态跟踪:相机的位置和方向固定并与IMU数据融合
空间映射:融合 3D 点云
传感器数据:加速度计、陀螺仪
下载ZED ROS安装包(分为zed-ros-wrapper、zed-ros-interfaces、zed-ros-examples)
zed-ros-wrapper:GitHub - stereolabs/zed-ros-wrapper: ROS wrapper for the ZED SDK
zed-ros-interfaces:GitHub - stereolabs/zed-ros-interfaces: ROS interfaces for the ZED ROS Wrapper
zed-ros-examples:GitHub - stereolabs/zed-ros-examples: Examples for the ZED SDK ROS wrapper
其中zed-ros-wrapper为主要ros节点、zed-ros-interfaces为zed和ros之间的接口话题,如果下载zed-ros-wrapper中接口文件无内容需要手动将zed-ros-interfaces下载并添加进去。zed-ros-examples为一些示例和教程(可在电脑主机上部署,较占空间)。
修改ROS节点相机发布参数
启动节点前可对相机参数进行修改,文件位置:zed-ros-wrapper-master/zed_wrapper/params
这里只探索了修改分辨率和发布频率:
zed-mini共支持四种分辨率('HD2K', 'HD1080', 'HD720', 'VGA'(1344x376))。可在zedm.yaml文件中修改对应的分辨率及抓取帧率(从sdk的发布频率下,以抓取频率转换为ros消息)
general:
camera_model: 'zedm'
grab_resolution: 'HD720' # 'HD2K', 'HD1080', 'HD720', 'VGA', 'AUTO'
grab_frame_rate: 30 # Frequency of frame grabbing for internal SDK operations
推测sdk在各分辨率下的发布频率固定为:2K/15fps、1080/30fps、720P/60fps、VGA/100fps。发布频率不更改sdk应该不会改变,tool工具的帧率修改也不会影响,抓取帧率grab_resolution应小于SDK发布频率。
修改完zedm.yaml文件后还需要修改common.yaml文件以修改ROS发布分辨率和发布帧率。
pub_resolution: 'NATIVE' # The resolution used for output. 'NATIVE' to use the same `general.grab_resolution` - `CUSTOM` to apply the `general.pub_downscale_factor` downscale factory to reduce bandwidth in transmission
pub_downscale_factor: 2.0 # rescale factor used to rescale image before publishing when 'pub_resolution' is 'CUSTOM'
pub_frame_rate: 60 # frequency of publishing of video and depth data (see SDK API "InitParameters::grab_compute_capping_fps")
其中当发布分辨率设置为CUSTOM时,输出的ROS图片消息分辨率将根据
pub_downscale_factor的值进行分辨率降低输出,例如选择的抓取分辨率为1280x720,downscale之后输出分辨率为640x360。当发布分辨率设置为NATIVE时则与抓取分辨率一致。
此外,注意ROS发布分辨率不高于抓取分辨率不高于SDK发布分辨率,超过了不会报错单仍以SDK分辨率发布。
对于启动zed-mini的zed-ros节点
source devel/setup.bash
roslaunch zed_wrapper zedm.launch
带位姿的imu话题:/zedm/zed_node/imu/data
不带位姿的imu话题:/zedm/zed_node/imu/data_raw
彩色校正图像(默认为左侧传感器):rgb/image_rect_color
彩色相机校准数据:rgb/camera_info
彩色未校正图像(默认为左侧传感器):rgb_raw/image_raw_color
未校正的彩色相机校准数据rgb_raw/camera_info
右相机校正图像:right/image_rect_color
右传感器校准数据:right/camera_info
右相机未校正图像:right_raw/image_raw_color
未校正的右侧传感器校准数据 :right_raw/camera_info
置信度图作为图像:confidence/confidence_image
深度图:depth/depth_registered
视差图:disparity/disparity_image
点云:zed/zed_node/point_cloud/cloud_registered
运行zed-ros-examples示例之一(无需上述启动ros节点步骤)
source devel/setup.bash && roslaunch zed_display_rviz display_zedm.launch
标定zed-mini(双目、imu、双目-imu)
使用kalibr对双目相机进行标定
参考链接:ZED双目相机标定跑通vins fusion_zed相机双目标定-CSDN博客
以及:使用Kalibr标定zed mini双目相机_kalibr标定太慢-CSDN博客
kalibr:https://github.com/ethz-asl/kalibr
使用6*6标定板
拉起相机驱动后录制话题:rosbag record /zedm/zed_node/imu/data_raw /zedm/zed_node/left_raw/image_raw_color /zedm/zed_node/right_raw/image_raw_color
录制过程移动相机可参考:https://www.youtube.com/watch?app=desktop&v=puNXsnrYWTY
(1)俯仰角摆动3次
(2)偏航角摆动3次
(3)翻滚角摆动3次
(4)上下移动3次
(5)左右移动3次
(6)前后移动3次
(7)自由移动,摆动幅度大一些,但要移动缓慢些,使得标定目标尽可能出现在相机的所有视野范围内
整体标定时间在90s以上
录制好后,在kalibr工作空间下执行标定
source devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras --bag src/data/stereo_imu.bag --topics /zedm/zed_node/left_raw/image_raw_color /zedm/zed_node/right_raw/image_raw_color --models pinhole-radtan pinhole-radtan --target src/data/april_6x6.yaml --show-extraction
其中--show-extraction显示角点提取过程。
标定结束后生成三个结果文件并存在标定数据所在文件夹
其中,txt文件中可查看reprojection error(重投影误差)是多少,理想范围是0.1-0.2;生成的yaml文件就是两个相机的内参及两个相机之间的变换矩阵,实际结果与sdk给出的内参差距不大,sdk给出的内参位于:/usr/local/zed/settings
使用imu_utils进行内置imu内参标定
参考链接:Ubuntu20.04编译并运行imu_utils,并且标定IMU_imu utils-CSDN博客
imu_utils:https://github.com/gaowenliang/imu_utils
录制imu数据,大约两小时
打开imu_utils的launch文件夹,仿照提供的launch文件编写launch文件。
执行标定指令
source devel/setup.bash
roslaunch imu_utils zed_imu.launch //该文件为自己编写
// launch后界面显示wait for imu data
rosbag play -r 200 imu.bag // 200 倍速播放rosbag
注:程序进入bag读取,并计算allan方。当bag包加速回放完毕后,执行launch的窗口可能仍然会显示wait for imu data.,等待一段时间计算,计算完毕后会显示计算结果,如果迟迟没有结果,可能是存放数据的路径不行,改回原来的路径可以,亲测有效。
标定结束后在launch文件中设定的输出文件夹下将出现一系列标定结果文件。简单的陀螺仪和角速度计偏置可查看.yaml文件
使用kalibr进行相机与imu的联合标定
数据准备:
使用kalibr标定好的双目相机内参yaml文件、使用imu_utils标定好的imu内参yaml文件、之前双目标定用的april_6x6_A4.yaml以及最早录制的包含相机及imu的bag文件。
其中,相机内参的yaml文件不用更改,imu的yaml文件格式如下(yaml文件不能用制表符):
#Accelerometers
accelerometer_noise_density: 3.2859677559142028e-02 #Noise density (continuous-time)/acc_n
accelerometer_random_walk: 8.9869190005998929e-04 #Bias random walk/acc_w
#Gyroscopes
gyroscope_noise_density: 2.2327846882699617e-03 #Noise density (continuous-time)/gyr_n
gyroscope_random_walk: 1.3643470013705229e-05 #Bias random walk/gyr_w
rostopic: /zedm/zed_node/imu/data_raw #IMU的ROS话题名
update_rate: 200.0 #IMU的ROS输出频率
准备就绪后在kalibr工作空间下运行
source devel/setup.bash
# imu+双目
rosrun kalibr kalibr_calibrate_imu_camera --bag src/data/stereo_imu.bag --target src/data/april_6x6.yaml --cam src/data/stereo.yaml --imu src/data/imu.yaml
可能会出现AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘的错误信息,尝试更改numpy的版本。
标定生成的四个文件将在数据包目录中找到。
至此ZED_mini的传感器标定工作结束。