准备工作:
ubuntu/ros-melodic环境
librealsense
realsense-ros
一、修改rs_camera.launch文件中的参数
修改之前装好的realsense环境中的/src/realsense-ros/realsense2_camera/launch路径下的rs_camera.launch文件参数(建议保留原来的rs_camera.launch文件,复制一份并重新命名,名字随意,作者命名为rs_camera_imu.launch):
<arg name="unite_imu_method" default=""/>
将上面的内容改成:
<arg name="unite_imu_method" default="linear_interpolation"/>
修改完之后分别运行
roscore
roslaunch realsense2_camera rs_camera.launch
rostopic list
查看话题中是否有/camera/imu的话题,如果没有的话需要修改上面复制并重命名的rs_camera_imu.launch文件的参数:
<arg name="enable_gyro" default="false"/>
<arg name="enable_accel" default="false"/>
将上面两个参数的值改为true即可,再次查看话题应该就有/camera/imu了
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
二、配置imu标定程序的环境
1.安装ceres
去官网下载源码编译就好了:https://github.com/ceres-solver/ceres-solver
2.创建imu工作空间
mkdir -p ~/imu_catkin_ws/src
cd ~/imu_catkin_ws/src
catkin_init_workspace
cd ~/imu_catkin_ws
catkin_make
source ~/imu_catkin_ws/devel/setup.bash
3.下载code_utils并编译(注意这里一定需要先下载code_utils编译,再下载imu_utils编译;如果直接下载imu_utils编译会报错)
cd ~/imu_catkin_ws/src
git clone https://github.com/gaowenliang/code_utils.git
cd ~/imu_catkin_ws/
catkin_make
这里编译可能会出现下面错误:
这里报backward.hpp的头文件错误,解决方法:
将~/imu_catkin_ws/src/code_utils/include/code_utils路径添加到~/imu_catkin_ws/src/code_utils下的cmakelist文件中,具体如下:
再次编译,如果发现还有报错,且报下面所示错误:
这时只需要安装一下缺少的libdw的库即可:
sudo apt-get install libdw-dev
再次编译即可成功
4.下载imu_utils并编译
cd ~/imu_catkin_ws/src/
git clone https://github.com/gaowenliang/imu_utils.git
cd ~/imu_catkin_ws/src/
catkin_make
三、编写标定参数文件
cd ~/imu_catkin_ws/src/imu_utils/launch
touch d435i_imu_calibration.launch
gedit d435i_imu_calibration.launch
直接复制(这里的max_time_min代表的是标定时间,单位是分钟,推荐录30分钟左右):
<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= "d435i_imu_calibration"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "30"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
四、录制imu数据包
1.先开启相机:
roscore
roslaunch realsense2_camera rs_camera.launch
在录制的时候要保持相机静止不动
cd ~/imu_catkin_ws
rosbag record -O imu_calibration /camera/imu
等下数据包就会录制到这个位置,录制完之后就按下ctrl+c,结束录制你会发现当前目录有一个名为 imu_calibration.bag的文件
五、使用imu标定工具进行标定
1.终端一
source ~/imu_catkin_ws/devel/setup.sh
rosbag imu_utils d435i_imu_calibration.launch
2.终端二
source ~/imu_catkin_ws/devel/setup.sh
cd ~/imu_catkin_ws //数据包在这个文件夹下
rosbag play -r 200 imu_calibration.bag
标定完之后,看1的终端,会有一串东西产生,而且该终端已经可以输入命令了(意味着标定进程已经结束),说明已经标定好了,这时候要看结果
3.查看数据
cd ~/imu_catkin_ws/src/imu_utils/data
里面有一个文件:d435i_imu_calibration_imu_param.yaml就是你想要的IMU标定结果
%YAML:1.0
---
type: IMU
name: A3
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 1.0922514245261136e-04
gyr_w: 3.0407639130588035e-05
x-axis:
gyr_n: 1.1712350336249066e-04
gyr_w: 3.6395480767077183e-05
y-axis:
gyr_n: 1.0957986890514727e-04
gyr_w: 3.1881226725483150e-05
z-axis:
gyr_n: 1.0097205509019619e-04
gyr_w: 2.2946209899203768e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 1.4268671413807624e-03
acc_w: 6.3698303145662391e-04
x-axis:
acc_n: 1.2219441138445304e-03
acc_w: 5.3750668357445538e-04
y-axis:
acc_n: 1.2229466839249080e-03
acc_w: 6.0460048331990467e-04
z-axis:
acc_n: 1.8357106263728492e-03
acc_w: 7.6884192747551168e-04
我们需要用到的参数分别是陀螺仪和加速度计随机游走和高斯白噪声的平均值,是IMU噪声模型中的两种噪声:
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 1.0922514245261136e-04
gyr_w: 3.0407639130588035e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 1.4268671413807624e-03
acc_w: 6.3698303145662391e-04
参考文章:
Intel RealSense D435i Calibration_古路的博客-CSDN博客