使用Allan_Variance_ROS功能包进行IMU标定


前言

以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按照实际修改即可使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值