前言
以realsense D455相机内置IMU的标定来介绍Allan_Variance_ROS功能包进行IMU标定的整体流程以及实现效果,提供若干可能遇到问题的解决方案。
一、功能包源码编译
功能包源码暂时没有支持ROS2,需要在ROS1框架、Ubuntu20.04环境下进行编译。
在工作空间/src目录下克隆项目源码:
git clone https://github.com/ori-drs/allan_variance_ros.git
在工作空间目录下进行编译:
catkin_make
二、IMU数据包准备
以Realsense D455相机内置IMU为例:
在工作空间/src目录下安装Realsense D455的ROS1框架下SDK:
git clone -b ros1-legacy --single-branch https://github.com/IntelRealSense/realsense-ros.git
返回工作空间目录下编译:
catkin_make
修改rs_camera.launch文件参数:
1.修改IMU模式为“copy”,打开同步器,此时陀螺仪和加速度计数据将统一于话题“/camera/imu”中发布。
<arg name="unite_imu_method" default="copy"/>
<arg name="enable_sync" default="true"/>
2.打开陀螺仪和加速度计,设置输出频率为200。
<arg name="gyro_fps" default="200"/>
<arg name="accel_fps" default="200"/>
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
3.启动相机
roslaunch realsense2_camera rs_camera.launch
4.查看话题输出是否正确
rostopic list
看到话题“/camera/imu” 即可进行下一步。
5.录制数据包
rosbag record --duration=3h -O bag_name.bag /camera/imu
至少录制三个小时以上,时间越长标定结果越准确,记录数据期间要把IMU静置在平整的桌面上。
--duration参数可以修改录制时间,-O为数据包的名称,可以自定义,尽量以.bag为文件后缀。
三、IMU标定
1.按时间戳重新组织 ROS 消息
rosrun allan_variance_ros cookbag.py --input original_rosbag --output cooked_rosbag
--input参数:原始数据包的路径
--output参数:时间戳排序后的数据包名称,这里一定要以.bag结尾进行命名,否则会无法进行正常读取,无法输出.csv文件。
这是一个耗时操作,没有输出提示,大家耐心等待就好。完成后会在同级文件夹下生成对应文件。
2.运行Allan方差计算工具
rosrun allan_variance_ros allan_variance [path_to_folder_containing_bag] [path_to_config_file]
[path_to_folder_containing_bag]:时间戳排序后的数据包所在的文件夹路径,允许包含多个数据包。
[path_to_config_file]:配置文件的路径。
配置文件的写法:
config.yaml:
imu_topic: "/camera/imu"
imu_rate: 200
measure_rate: 200 # Rate to which imu data is subsampled
sequence_time: 12986 # 1 hour in seconds
imu_topic:IMU输出的话题名称,以实际为准。
imu_rate、measure_rate:统一设置一个频率即可,按照硬件性能酌情处理。
sequence_time:数据包的序列长度。
用下列命令查看数据包序列长度(录制时间)
rosbag play --pause bag_name.bag
下面是我的具体操作,Duration后的数字向下取整即可(不要超过),写入配置文件当中。
在第二步操作时可能出现以下问题,我们注意到Bag filename count: 0,也就是说没有读取到数据包,也不会有实际的allan_variance.csv输出,后续就会出现找不到allan_variance.csv的问题。
解决方案也非常简单,将数据包文件的后缀改成.bag即可,对应源码中对.bag文件的过滤。
正常情况下是有中间状态输出的,用时也比较长。
3.可视化绘图并获取参数
rosrun allan_variance_ros analysis.py --data allan_variance.csv
最后会在同级目录下生成校准文件imu.yaml和可视化曲线图。
下面是我的标定结果:
这是生成的imu.yaml文件的内容,rostopic和update_rate按照实际修改即可使用。