【Ubuntu18.04 D435i RGB相机与IMU标定详细版(二)】
继上篇文章
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- [【Ubuntu18.04 D435i RGB相机与IMU标定详细版(二)】](#【Ubuntu18.04 D435i RGB相机与IMU标定详细版(二)】)
- 三、IMU标定(联合标定可跳过)
三、IMU标定(联合标定可跳过)
使用imu_utils标定
imu_utils是一个轻量级的 IMU 标定工具,主要用于校准 IMU 的偏差和尺度因子,配置和使用相对简单,适合快速标定需求。但不支持多传感器融合标定,只能单独标定 IMU,由于功能较为简单,标定结果的精度可能不如更专业的工具,通常与ros一起使用。主要在ubuntu18.04进行测试。
参考文章:https://blog.csdn.net/weixin_51612528/article/details/143445582
1.安装依赖项
imu_utils依赖于ceres,需要全局安装,首先安装依赖:
c
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev libdw-dev
访问ceres-solver地址,选择tag为1.14.0下载tar或tar.gz压缩包,也可以使用指令下载:
c
wget https://github.com/ceres-solver/ceres-solver/archive/refs/tags/1.14.0.tar.gz
解压并编译:
c
# 可以选择在/opt目录下安装
tar -zxvf 1.14.0.tar.gz
cd ceres-solver-1.14.0/
mkdir build
cd build/
------------------------------------
cmake ..
make -j4
sudo make install
imu_utils同样依赖code_utils,需要先编译:
c
# 可以选择在/opt目录下安装
mkdir -p imu_calib_ws/src # 创建工作空间
cd ./imu_calib_ws/src
git clone https://github.com/gaowenliang/code_utils.git
cd code_utils/src
vim sumpixel_test.cpp # 将 #include "backward.hpp" 改为 #include "code_utils/backward.hpp" 避免报错
cd imu_calib_ws
catkin_make
下载并编译imu_utils:这里使用的是mintar大佬修改后的文件,gaowenliang的imu_utils貌似有单位的问题
c
cd ./imu_calib_ws/src
git clone https://github.com/mintar/imu_utils.git
cd imu_calib_ws
catkin_make
这里以D435i为例,并在18.04上测试,也没有涉及到imu驱动以及相关串口的配置,后续如果有涉及会更新。一些其他问题可以参考博客。
imu_utils使用bag包对imu进行标定,在静止状态下启动相机并录制imu数据:
c
# 启动驱动,修改频率(可选)
roslaunch realsense2_camera rs_camera.launch gyro_fps:=200 accel_fps:=200
# 录制imu数据,根据实际imu的话题名修改
rosbag record /camera/imu --duration=2.5h # 这里一定要录制2个小时以上,不然会有问题,录制过程处于静止状态。
查看imu是否正确发布信息
c
rostopic echo /camera/imu
正确
imu_ros包的大小
配置标定所需的信息:
c
cd imu_utils/data && mkdir d435i # 用于存放标定后的imu数据
# 创建launch文件
cd imu_utils/launch && touch d435i.launch
gedit d435i.launch # 打开创建的文件,粘贴以下内容,然后根据实际情况修改launch中的信息
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<!-- imu_topic 是 IMU 的话题 -->
<param name="imu_topic" type="string" value="/camera/imu"/>
<!-- imu_name 是自定义的 IMU 名称 -->
<param name="imu_name" type="string" value="d435i"/>
<!-- data_save_path 是标定后输出数据的目录 参考:$(find imu_utils)/data/d435i/ -->
<param name="data_save_path" type="string" value="/home/fjl/Desktop/calib_data/camera_imu_calib/d435i/"/>
<!-- max_time_min 设置为最大时长,单位是分钟,默认值是 120 分钟 这个value值一定要小于你录制的imu数据包 设置的值如果大于实际包的长度,程序不会有效执行-->
<param name="max_time_min" type="int" value="120"/>
<!-- max_cluster 设置最大聚类数 -->
<param name="max_cluster" type="int" value="100"/>
</node>
</launch>
标定imu:
c
# 运行imu_utils标定程序
roslaunch imu_utils d435i.launch
# 播放录制好的数据包 以200倍速度播放(在数据文件夹下)
rosbag play -r 200 2025-10-17-22-03-49.bag
# 当bag包加速回放完毕后,执行launch的窗口仍然会显示wait for imu data.,等待一段时间计算,计算完毕后会显示计算结果
标定结束后,标定结果会保存在我们创建的d435i目录下,标定信息参考如下: