手把手教你用Kalibr标定Kinect V1和SBG IMU:ROS下的传感器标定实战笔记
Kinect V1与SBG IMU在ROS下的高精度标定实战指南
当我们需要将视觉传感器与惯性测量单元(IMU)的数据进行融合时,精确的传感器标定是确保系统性能的基础。本文将详细介绍如何在ROS Melodic环境下,使用Kalibr工具对Kinect V1深度相机和SBG IMU进行联合标定的完整流程。
1. 环境准备与Kalibr安装
在开始标定前,我们需要确保系统环境配置正确。以下是在Ubuntu 18.04上安装Kalibr的详细步骤:
1.1 系统依赖安装
首先安装基础依赖项:
sudo apt-get install -y \
git wget autoconf automake nano \
libeigen3-dev libboost-all-dev libsuitesparse-dev \
doxygen libopencv-dev \
libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev
针对Python环境的依赖:
sudo apt-get install -y python3-dev python-pip python-scipy \
python-matplotlib ipython python-wxgtk4.0 python-tk python-igraph
注意:如果遇到python-igraph安装问题,可以尝试直接使用apt-get安装而非pip
1.2 创建工作空间
建立Kalibr专用工作空间并配置:
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
source /opt/ros/melodic/setup.bash
catkin init
catkin config --extend /opt/ros/melodic
catkin config --merge-devel
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
1.3 源码编译与常见问题解决
从GitHub获取Kalibr源码并编译:
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
常见编译错误及解决方案:
| 错误类型 | 解决方案 |
|---|---|
| aslam_cv相关错误 | 替换aslam_cv_python和aslam_cv_backend_python文件夹 |
| Schweizer-Messer错误 | 更新python_module目录内容 |
| 编译包数量不符 | 确保完整编译37个包而非36个 |
2. Kinect V1相机标定
Kinect V1作为一款经典的RGB-D相机,其标定过程需要特别注意参数配置。
2.1 驱动安装与数据采集
安装freenect驱动并启动相机:
sudo apt-get install ros-melodic-freenect-launch
roslaunch freenect_launch freenect.launch
调整话题频率并录制数据:
rosrun topic_tools throttle messages /camera/rgb/image_color 4.0 /my_image_color
rosbag record /my_image_color -o kinect_data.bag
2.2 标定板准备
推荐使用Aprilgrid标定板,其配置参数如下:
target_type: 'aprilgrid'
tagCols: 6
tagRows: 6
tagSize: 0.021
tagSpacing: 0.2857
2.3 相机标定执行
使用Kalibr进行单目相机标定:
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras \
--target april_6x6.yaml \
--bag kinect_data.bag \
--models pinhole-radtan \
--topics /my_image_color
关键参数说明:
pinhole-radtan:Kinect V1适用的相机模型- 标定时间建议:3-5分钟数据
- 标定板应出现在画面各个位置
3. SBG IMU标定
SBG IMU需要单独标定以获取准确的噪声参数。
3.1 驱动安装与数据采集
安装SBG ROS驱动:
cd ~/catkin_ws/src
git clone https://github.com/SBG-Systems/sbg_ros_driver.git
cd ~/catkin_ws
catkin_make
录制IMU静态数据:
roslaunch sbg_driver sbg_device.launch
rosbag record /sbg/imu_data -o imu_static.bag
重要:IMU标定需要完全静止放置至少2小时
3.2 IMU标定工具安装
安装imu_utils工具链:
mkdir -p ~/imu_ws/src
cd ~/imu_ws/src
git clone https://github.com/gaowenliang/code_utils.git
git clone https://github.com/gaowenliang/imu_utils.git
cd ~/imu_ws
catkin_make
3.3 IMU标定执行
配置标定参数并运行:
roslaunch imu_utils sbg.launch
rosbag play -r 200 imu_static.bag
标定结果示例:
%YAML:1.0
---
type: IMU
name: sbg
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 4.94e-04
gyr_w: 3.00e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 6.27e-03
acc_w: 2.88e-04
4. 相机-IMU联合标定
联合标定是确定相机与IMU之间时空关系的关键步骤。
4.1 数据同步采集
同时录制相机和IMU数据:
roslaunch freenect_launch freenect.launch
roslaunch sbg_driver sbg_device.launch
rosbag record /my_image_color /sbg/imu_data -o sync_data.bag
4.2 数据预处理
转换话题类型并合并数据包:
import rosbag
with rosbag.Bag('output.bag', 'w') as outbag:
for topic, msg, t in rosbag.Bag('sync_data.bag').read_messages():
if topic == '/sbg/imu_data':
# 转换IMU消息类型
new_msg = convert_imu_msg(msg)
outbag.write('/imu0', new_msg, t)
elif topic == '/my_image_color':
outbag.write('/cam0/image_raw', msg, t)
4.3 联合标定配置
准备IMU参数文件imu.yaml:
rostopic: /imu0
update_rate: 100.0
accelerometer_noise_density: 6.27e-03
accelerometer_random_walk: 2.88e-04
gyroscope_noise_density: 4.94e-04
gyroscope_random_walk: 3.00e-05
4.4 执行联合标定
运行Kalibr联合标定命令:
kalibr_calibrate_imu_camera \
--target april_6x6.yaml \
--cam camchain.yaml \
--imu imu.yaml \
--bag sync_data.bag \
--bag-from-to 30 150
标定结果分析要点:
- 重投影误差应小于2像素
- IMU-相机时间偏移量(time shift)通常在毫秒级
- 空间变换矩阵应检查合理性
5. 标定验证与问题排查
完成标定后,验证标定结果的准确性至关重要。
5.1 常见问题及解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 初始化失败 | 相机模型选择错误 | 确认使用pinhole-radtan模型 |
| 标定发散 | 数据质量差 | 重新采集更稳定的数据 |
| 时间偏移过大 | 时钟不同步 | 检查硬件时间同步机制 |
5.2 标定结果验证方法
- 重投影误差检查:确保所有标定点的重投影误差分布均匀
- 传感器数据对齐:通过可视化工具检查IMU和相机数据的时间对齐
- 实际应用测试:在SLAM或VIO系统中验证标定参数的实际效果
在多次实际项目中,我们发现Kinect V1与SBG IMU的标定结果稳定可靠,能够满足大多数视觉惯性系统的精度要求。标定过程中最重要的是保证数据质量——相机画面清晰、标定板完整可见,IMU保持静止或运动充分激励。
更多推荐
所有评论(0)