imu内参标定,从数据录制到标定结果过程记录

2023-11-08

一、准备录制

这部分内容主要参考了博主 huawwenwnewn 的文章http://t.csdn.cn/yvkdz,非常感谢!

1、建立工作空间在imu_data.cpp 写入以下内容

mkdir -p publish_ws/src
cd publish_ws/src
catkin_create_pkg imu_publish std_msgs rospy roscpp
cd imu_publish/src
vim imu_data.cpp 

在imu_data.cpp 写入以下内容

// Step 1:  Include Library Headers:
//发布imu的数据到IMU_data
#include <ros/ros.h>
#include <sensor_msgs/Imu.h>

int main(int argc, char** argv)
{
    // Step 2: Initialization:
       ros::init(argc, argv, "imu");
    ros::NodeHandle n;

    ros::Publisher IMU_pub = n.advertise<sensor_msgs::Imu>("IMU_data", 20);
    ros::Rate loop_rate(50);
    while(ros::ok())
    {

            sensor_msgs::Imu imu_data;
            imu_data.header.stamp = ros::Time::now();
            imu_data.header.frame_id = "base_link";
            //四元数位姿,所有数据设为固定值,可以自己写代码获取IMU的数据,,然后进行传递
           imu_data.orientation.x = 0;
            imu_data.orientation.y = -1;
            imu_data.orientation.z = -5;
            imu_data.orientation.w = 6;
            //线加速度
            imu_data.linear_acceleration.x = 0.01;
            imu_data.linear_acceleration.y = 0.02;
            imu_data.linear_acceleration.z = 0.03;
            //角速度
            imu_data.angular_velocity.x = 0.05;
            imu_data.angular_velocity.y = 0.06;
            imu_data.angular_velocity.z = 0.07;



            IMU_pub.publish(imu_data);



        ros::spinOnce();
        loop_rate.sleep();
    }

    return 0;
}

改一下CMakeLists.txt

cd imu_publish
vim CMakeLists.txt

 添加以下内容

add_executable(imu_data src/imu_data.cpp)
target_link_libraries(imu_data ${catkin_LIBRARIES})

 如图所示

 

 回到工作空间下编译

2、硬件连接

将imu连接到电脑上,终端运行

ls -l /dev/ttyUSB*  //确定连接成功
sudo chmod 777 /dev/ttyUSB0  //打开串口权限

二、开始录制

终端1:运行roscore

终端2:发布imu数据

注意,这里要source一下,确定ROS_PACKAGE_PATH是在当前工作空间下。如图:

终端3:

rosbag record /IMU_data

等待两小时......然后ctr+C停止录制。注意,这里的 /IMU_data 是自己的话题名称,不要写错了,如果不知道是什么,看看前面编写的 imu_data.cpp 里面的 publisher 那一行。

若要查看录制包的信息:另开终端运行 

rosbag info 包名

 

 若要查看话题信息,终端4:rostopic echo /IMU_data  

若想可视化,终端5,运行命令rviz,在可视化界面点击ADD,选中imu_plugin底下的imu,点击ok。左侧Fixed Frame那里,填上对应的名称(终端4里有)。imu底下的topic那里,点击小三角,会出现,选中即可。最后会出现个坐标系,如图:

 三、配置imu标定的环境

这部分主要参考了博主Yudel Koh 的文章RealSense D435i + imu 标定 Ros Melodic_rs_camera.launch_Yudel Koh的博客-CSDN博客

1、安装ceres

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)

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

如果报错看看上面的参考文章。

4、下载imu_utils并编译

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

5、编写标定参数文件

cd ~/imu_catkin_ws/src/imu_utils/launch
touch imu_calibration.launch
gedit imu_calibration.launch

在imu_calibration.launch文件里写入以下内容:

<launch>

    <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
        <param name="imu_topic" type="string" value= "/IMU_data"/>
        <param name="imu_name" type="string" value= "wit_imu"/>  //这里是imu的名字,自己随便取
        <param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
        <param name="max_time_min" type="int" value= "120"/>  //单位:分钟,不要长于自己的录制时间
        <param name="max_cluster" type="int" value= "100"/>
    </node>



</launch>

(添加该文件之后不需要重新编译工作空间)

环境配置准备工作至此完成

四、开始标定imu内参

录制包默认放在主目录下,需将它拷到imu_catkin_ws 空间下,并改名为 imu_calibration.bag(如果在录制时制定存放位置和包名,这一步可以其实可以省掉,但是我没有用这个命令因为命令格式没写对)

终端1:

cd imu_catkin_ws
roslaunch imu_utils imu_calibration.launch

  终端2:

cd imu_catkin_ws
rosbag play -r 200 imu_calibration.bag  //以200倍的速度播放该文件 

标定结果,:文件wit_imu_imu_param.yaml

文件wit_imu_imu_param.yaml里的内容:

 至此,完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

imu内参标定,从数据录制到标定结果过程记录 的相关文章

  • Dialog的IDE搭建systermView的方法步骤(DA1469X)

    1 背景 SystemView 是一个可以在线调试嵌入式系统的工具 它可以分析有哪些中断 任务执行了 以及这些中断 任务执行的先后关系 还可以查看一些内核对象持有和释放的时间点 比如信号量 互斥量 事件 消息队列等 这在开发和处理具有多个线
  • C语言:格式化输入输出函数

    C语言 格式化输入输出函数 1 格式化输出函数 printf 2 格式化输入函数 scanf C语言提供的格式化输入输出函数的原型在头文件stdio h中声明 在使用时应在程序头部包含该文件 include
  • 不到 20 人的 IT 公司该去吗?

    今天早上在知乎看到一个挺有意思的话题 不到 20 人的 IT 公司该去吗 图片 回答区有一位老哥分享了自己在一个20 来人的小公司的奇葩工作经历 分享一下 下面是正文 刚到西安有幸加入了一个 20 来人的 it 公司 本来是不想去那种小公司
  • CSDN为什么会发展社区?看看官方怎么说

    文章目录 课前小差 23年可兼收名利 博客之星 红包活动 相聚线下 妙笔生花 原力计划 个人定位 为什么要发展社区 写在最后 课前小差 哈喽 大家好 我是几何心凉 这是一份全新的专栏 唯一得到CSDN王总的授权 来对于我们每周四的绿萝时间
  • “程序员转型管理:从擅长代码到掌控团队的踩坑总结”

    作为程序员 很多人会在职业生涯中考虑转型管理岗位 然而 这个转换并不容易 除了需要掌握管理方面的知识和技能外 还需要处理人际关系并带领团队一起前进 在这个过程中 很多人可能会踩到一些坑 以下是我总结的一些经验教训 一 控制欲 由于程序员需要
  • GSEA

    软件下载网址 GSEA gsea msigdb org GSEA不需要设置阈值过滤基因 有助于我们从整体通路分析差异 一 数据准备 1 数据集 tpm bulk gct 你需要分析的表达矩阵 建议bulk数据用tpm标准化后的 第一行 1
  • imu内参标定,从数据录制到标定结果过程记录

    一 准备录制 这部分内容主要参考了博主 huawwenwnewn 的文章http t csdn cn yvkdz 非常感谢 1 建立工作空间在imu data cpp 写入以下内容 mkdir p publish ws src cd pub
  • 自学软件测试6个月,找到了月薪8.5K的工作,多亏了这套学习方法

    8 5K的薪资也许对csdn的各位大佬来说并不算什么 但是对于我这种曾经在工厂 每月工资才4000左右的人来说 已经是巨大的改变了 文中附我的学习心得及学习资料 其实我在很早就对编程感兴趣 只是一直缺乏学习的动力 刚好在去年疫情期间 厂里停
  • 学编程太枯燥太难怎么办?

    大家好 我是老三 和大家分享一些我学编程的经历 那年二十 头发浓密如野狗 夏日炎炎 枯坐机房如木头 一根指头 颤颤巍巍如老叟 敲下了第一行 Hello World 开启了编程学习生涯 刚开始 参加的是学校的一个夏季编程训练营 起初是有学长学
  • 如何在 NodeJs 中上传、处理和存储文件:分步手册

    存储文件有三种基本方法 1 直接将其存储在数据库中 2 将其存储在文件系统中并将路径保存到数据库 3 将其存储在某些云存储中 例如 Amazon S3 Google Cloud Storage 或 Microsoft Azure Blob
  • Google学术打不开,简单方法汇总

    从5月27日开始 很多人反馈谷歌打不开 各种捉急中有木有 有些基于GMAIL查看订单邮件可是却打不开谷歌网页 各种蛋疼中有木有 部分公司除了业务员搜索客户使用谷歌外 也投了谷歌的广告推广 随着对谷歌的限制 连谷歌推广的后台也都无法打开了 目
  • 高效的学习方法

    背景 自己在复习自己专业课33页知识点时一筹莫展 死记硬背又记不住 背了上一个再背下一个上一个就忘记了 在复习的时候特别痛苦 而且定义性质的还是不能有错别字的 所以感觉自己背的特别痛苦 而且背完就忘 就像在做无用功 自己也想过用思维导图三遍
  • 费曼技巧学习笔记

    博主狂言 技巧正文 技巧的详细步骤 技巧步骤一 技巧步骤二 技巧步骤三 技巧的提纲总结 费曼技巧可以解决的问题 费曼技巧的另一种描述四步学习法 步骤一 步骤二 步骤三 步骤四 博主读后感 博主狂言 初识费曼技巧 甚是熟悉 博主自认有那么一点
  • 高效的学习方法(几个小技巧)

    几个学习小技巧 1 价值导向性学习法 发现 赋予学习内容意义或者使命感 价值导向性学习法是一种高效的思维方式 可以传递出这样的一种观点 学习上有意义 有价值的行为 而不是消极的 被动式的学习 首先 最重要的是赋予学习内容以意义 其次 定制清
  • ctfshow web入门——web2

    无法查看源代码 点击右键确实不行 直接ctrl u查看即可 但这个也可以用另一种方法查看网页源代码 即在网页url前面 view source
  • 普通人学Python有什么用?能干什么?

    我想学 Python 但是学完 Python 后都能干啥 相信不少 Python 的初学者 都会遇到上面的这些问题 很多的答案会涌入我们的脑海 因为Python实在是能做太多事情了 但是慢慢静下心来思考 我发现Python主要有三个方面的应
  • 操作符详解上(非常详细)

    目录 二进制介绍 二进制 2进制转10进制 10进制转2进制数字 2进制转8进制和16进制 2进制转8进制 2进制转16进制 原码 反码 补码 移位操作符 左移操作符 右移操作符 位操作符 逗号表达式 二进制介绍 在初学计算机时我们常常会听
  • 基于实例的学习方法

    基于实例的学习方法 动机 基本概念 基于实例的学习 基于实例的概念表示 1 最近邻 最近邻的例子 理论结果 最近邻 1 NN 解释 问题 K 近邻 KNN KNN讨论1 距离度量 KNN 讨论2 属性 KNN 属性归一化 KNN 属性加权
  • 第十四届蓝桥杯模拟赛(第一期)—保姆级解释(C语言版)

    1 二进制位数 问题描述 十进制整数 2 在十进制中是 1 位数 在二进制中对应 10 是 2 位数 十进制整数 22 在十进制中是 2 位数 在二进制中对应 10110 是 5 位数 请问十进制整数 2022 在二进制中是几位数 incl
  • 程序员工作压力大,为什么还这么多人想做程序员?是因为喜欢吗?

    最近过年遇到很多亲戚和朋友 不知道大家的身边是怎样的 阿粉身边的亲戚朋友从事计算机相关的还是挺少的 很多还是从事一些传统行业 最近跟一个亲戚聊天的时候就聊到网上对程序员的一些刻板影响 什么格子衫呀 拖鞋短裤呀 脱发以及 35 岁劝退等这些东

随机推荐

  • QT屏幕自适应自动布局,拖动窗口自动变大变小(一)

    QT屏幕自适应自动布局 拖动变大变小 困扰了很久 布局好ui后 随着屏幕分辨率的变化 换成笔记本或4k显示屏时 或最大化 拖动窗口 ui就乱了 挤在一起 或不能跟随窗口拉大而变化 布局是一个很重要的步骤 下面这张图 拖动窗口到最大化 结果是
  • 2020-07-23

    达梦数据库DSC搭建 原创 2020 03 17 zcn126 码龄2年 关注 一 环境准备 硬件 两台相同配置机器 2G 内存 20G 本地磁盘 2 块网卡 操作系统 Red Hat Enterprise Linux Server rel
  • ui测试怎么做?依据文档有哪些_软件开发流程涉及到哪些文档?其中有你需要了解的外包开发中的猫腻...

    此篇文章的目的 1 让软件开发业主了解软件开发过程中涉及的到具体文档以及它的作用 2 以文档的视角来感受整个开发过程 然后帮助业主选出优秀的外包开发方 软件开发整体流程介绍 需求分析 产品原型设计 UI设计 编码开发 测试 上线交付 1 需
  • 计算机网络---网络编程套接字(一)

    计算机网络 网络编程套接字之UDP数据报套接字编程 作者介绍 作者 偷偷敲代码的青花瓷 作者的Gitee 代码仓库 系列文章推荐 计算机网络 网络原理之初识 我和大家一样都是热爱编程 很高兴能在此和大家分享知识 希望在分享知识的同时 能和大
  • IntelliJ IDEA 插件下载安装教程 在线安装和本地安装教程

    随着idea用户越来越多 许多插件可以方便我们日常的开发 idea本身就可以下载安装这些插件 话不多说 上教程 在线安装 点击左侧 file gt settings 点击Plugins gt 输入想下载的插件名称 支持模糊查询 gt 选中想
  • GPT-4是一个好的数据分析师吗?

    文章目录 摘要 1 简介 2 相关工作 2 1 相关任务和数据集 2 2 GPT 3 ChatGPT GPT 4能力 3 任务说明 3 1 背景 数据分析师工作范围 3 2 我们的任务设置 4 我们的框架 4 1 步骤1 代码生成 4 2
  • Python爬虫系列(一)——手把手教你写Python爬虫

    1 什么是爬虫 根据百度百科的定义 网络爬虫 又称为网页蜘蛛 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 人们如今的生活 大都离不开网络 发一条微信 电子支付买一杯奶茶 刷一条微博 等等 都依赖于网络的便携性 但是 互联网茁壮
  • Vue 代码如何进行调试

    Vue 代码调试 console debugger 浏览器调试 推荐文章 初入职场 还是个前端小白 代码写不出来 师傅不在 小梦 vs 后端大兄弟 我运行了一个东西 一直出不来 后端大兄弟 我可以试一试断点 看哪里出错 后端大兄弟 我好像不
  • 数据结构---希尔排序

    希尔排序 逐步折半增量 JAVA实现 Hibbard增量 Sedgewick增量 总结 对原始数组预处理 然后使用插入排序 满足 数组元素较少和 数组大部分元素有序俩个条件 逐步折半增量 逐步分组进行粗调 再进行直接插入排序的思想 就是希尔
  • sql-labs 闯关 11~20

    sql labs 闯关 11 20 友善爱国公正敬业爱国爱国诚信自由友善爱国公正诚信民主和谐敬业平等 复习笔记1 内容 POST请求介绍 sql labs第11关 POST请求 基于错误 单引号 字符型 sql labs第12关 POST请
  • C++ 工厂模式

    简单工厂 简单工厂 定义一个类负责创建其他对象类的实例 而被创建的对象类一般都有共同的基类 一般来说简单工厂如果想创建一个对象类 只需要根据名字进行实例化 工厂就会创建相应的对象类 特点 简单的对不同类对象的创建进行了一层很薄的封装 inc
  • vi 常用命令行

    vi 常用命令行 1 vi 模式 a 一般模式 vi 处理文件时 一进入该文件 就是一般模式了 b 编辑模式 在一般模式下可以进行删除 复制 粘贴等操作 却无法进行编辑操作 等按下 i I o O a A r R 等 字母之后才能进入编辑模
  • 关于我用iVX沉浸式体验了一把0代码项目创建(2)

    关于iVX 前面已经写过两篇文章了 感兴趣的同学可以去看我前面两篇文章 传送门 云原生IDE iVX 1 iVX的系统架构 1 1 举一个例子 1 2 iVX前端技术框架 1 3 后台技术框架 1 4 后台应用逻辑分层 2 iVX体验 2
  • Windows和linux上安装maven3

    一 Windows上安装maven3 系统环境 Windows 7 64位旗舰版 jdk1 6 0 17 1 下载maven3 http maven apache org download html 下载 apache maven 3 1
  • 论文阅读_扩散模型_DM

    英文名称 Deep Unsupervised Learning using Nonequilibrium Thermodynamics 中文名称 使用非平衡热力学原理的深度无监督学习 论文地址 http arxiv org abs 1503
  • NTC PTC 压敏电阻 在电源电路中的作用

    NTC PTC 压敏电阻 在电源电路中的作用 来自dianyuan com 问题1 NTC电阻串联在交流电路中主要是起什么作用 它是怎样工作 请大侠指点 谢谢 问题2 压敏电阻并联在交流侧电路中主要是起什么作用 它是怎样工作 如果没有以上两
  • 理解DALL·E 2, Stable Diffusion和 Midjourney工作原理

    原文 理解DALL E 2 Stable Diffusion和 Midjourney的工作原理 知乎 者按 随着AIGC的兴起 各位小伙伴们对文生图工具DALL E 2 Stable Diffusion和Midjourney一定并不陌生 本
  • word转换成pdf,包括导航目录和图片不变黑

    1 word转换成pdf 包括导航目录和图片不变黑 有些时候将word转换成pdf 我们会发现生成的文件要么不带导航目录 要么就是图片显示有问题 比如变黑 变黑是因为某些图片在作图时修改了透明度 因此转换时会被转换为黑色 下面来说说解决办法
  • UDP之多播/组播

    目录 一 什么是多播 组播 为什么出现多播 组播 二 组播地址 三 主机网卡对应的编号 ifconfig命令 ip ad ip adress 获取网卡对应的编号 四 多播实现 一 什么是多播 组播 为什么出现多播 组播 由上节课讲到的广播
  • imu内参标定,从数据录制到标定结果过程记录

    一 准备录制 这部分内容主要参考了博主 huawwenwnewn 的文章http t csdn cn yvkdz 非常感谢 1 建立工作空间在imu data cpp 写入以下内容 mkdir p publish ws src cd pub