ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

相机+IMU 联合标定

相机+IMU 联合标定 流程图前置认知最容易踩的两个坑数据形态ORB-SLAM3 本身不录数据你的采集程序落盘的通常是 EuRoC mav0/ 结构cam0/、cam1/、imu0/Kalibr 只吃 ROS bag所以中间必须有一步转换下面第 4 步脚本已交付。若你是用 realsense-ros 等直接录的 bag可跳过转换。外参方向Kalibr 输出的 T_cam_imu 与 ORB-SLAM3 的 IMU.T_b_c1旧版叫 IMU.Tbc是同一个变换把 IMU/body 坐标系下的点变换到相机系即 T_{cam←body}直接抄写、不要求逆。EuRoC 官方配置里的 Tbc 数值就是这个方向。第 1 步安装 Kalibr推荐 Ubuntu 20.04 ROS NoeticKalibr 官方维护到 ROS122.04 上建议走官方 wiki 的 Docker 方案见 https://github.com/ethz-asl/kalibr/wiki/Installationsudo apt install -y python3-setuptools python3-rosinstall-generator python3-wstool \ python3-catkin-tools python3-pip libv4l-dev ros-noetic-vision-opencv \ ros-noetic-image-transport-plugins pip3 install matplotlib scipy pyx python-igraph pycryptodomex mkdir -p ~/kalibr_ws/src cd ~/kalibr_ws catkin config --extend /opt/ros/noetic --cmake-args -DCMAKE_BUILD_TYPERelease git clone https://github.com/ethz-asl/kalibr.git src/kalibr catkin build -j4 source devel/setup.bash # 验证 rosrun kalibr kalibr_calibrate_cameras --help第 2 步准备 AprilGrid 标定板或者checkboard标定板从官方 wiki 下载april_6x6_60x60cm.pdf或 80cm 版打印时关闭 适应页面、100% 比例贴在硬质平板上用直尺实测黑色 tag 边长填入已交付的aprilgrid_6x6.yaml的tagSize单位米。tagSize误差会 1:1 传导给 baseline 和外参平移不能照抄默认值。AprilGrid 相比棋盘格支持部分遮挡、位姿解算更稳定是 Kalibr 官方推荐目标第 3 步采集三段数据1标定板占画面 30–70%在视野各位置、远近0.5–2 m、各倾角慢速运动帧率可降到 4–10 Hz1–2 min2第 4 步ORB-SLAM3采集数据 → ROS bag 转换与校验roscore source /opt/ros/melodic/setup.bash source ~/kalibr_ws/devel/setup.bash python3 recorder_orbslam3_to_bag.py --src ../recorder_images_455 --output imu_cam.bag 查看bag信息 rosbag info cam_A.bag # 核对话题、消息数、时长 rqt_bag imu_cam_B.bag # 抽帧看标定板是否清晰、时间戳是否单调../recorder_images_455是ORB-SLAM录制的图像和IMU数据路径文件夹下包含cam0和IMU两个子文件夹。如果在系统中使用python3出现错误可以使用显示运行直接用系统 python2.7 显式运行 /usr/bin/python2.7 recorder_orbslam3_to_bag.py --src ../recorder_images_455 --output imu_cam.bag话题名约定为 Kalibr 默认的/cam0/image_raw、/cam1/image_raw、/imu0单目加--mono第 5 步相机内参 双目标定模型与 ORB-SLAM3 的对应关系pinhole-radtanOpenCV plumb-bobk1 k2 p1 p2→ ORB-SLAM3PinHolepinhole-equiKannala–Brandt 鱼眼k1–k4→ ORB-SLAM3KannalaBrandt8先标定出单目相机参数后续单目IMU联合标定需要用到imu_cam-camchain.yaml参数文件该文件是单目标定的产物rosrun kalibr kalibr_calibrate_cameras --bag imu_cam.bag --topics /cam0/image_raw --models pinhole-radtan --target checkerboard_13x13.yaml --timeoffset-padding 0.02 --bag-from-to 30 80 --show-extraction 如果是鱼眼相机 rosrun kalibr kalibr_calibrate_cameras --bag imu_cam.bag --topics /cam0/image_raw --models pinhole-equi pinhole-equi --target checkerboard_13x13.yaml --timeoffset-padding 0.02 --bag-from-to 30 80 --show-extraction首次务必加--show-extraction确认每帧角点检测正常再跑全量单目只保留一个 topic 和一个 model。产物camchain-cam_A.yaml、results-cam_A.txt、report-cam_A.pdf。如果显示图像有问题把--show-extraction去掉第 6步相机–IMU 联合标定rosrun kalibr kalibr_calibrate_imu_camera --target checkerboard_13x13.yaml --cam imu_cam-camchain.yaml --imu imu_d435i_kalibr.yaml --bag imu_cam.bag --timeoffset-padding 0.02 --bag-from-to 2 90--bag-from-to可裁掉坏段但不要把开头静止段裁掉--timeoffset-padding是时间偏移搜索范围秒默认 0.01已知设备有较大固定延迟时调大产物camchain-imucam-imu_cam_B.yaml、results-imucam-*.txt、report-imucam-*.pdf。注意事项如果Ubuntu是18.04版本需要安装ros 为 medotic 版本1. Melodic 下安装 KalibrPython 2 依赖体系sudo apt update sudo apt install -y \ git wget autoconf automake doxygen \ python-dev python-pip python-scipy python-matplotlib ipython \ python-wxgtk3.0 python-tk python-igraph python-pyx \ libeigen3-dev libboost-all-dev libsuitesparse-dev libopencv-dev \ libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev \ python-catkin-tools python-numpy python-opencv \ ros-melodic-vision-opencv ros-melodic-image-transport-plugins \ ros-melodic-cmake-modules mkdir -p ~/kalibr_ws/src cd ~/kalibr_ws source /opt/ros/melodic/setup.bash catkin init catkin config --extend /opt/ros/melodic --cmake-args -DCMAKE_BUILD_TYPERelease git clone https://github.com/ethz-asl/kalibr.git src/kalibr catkin build -j2 # 18.04 内存占用高建议 -j2不要 -j4 source devel/setup.bash # 验证Melodic 下节点由 python2 解释执行 rosrun kalibr kalibr_calibrate_cameras --helpMelodic 下一律不要用 pip3 装 Kalibr 依赖igraph/pyx/matplotlib/scipy全部用上面的python-*apt 包否则会出现 py2/py3 混用导致 import 失败。在标定工程中一定要先source 工作空间source /opt/ros/melodic/setup.bash source ~/kalibr_ws/devel/setup.bash录联合标定段60–90 s板固定、相机动靶标固定在墙上手持 D435i 距板 0.8–1.2 m板完整入镜启动 recorder 后原地静止 3–5 s手持相机做前后 / 左右 / 上下平移20–40 cm1–2 s 一个周期慢而平滑绕三轴各缓慢转动 ±20°~30° 几组板保持在画面内回到中位静止 3–5 s再 CtrlC全程不要甩动、不要绕光轴快速转、不要有冲击。为什么要这样动平移激励加速度计、旋转激励陀螺仪六个自由度都激发到相机–IMU 的旋转外参、平移外参、时间偏移才全部 可观只做一类动作会有方向估不出来表现为某几项误差特别大。多姿态让重力在三个轴上反复变化是区分重力和线加速度、估计平移外参的关键所以平移三个方向、旋转三个轴都不能省。慢是为了让 B 样条跟得上、图像不糊、IMU 不饱和你之前数据陀螺峰值 1.16 rad/s、加计 11.7 m/s² 已在合格边缘再慢一点更稳。开头必须静止 3~5 s相机对准板、板完整居中Kalibr 用这段初始化重力方向和陀螺零偏结尾再静止一段。操作建议开着我给你的live_checkerboard_view.py预览先不录制空走一遍完整时间线 —— 确认全程绿色ALL 144 DETECTED、检测率 90%、从不出现红框ORIENTATION FLIP再正式rosbag record。Roll 动作就盯着画面里的orient angle让它在 ±45° 内来回、不要越过 90°。不要绕法线快速转板对称棋盘 180° 歧义不要有冲击和快步移动。强烈建议联合标定弃用 12×12 对称棋盘换 AprilGrid若坚持用棋盘至少换成非对称规格如 13×11 方格 → 12×10 内角点
返回列表