Intel Realsense D405 在Ubuntu18.04下使用kalibr标定

news2024/11/30 8:56:09

目录

  • 一. 在ubuntu下使用kalibr标定
    • realsense_ros的安装总结
    • 下面是标定步骤

一. 在ubuntu下使用kalibr标定

在Realsense官网上librealsense现在D405只接受ROS2下的环境(相机确实很新)

在ROS1下我想到了改设备ID号的方式进行标定

这里需要注意librealsense以及realsense_ros的版本对应问题,一定要注意这点不然后面roslaunch会报错

D405没有IMU所以标定会简单一些

这里我的librealsense的版本选用的是 2.50.0的版本 realsense_ros选用的是2.3.2的版本
在这里插入图片描述

虽然这里不支持D405,但是后面我们可以通过改ID的方式进行roslaunch,不用重装ROS2

在这里插入图片描述
libreansense 的安装方法不过多介绍了,可以去看其它博主说的

这里的话我先空着后面总结

realsense_ros的安装总结

  1. 创建工作站
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/

在src下添加下好的realsense_ros包 2.3.2版本

安装realsense_ros时

  1. 修改constants.h文件中的
    在这里插入图片描述
 rs405=0x0B5B
  1. 编译工程环境,安装realsense_ros
catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install

如果说你重新安装了librealsense版本,那么这里需要重新对realsense_ros进行编译

这里我之前没注意对应问题,重新装了librealsense
那么就涉及到librealsense的卸载问题

a. 如果您使用了apt-get安装,请运行以下命令卸载

sudo apt-get remove librealsense2-utils
sudo apt-get remove librealsense2-dev
sudo apt-get remove librealsense2-dkms
sudo apt-get remove ros-${ROS_DISTRO}-realsense2-camera

其中${ROS_DISTRO}应替换为您正在使用的ROS发行版,例如melodic或noetic。

b. 如果您手动编译和安装了librealsense和realsense-ros,则可以使用以下命令删除文件:

sudo rm -rf /usr/local/include/librealsense2
sudo rm -rf /usr/local/lib/librealsense*
sudo rm -rf /usr/local/share/realsense-ros

如果您在 ~ /.bashrc或~/.bash_profile中设置了环境变量,请删除与RealSense相关的行。

如果还有残留可以直接在ubuntu内搜索librealsense,直接删除所有跟版本号有关的文件,直到无法直接roslaunch 启动相机节点。紧接着再进行librealsense正确版本的安装。

安装完新的librealsense,在终端启动realsense-viewer 查看现在版本号 是否对应

  1. 紧接着启用相机节点,添加rviz话题是否正常
roslaunch realsense2_camera rs_camera.launch
 
rostopic list
#查看话题列表
 
rviz
#打开rviz订阅几个节点就可以看到效果

在这里插入图片描述

下面安装kalibr,这里也不过多介绍

下面是标定步骤

用工具生成标定板

在这里插入图片描述

cd ~/kalibr_workspace   //你的工程路径
source ./devel/setup.sh
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.022 --tspace 0.3

步骤一:建立的ROS中的Kalibr的工作空间,新建april_6x6_A4.yaml文件,格式参考上图的yaml,这个是写你标定板的参数内容,和上面的对应,等会传入系统,内容为:

target_type: 'aprilgrid' #gridtype
tagCols: 6                   #number of apriltags
tagRows: 6                 #number of apriltags
tagSize: 0.022            #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize

测量实际长度后,请自行更改 yaml文件内参数

步骤二:确定realsense D405放在合适位置

新打开终端,运行rviz

rviz

在rviz中将Global Option中的Fixed Frame后面选择camera_link(我这边出错,不选问题不大)

点击Add在topic中分别选择

/camera/color/image_raw、/camera/infra1/image_rect_raw、/camera/infra2/image_rect_raw,打开(双击camera)即添加成功。

如果没有发现infra的, 需要修改节点名称为true, 并重新编译realsense_ros
在这里插入图片描述

在这里插入图片描述
步骤三:修改相机帧数(官方推荐是4Hz,尽管实际频率不完全准确,但是不影响结果)

rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color

rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left

rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right

步骤四:录制ROS数据包

使用Ctrl+shift+T,打开另一个新的终端运行:

rosbag record -O multicameras_calibration /infra_left /infra_right /color

后面三个topic就是转换频率后的topic,我录制了3分钟,录的时候对着标定板移动,按下ctrl+c 结束录制,看到当前文件夹会出现multicameras_calibration.bag文件。

步骤五:使用Kalibr标定

先激活环境变量

source ~/kalibr_workspace/devel/setup.bash

然后运行:

rosrun kalibr kalibr_calibrate_cameras --target checkerboard.yaml --bag  multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction --approx-sync 0.04

我直接用kailr_calibrate_cameras会提示找不到这个命令,后面发现必须在rosrun下进行

除此之外,这里我提示rosbag中没找到infra_right的节点

然后我改用了下面的代码

rosbag record -O multicameras_calibration /infra_left /color
rosrun kalibr kalibr_calibrate_cameras --target april_6x6_A4.yaml --bag  multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction

其中–target …/yaml/april_6x6_A4.yaml是标定板的配置文件,注意如果选择棋格盘,注意targetColstargetRows表示的是内侧角点的数量,不是格子数量。–bag multicameras_calibration.bag是录制的数据包,models pinhole-equi pinhole-equi pinhole-equi表示三个摄像头的相机模型和畸变模型(解释参考https://github.com/ethz-asl/kalibr/wiki/supported-models,根据需要选取), --topics /infra_left /infra_right /color表示三个摄像头对应的拍摄的数据话题,–bag-from-to 10 100表示处理bag中10-100秒的数据。–show-extraction表示显示检测特征点的过程,这些参数可以相应的调整。

最终得到的结果为三个文件:

camchain-multicameras_calibration.yaml

report-cam-multicameras_calibration.pdf

results-cam-multicameras_calibration.txt

标定完成

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

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

相关文章

蓝桥杯并查集总结

本文先是给出三篇并查集原理解释文章链接,又提供了python代码模版;而后给出了一份蓝桥杯并查集的题单,并附有部分题目及其求解思路、代码。 目录部分 并查集原理 python代码 并查集题单 蓝桥幼儿园 题目描述 输入描述 输出描述 输入…

ERP有哪些系统?运用在哪些行业?

国内目前市面上ERP系统五花八门,但能真正快速匹配企业业务,且可以进行快速迭代二次开发的系统并不多见。 所以在选择ERP系统的时候可以参考下面这张表格中的内容: 目前常见的ERP软件大概可以分为三大类: ① 标准ERP应用&#xf…

白银实时价格应该在最适合的地方下注

小时候我们看战争片,总是发现主角们带兵打仗,战无不胜,偶尔有一场大的失利,但是总是能耐化险为夷,逢凶化吉,甚至最后成功反扑、反败为胜。后来小编一琢磨,发现,其实这些将才们打仗&a…

如何使用C++ 在Word文档中创建列表

列表分类是指在Word文档中使用不同格式排序的列表,来帮助我们一目了然地表达出一段文字的主要内容。比如,当我们描述了某个主题的若干点,就可以用列表把它们一一表达出来,而不是写成完整的段落形式。同时,列表也可以帮…

如何查看mysql里面的锁(详细)

通过查询表统计信息查看 information_schema库下相关事务表和锁相关信息表介绍innodb_trx存储了当前正在执行的事务信息trx_id:事务ID。trx_state:事务状态,有以下几种状态:RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。trx…

各位自学网络安全的同学,你们的学习路线真的对吗

最近在知乎上看到很多问题,都是小白想要转行网络安全行业咨询学习路线和学习资料的,作为一个培训机构,学习路线和免费学习资料肯定是很多的。机构里面的不是顶级的黑阔大佬就是正在学习的同学,也用不上这些内容,每天都…

Educational Codeforces Round 139 (Rated for Div. 2)

Educational Codeforces Round 139 (Rated for Div. 2) Problem - 1766E - Codeforces 显然我们可以把0序列的贡献单独算: i*(n-i1) 考虑只存在1,2,3的情况. 首先通过,观察到一个重要性质: 最多只有三种序列. 含有3或纯1或纯2型.纯1或纯2型纯2或纯1型 我们每次添加…

照片资源异地共享 ? tftgallery、xampp、快解析三种工具就能实现!

我的工作中,经常会收到处理各种图片的任务,在处理完图片之后,怎么发送给客户呢?传输的实现,需要一个安全而稳定的环境和即时方便的工具去进行操作与下载。一般情况下,我们大多会选择微信、QQ来作为传输下载…

Seata AT模式源码解析三(AT模式工作机制)

文章目录 代码示例流程源码解析开启全局事务注册分支事务一阶段提交全局事务提交分支事务二阶段提交全局事务回滚分支事务二阶段回滚 代码示例 从一个微服务示例开始,案例采用Seata官方提供的Demo。 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持&…

五大网络IO模型

网络IO模型 1. IO是什么? I/O(英语:Input/Output),即输入/输出,通常指数据在存储器(内部和外部)或其他周边设备之间的输入和输出,是信息处理系统&#xff0…

Qt编程基础 | 第七章-MVD框架 | 7.1、MVD框架简介

一、MVD框架 1.1、MVC设计模式 MVC是一种与用户界面相关的设计模式,通过使用该设计模式,可以有效的分离数据与用户界面。MVC设计模式包含三个元素:表示数据的模型(Model)、表示用户界面的视图(View&#x…

Android开发 外部存储空间

一、存储空间 对Andriod来说,存储空间分为内部存储空间和外部存储空间。 外部存储空间也就是常说的SD卡,可以分为私有存储空间和公共存储空间。 内部存储空间和外部存储空间的私有存储空间,都是每个APP独有的,不允许其他APP访问…

超详细的wireshark抓包使用教程

前言 Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括: 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该…

sql函数练习题

1. 计算用户8月每天的练题数量 题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。 示例:question_practice_detail iddevice_idquestion_idresultdate12138111wrong2021-05-0323214112wrong2021-05-0933214113wro…

2019上半年上午题

2019上半年上午题 a c c c d b b 应用代理网关防火墙 c a 使用数字证书对用户的身份进行认证 d 发送方的私钥签名,发送方公钥确认 d b 职务作品:归公司所有 a b b 从抽象到具体 d 等差数列求和: d 构建节点之间的关系图 然后…

4.Ansible Inventory介绍及实战 - A list or group of lists nodes

什么是inventory? 官方解释:Ansible automates tasks on managed nodes or “hosts” in your infrastructure, using a list or group of lists known as inventory. Ansible可以同时与您基础设施中的一个或多个系统协同工作。为了与多台服务…

音视频学习:同步原理及实现

1.音视频同步简单介绍 对于一个播放器,一般来说,其基本构成均可划分为以下几部分: 数据接收(网络/本地)->解复用->音视频解码->音视频同步->音视频输出。 基本框架如下图所示: 为什么需要音视…

Python学习之批量word文档转pdf并统计其页码

pypdf2是一个Python模块,可以用来读取、写入和操作PDF文件。要安装pypdf2模块,请按照以下步骤操作: 确保你已经安装了Python。你可以在终端或命令提示符中输入python --version来检查Python是否已安装。 pypdf2模块的安装: Modu…

【2023年电工杯数学建模竞赛B题人工智能对大学生学习影响的评价】完整思路分析+完整代码

1.问题背景与描述 这道题整体还是相对简单的,比较适合新手,选的人多对应获奖数量也会多,所以不要纠结于选题,就选你看上去能做的就好 2.问题分析 2.1 问题一的分析 对附件2中所给数据进行分析和数值化处理,并给出处…

GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统(附源码)

商城介绍 商城系统支持商家入驻,后端基于SpringBoot 研发,前端使用 Vue、uniapp开发, 系统全端全部代码开源 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者。 商城 …