1. IMU标定
注意:已经测试code_utils和imu_utils不能同时编译,imu_utils中要用到code_utils,所以只能先编译code_utils
1.1 下载code_utils
//安装依赖
sudo apt-get install libdw-dev
//安装code_utils
mkdir -p imu_ws/src
cd ~/imu_ws/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make
如果报错backward.hpp没有找到,将sumpixel_test.cpp中# include "backward.hpp"改为:#include “code_utils/backward.hpp”
1.2 下载imu_utils
cd ~/imu_ws/src/
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make
在/imu_utils/launch/文件夹下面添加一个D455_imuCali.launch,内容如下:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/camera/imu"/>
<param name="imu_name" type="string" value= "Realsense"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "100"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
max_time_min:标定最短时长,可以自行更改,要比实际录制短(建议录制120分钟)。
data_save_path:保存文件的地址
1.3录制话题
首先配置D455启动文件,将/opt/ros/noetic/share/realsense2_camera/launch中rs_camera.launch内容进行如下修改(将将accel和gyro的数据合并得到imu话题)
修改前:
<arg name="unite_imu_method" default=""/>
<arg name="gyro_fps" default="-1"/>
<arg name="accel_fps" default="-1"/>
<arg name="enable_gyro" default="false"/>
<arg name="enable_accel" default="false"/>
<arg name="enable_sync" default="false"/>
修改后:
<arg name="unite_imu_method" default="linear_interpolation"/>
<arg name="gyro_fps" default="200"/>
<arg name="accel_fps" default="100"/>
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
<arg name="enable_sync" default="true"/>
打开相机
roslaunch realsense2_camera rs_camera.launch
记录话题,将设备静止不动,录制两个小时的rosbag。
rosbag record -O imu_calibration /camera/imu
1.4 正式标定工作
1.4.1 imu_util 工具包launch文件编写
# 进入文件夹
src/imu_utils/launch
# 创建文件
touch D455_imuCali.launch
# 编辑文件
gedit D455_imuCali.launch
文件内容:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/camera/imu"/>
<param name="imu_name" type="string" value= "Realsense"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "100"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
1.4.2 imu_util标定程序运行
#在imu_ws目录下重新编译
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
roslaunch imu_utils D455_imuCali.launch
1.4.3 播放刚才录制的IMU数据包
rosbag play -r 200 imu_calibration.bag
标定结果存放在imu_utils/data中,我的标定结果如下:
%YAML:1.0
---
type: IMU
name: Realsense
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 2.4665302312035123e-03
gyr_w: 4.5503659988736129e-05
x-axis:
gyr_n: 2.1289709366376893e-03
gyr_w: 6.4611553196293941e-06
y-axis:
gyr_n: 2.5822602667748321e-03
gyr_w: 4.0022592384183316e-05
z-axis:
gyr_n: 2.6883594901980158e-03
gyr_w: 9.0027232262395674e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 1.2927370530460705e-02
acc_w: 6.3098513365178650e-04
x-axis:
acc_n: 1.2886323077727411e-02
acc_w: 6.3786293785086706e-04
y-axis:
acc_n: 1.1760052561659096e-02
acc_w: 9.0899773864330411e-04
z-axis:
acc_n: 1.4135735951995609e-02
acc_w: 3.4609472446118833e-04
参考:
D455相机标定 双目+imu(一)_全日制一起混的博客-CSDN博客
Realsence D455标定并运行Vins-Fusion