T265相机双目鱼眼+imu联合标定(全记录)

news2024/12/29 11:31:22

最近工作用到t265,记录一遍标定过程

1.安装驱动

首先安装realsense驱动,因为笔者之前使用过d435i,装的librealsense版本为2.55.1,直接使用t265会出现找不到设备的问题,经查阅发现是因为realsense在2.53.1后就不再支持t265了。

包括使用launch文件打开相机也不可以。

需要对其降级,于是到librealsense/build中执行sudo make uninstall删除。

新下载2.53.1版本:realsense各个版本

下载后,准备安装,这过程不要连接相机!

先安装依赖:

sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev

然后进入到下载好并解压的文件夹内执行以下命令:

sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger 
mkdir build
cd build
cmake …
make
sudo make install

完事就可以输入:

realsense-viewer

此时应该显示t265双目鱼眼相机的画面了

好,这一步成功

2.安装Realsense ROS

创建ros工作空间:

mkdir -p ~/realsense_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

然后下载文件:

git clone https://github.com/IntelRealSense/realsense-ros.git
git clone https://github.com/pal-robotics/ddynamic_reconfigure.git

编译并运行:

cd ..
catkin_make 
source devel/setup.bash
roslaunch realsense2_camera demo_t265.launch

就可以在rviz中添加话题查看左右目图像了。

3.安装imu标定工具:

code_utils:

mkdir -p ~/code_utils_ws/src
cd code_utils_ws/
catkin_make

下载包并编译:

sudo apt-get install libdw-dev
cd ~/code_utils_ws/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make

会报错:显示没有backward.hpp

只需要在include_directories中加入路径就好,如图:

再编译就好了。

然后下载imu_utils功能包,并编译:

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

这次很顺利。

然后需要在静置条件下录制imu包,我录为2h,在录包的时候一定要执行roslaunch rs_t265.launch,使相机工作。

 执行开始录制包:

rosbag record -O imu2h /camera/imu --duration=2h

然后标定过程需要在/home/shikai/code_utils_ws/src/imu_utils/launch这个路径下新建一个launch文件

<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= "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_topic为自己的imu话题和max_time_min时长,单位是分钟。

roslaunch imu_test.launch
rosbag play -r 200 imu2h.bag

这一步分开执行,有的博主没写清楚,执行第一步之后,程序会进入等待话题的状态,这时再执行第二步快进过一遍自己的rosbag,当bag包加速回放完毕后,执行launch的窗口仍然会显示wait for imu data.,等待一段时间计算,计算完毕后会显示计算结果。显示done之后,在/home/shikai/code_utils_ws/src/imu_utils/data这个文件夹下会出现一系列的data文件,打开yaml文件,会看到计算出来的噪声和随机游走的系数值。

到此时对imu标定完毕

4.安装kalibr:

这个网上有好多教程,不赘述,直接说录包命令

rosbag record -O test1 /camera/fisheye1/image_raw /camera/fisheye2/image_raw

对着标定板录包后,该实用kalibr进行标定了

rosrun kalibr kalibr_calibrate_cameras --target April.yaml --bag test1.bag --models omni-radtan omni-radtan --topics /camera/fisheye1/image_raw /camera/fisheye2/image_raw

rosrun kalibr kalibr_calibrate_cameras:这是ROS的命令格式,用于运行Kalibr包中的kalibr_calibrate_cameras程序。

--target April.yaml:这个参数指定了用于相机校准的标定板(标定靶)的配置文件。

--bag test1.bag:这个参数指定了包含相机图像数据的ROS bag文件。test1.bag是一个bag文件,其中包含了用于相机校准的图像数据。

--models omni-radtan omni-radtan:这个参数指定了相机模型的类型。omni-radtan是一种用于鱼眼相机的畸变模型,它考虑了径向畸变和切向畸变,适用于鱼眼镜头产生的强烈畸变。

--topics /camera/fisheye1/image_raw /camera/fisheye2/image_raw:这个参数指定了ROS话题

然后经过漫长的等待,最终得到双目相机标定结果

根据报告来看效果还可以 。

5.联合标定

首先新建文件touch imu.yaml

之前imu标定有一个yaml文件内容是这样的:

%YAML:1.0
---
type: IMU
name: imu
Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 2.0329310164723647e-03
      gyr_w: 2.2123382727191195e-05
   x-axis:
      gyr_n: 1.7189864293645056e-03
      gyr_w: 2.6415569244764821e-05
   y-axis:
      gyr_n: 2.7012961183810300e-03
      gyr_w: 2.2206632567010946e-05
   z-axis:
      gyr_n: 1.6785105016715576e-03
      gyr_w: 1.7747946369797813e-05
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 1.8852789385037937e-02
      acc_w: 4.0146583082726104e-04
   x-axis:
      acc_n: 1.6792437581239685e-02
      acc_w: 2.8762304968836755e-04
   y-axis:
      acc_n: 1.8515839456546758e-02
      acc_w: 5.7417816070608088e-04
   z-axis:
      acc_n: 2.1250091117327372e-02
      acc_w: 3.4259628208733464e-04

我们新建imu文件使用其中内容即可:

rostopic: /camera/imu
update_rate: 10.0 #Hz
 
accelerometer_noise_density: 1.8852789385037937e-02
accelerometer_random_walk: 4.0146583082726104e-04
gyroscope_noise_density: 2.0329310164723647e-03
gyroscope_random_walk: 2.2123382727191195e-05

这样就得到imu.yaml文件,加上之前得到t265相机标定yaml文件来联合标定,执行以下命令:

rosrun kalibr kalibr_calibrate_imu_camera --target April.yaml --bag test1.bag --cams test1-camchain.yaml --imu imu.yaml

等待好久,要一直优化,终端会显示这些,一直在迭代:

Optimizing...
Using the block_cholesky linear system solver
Using the levenberg_marquardt trust region policy
Using the block_cholesky linear system solver
Using the levenberg_marquardt trust region policy
Initializing
Optimization problem initialized with 17204 design variables and 656142 error terms
The Jacobian matrix is 1346674 x 77398
[0.0]: J: 1.18472e+06
[1]: J: 101749, dJ: 1.08297e+06, deltaX: 0.203747, LM - lambda:10 mu:2
[2]: J: 98905.9, dJ: 2843.45, deltaX: 0.0720314, LM - lambda:3.33333 mu:2
[3]: J: 98553.1, dJ: 352.821, deltaX: 0.0682763, LM - lambda:1.11111 mu:2
[4]: J: 98543.7, dJ: 9.38912, deltaX: 0.150521, LM - lambda:0.37037 mu:2

最终输出结果,外参、时间戳延迟之类:

T_ci:  (imu0 to cam0): 
[[-0.99999467  0.00187288 -0.00267487  0.01599095]
 [-0.00187503 -0.99999792  0.00080112  0.02327695]
 [-0.00267337  0.00080613  0.9999961  -0.01275659]
 [ 0.          0.          0.          1.        ]]

T_ic:  (cam0 to imu0): 
[[-0.99999467 -0.00187503 -0.00267337  0.0160004 ]
 [ 0.00187288 -0.99999792  0.00080613  0.02325724]
 [-0.00267487  0.00080112  0.9999961   0.01278067]
 [ 0.          0.          0.          1.        ]]

到这里就结束了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python数据分析|二 IPython和JupyterNotebooks

一 python 解释器 Python解释器同一时间只能运行一个程序的一条语句。 如何适用&#xff1a; win r cmd 要退出Python解释器返回终端&#xff0c;可以输入 exit() 或 Ctrl-D。 假设创建了一个 hello_world.py 文件&#xff0c;它的内容是&#xff1a; 可以用下面的命令运…

集群聊天服务器(2)Json介绍

目录 Json序列化Json反序列化 大家之间交流用json&#xff0c;想要发送数据&#xff0c;就把数据序列化成json,想要接收数据&#xff0c;就反序列化成自己程序的语言。 Json序列化 可以直接赋值一个容器对象 js[‘xx’]vec; #include "json.hpp" using jsonnlohman…

ES信息防泄漏:策略与实践

Elasticsearch(简称ES)作为一个开源的搜索和分析引擎&#xff0c;在实时搜索和分析大量数据方面发挥着重要作用。然而&#xff0c;随着数据的增长&#xff0c;ES的信息安全和隐私保护成为了关键问题。信息防泄漏对于ES来说至关重要&#xff0c;它不仅关乎数据的完整性&#xff…

NVR批量管理软件/平台EasyNVR多个NVR同时管理使用时需要开放的端口

随着科技的飞速发展&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为维护安全、提升效率的重要工具。为了更有效地管理和利用这些宝贵的视频资源&#xff0c;视频联网与整合技术应运而生&#xff0c;旨在打破地域与设备限制&#xff0c;实现视频资源的实时共享与…

设计模式(四)装饰器模式与命令模式

一、装饰器模式 1、意图 动态增加功能&#xff0c;相比于继承更加灵活 2、类图 Component(VisualComponent)&#xff1a;定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。ConcreteComponent(TextView)&#xff1a;定义一个对象&#xff0c;可以给这个对象添加一…

PL/SQL执行.sql文件

1.编写.sql文件&#xff0c;创建update.sql文件&#xff0c;文件如下&#xff1a; set feedback offset define off--更新表中所有人的年龄update a set age18;prompt Done. 2.打开plsql选择命令窗口&#xff0c;即选择File->New->Command Window&#xff1b; 打开后的…

改扩配系列:浪潮英政服务器CS5280H2、IR5280H2——板载前置3.5寸*12口背板

机器配置情况 机器是云产品原厂配置的超融合一体机3.5*12背板出厂接法&#xff0c;前置是硬盘背板作为超融合数据盘是直通的&#xff0c;使用板载接口没有过raid卡。 主板上的接口既是pcie转接卡的接口&#xff0c;又是sata控制器的接口&#xff0c;如果是nvme_ssd我能理解&am…

【3D Slicer】的小白入门使用指南四

开源解剖影像浏览工具Open Anatomy Browser使用及介绍 和3D slicer米有太大关系,该工具是网页版影像数据的浏览工具(可以简单理解为网页版的3D slicer) 介绍 ● 开放解剖(OA)浏览器是由神经影像分析中心开发的,基于网络浏览器技术构建的图谱查看器。 ● OA浏览器将解剖模…

基于正则化算法的SAR图像去噪matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1SAR 图像噪声模型 4.2 正则化算法基本原理 5.完整工程文件 1.课题概述 基于正则化算法的SAR图像去噪matlab仿真&#xff0c;仿真输出SAR图像去噪结果&#xff0c;正则化参数收敛曲线&#xff0c;同时…

【2024软考架构案例题】你知道 Es 的几种分词器吗?Standard、Simple、WhiteSpace、Keyword 四种分词器你知道吗?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

qt QUndoCommand 与 QUndoStack详解

1、概述 QUndoCommand 和 QUndoStack 是 Qt 框架中用于实现撤销/重做&#xff08;undo/redo&#xff09;功能的两个核心类。QUndoCommand 是表示单个可撤销操作的基类&#xff0c;而 QUndoStack 则负责管理这些命令的堆栈&#xff0c;提供撤销和重做操作的接口。 QUndoCommand…

数据分析:16s差异分析DESeq2 | Corncob | MaAsLin2 | ALDEx2

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍DESeq2原理计算步骤结果Corncob原理计算步骤结果MaAsLin2原理计算步骤结果ALDEx2原理计算步骤结果加载R包数据链接数据预处理微生物数据样本信息提取物种名称过滤零值保留结果读取…

【模块化大作战】Webpack如何搞定CommonJS与ES6混战(3)

在前端开发中&#xff0c;模块化是一个重要的概念&#xff0c;不同的模块化标准有不同的特点和适用场景。webpack 同时支持 CommonJS 和 ES6 Module&#xff0c;因此需要理解它们在互操作时 webpack 是如何处理的。 同模块化标准 如果导出和导入使用的是同一种模块化标准&…

python入门3

IDE的概念 IDE(Integrated Development Environment)又被称为集成开发环境。说白了&#xff0c;就是有一款图形化界面的软件&#xff0c;它集成了编辑代码&#xff0c;编译代码&#xff0c;分析代码&#xff0c;执行代码以及调试代码等功能。在我们Python开发中&#xff0c;最常…

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

【游戏引擎之路】登神长阶&#xff08;十四&#xff09;——OpenGL教程&#xff1a;士别三日&#xff0c;当刮目相看 2024年 5月20日-6月4日&#xff1a;攻克2D物理引擎。 2024年 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 2024年 6月13日-6月20日&#xff1a;攻克《3D…

机器情绪及抑郁症算法

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…

建设展示型网站企业渠道用户递达

展示型网站的主要作用便是作为企业线上门户平台、信息承载形式、拓客咨询窗口、服务/产品宣传订购、其它内容/个人形式呈现等&#xff0c;网站发展多年&#xff0c;现在依然是企业线上发展的主要工具之一且有建设的必要性。 谈及整体价格&#xff0c;自制、定制开发、SAAS系统…

【Jenkins实战】Windows安装服务启动失败

写此篇短文&#xff0c;望告诫后人。 如果你之前装过Jenkins&#xff0c;出于换域账号/本地帐号的原因想重新安装&#xff0c;你大概率会遇上一次Jenkins服务启动失败提示&#xff1a; Jenkins failed to start - Verify that you have sufficient privileges to start system…

vue自定义计算器组件

自定义组件实现以下简单的计算器功能&#xff1a; 创建计算器组件文件calculator.vue&#xff0c;代码如下&#xff1a; <template><div class"calculator"><!-- 当前运算过程显示区域 --><div class"expression">{{ currentExpr…

耗时2个月,我整理出一套牛客网最热门的Java面试题合集!能够轻松应对面试官的“连环炮”

说快也快&#xff0c;说不快也不慢&#xff01; 年前&#xff0c;陆陆续续&#xff0c;好多大厂都在裁员&#xff1b; 年后&#xff0c;又有一大批程序员失业&#xff0c;找不到避风港&#xff1b; 这时候&#xff0c;就有人说了&#xff0c;为什么找工作这么难&#xff1f;…