利用 imu_utils 标定 imu

目录

前言

一、安装 imu_utils

二、编译出现的错误

三、操作步骤

四、结果


前言

        记录利用 imu_utils 标定 imu,最近在使用imu做导航,要对imu进行标定,使用标定得到的加速度的噪声和加速度随机游走噪声以及角速度的噪声和角速度的随机游走噪声。

        写的可能不详细,有问题的话可以直接评论交流!


一、安装 imu_utils

1、安装依赖项

sudo apt-get install libdw-dev

2、安装ceres

        参考高博slam十四讲,安装ceres。

3、编译 code_utils

cd ~/imu_calib_ws/src
git clone https://github.com/gaowenliang/code_utils
cd imu_calib_ws
catkin_make

4、编译 imu_utils

cd ~/imu_calib_ws/src
git clone https://github.com/gaowenliang/imu_utils
cd imu_calib_ws
catkin_make

二、编译出现的错误

1、找到报错的文件 sumpixel_test.cpp 把 #include "backward.hpp" 改为 #include "code_utils/backward.hpp"。

2、关于 vector 的错误,同样找到报错的文件,在头文件中添加#include <vector>即可。

三、操作步骤

1、录制 imu 数据

rosbag record -o imu_calib_data/data/imu_data.bag your_imu_topic

大概要录制两个小时左右

2、编写 launch 文件

        在 imu_utils 下的 launch 文件夹中创建 imu_test.launch 。内容如下

<launch>
    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/mobile_base/sensors/imu_data"/>//这里的value是你的imu的topic
        <param name="imu_name" type="string" value= "wheeltec"/>//这里的value是你的imu名字自定义
        <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
        <param name="max_time_min" type="int" value= "120"/>//这里的value值是你录制的imu的数据包的时间长度,这个value值一定要小于你录制的imu数据包
        <param name="max_cluster" type="int" value= "100"/>
    </node>
</launch>

        从下图中可以看出,录制的imu的数据包的时长是 7436s 。 

3、 运行 imu_test.launch 文件

cd ~/imu_utils_ws
source devel/setup.sh
roslaunch imu_utils imu_test.launch

 下图是标定之后的结果: 

4、播放bag包

rosbag play -r 100 imu_calib_data/data/imu_data.bag

四、结果

        实验结果如下图,其中标定得到的参数存放在 .yaml 文件中

         文件中的内容如下,其中gry_n,gry_w,acc_n,acc_w可以使用。要使用平均值的也就是avg-axis。


五、总结

        标定的时长要在两小时左右,否则标定出来的参数不够准确。标定得到的参数可以从imu的测量值中得到真实值,加速度角速度的真实值。

### imu_utils 标定流程 imu_utils 是一款用于IMU内参标定的工具,其主要功能是对IMU传感器进行精确校准以提高数据准确性。以下是关于该工具的具体标定流程: #### 1. 准备工作 在开始标定之前,需完成必要的准备工作,包括安装依赖项以及配置环境变量。具体操作如下: - 需要先安装 `code_utils` 工具包并成功编译[^3]。 - 修改 `sumpixel_test.cpp` 文件中的头文件路径,将其改为 `#include "code_utils/backward.hpp"`。 #### 2. 编译安装 imu_utils 按照官方文档说明,在指定目录下克隆 `imu_utils` 的源码仓库,并依次执行以下命令完成编译和安装: ```bash cd ~/catkin_ws/src git clone https://github.com/gaowenliang/imu_utils.git cd ~/catkin_ws/ catkin_make source ~/catkin_ws/devel/setup.bash ``` 上述步骤确保了 `imu_utils` 能够正常运行于当前ROS环境中。 #### 3. 数据采集 启动设备后进入静态或动态模式下的数据记录阶段。此部分通常涉及设置采样频率、时间长度等参数来获取足够的原始加速度计与陀螺仪读数作为后续处理的基础输入材料[^2]。 #### 4. 参数调整 通过图形界面或者终端指令交互方式设定初始估计值以及其他选项(如是否启用偏差补偿),这些都将影响最终结果的质量。 #### 5. 开始标定 当一切准备就绪之后即可正式开启标定程序。这一环节会利用前面收集到的数据计算出最佳拟合模型从而得到修正后的各项系数。 #### 注意事项 如果在整个过程中遇到了任何错误提示,则可以参照知乎专栏文章链接所提供的解决方案来进行排查解决:https://zhuanlan.zhihu.com/p/694439388。 ```python import rospy from std_msgs.msg import String def callback(data): rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data) def listener(): rospy.init_node('listener', anonymous=True) rospy.Subscriber('chatter', String, callback) rospy.spin() if __name__ == '__main__': listener() ``` 以上代码片段展示了一个简单的 ROS 订阅者节点示例,虽然它不直接参与 IMU标定过程,但它可以帮助理解如何构建基于消息传递机制的应用场景。
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值