Astra深度相机在Ubuntu18.04系统下实现相机标定

问题:

当使用Astra相机的启动的指令启动相机后,使用rviz查看相机所发布的rgb数据时,在终端会出现如下的提示信息:

Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found.

Camera calibration file /home/car/.ros/camera_info/depth_Astra_Orbbec.yaml not found.

可以看到提示的信息为相机的标定文件未能在 /home/car/.ros/camera_info/下找到,当我自己根据提示的路径去查找时,发现在/home/car/.ros/路径文件下,并没有camera_info这个文件夹,因此网上查询发现是因为自己没有对相机进行标定的缘故而导致。

下面就根据下面的步骤开始解决这个相机标定问题:

1、准备阶段

1)打印棋盘格,可在下面的这个网站链接中打印自己想要的尺寸的棋盘格,我设置的行列为7x10,大小为18mm的棋盘格

棋盘格网页链接:Camera Calibration Pattern Generator – calib.io

2)在Ubuntu18.04系统中安装标定功能包

sudo apt-get install ros-melodic-camera-calibration

2.1、标定彩色相机

1)启动相机节点

roslaunch astra_camera astra.launch

2)打开相机标定节点并指定话题(astra相机发布的彩色节点为:/camera/rgb/image_raw,可以使用 rostopic list 进行查看相机发布的节点名称

rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.018 image:=/camera/rgb/image_raw

其中的指令参考如下进行修改:

(1) size指的是:棋盘格内部的角点的行列数;

(注意:不是棋盘格的行列数,如我指定的行列为 7x10 ,则指令中的size就应就改为 6x9 ,因为这个对应的是棋盘格内部的角点的行列数。)

(2) square 是棋盘格每个格子的边长(可以自己用尺子量一下),我这里的是18mm,对应指令应输入0.018,因为指令的单位为米(m);

(3) image是图像话题名称,当Astra深度相机通常为/camera/rgb/image_raw,其他的相机可以通过 rostopic list 指令查看发布的相机节点名称。

3)在弹出的窗口相机视野中手持标定板,不断分别进行左右(X),上下(Y),远近(Size),倾斜(Skew)运动,尽量让这四个维度的进度条都为绿色。此过程要保证标定板上有彩色的条纹才为有效。这个过程中控制台也会打印出标定个数的日志。此过程也可以将标定板固定,然后移动相机。

(1)X:标定靶在摄像头视野中的左右移动;

(2)Y:标定靶在摄像头视野中的上下移动;

(3)Size:标定靶在摄像头视野中的前后移动;

(4)Skew:标定靶在摄像头视野中的倾斜转动

4)当右侧的CALIBRATE圆形按钮由灰色转为绿色时,说明数据采集完毕,此时点击CALIBRATE按钮,便开始读取之前保存的图片并执行标定计算,这里需要等待一会,因为计算需要时间。

5)有标定结果出来后,点击标定界面的SAVE按钮,再点commit按钮,标定结果保存在/tmp/calibrationdata.tar.gz这个压缩包中,到这里彩色相机的标定就结束了,关闭标定程序。

在终端中也会输出相应的标定结果。

6)保存后的标定文件为 /tmp/calibrationdata.tar.gz 的压缩包,将之解压,其中的 ost.yaml就是我们想要的标定结果。

打开ost.yaml,如下:

image_width: 640
image_height: 480
camera_name: narrow_stereo               #相机名称
camera_matrix:                                      #相机内参矩阵(相机坐标系->像素坐标系)
  rows: 3
  cols: 3
  data: [ 556.03872,    0.     ,  335.509  ,
            0.     ,  556.50706,  233.42121,
            0.     ,    0.     ,    1.     ]
distortion_model: plumb_bob
distortion_coefficients:                         #相机畸变系数
  rows: 1
  cols: 5
  data: [0.057411, -0.256237, 0.007304, 0.014521, 0.000000]
rectification_matrix:                             #矫正矩阵
  rows: 3
  cols: 3
  data: [ 1.,  0.,  0.,
          0.,  1.,  0.,
          0.,  0.,  1.]
projection_matrix:                               #投影矩阵(世界坐标系->图像坐标系)
  rows: 3
  cols: 4
  data: [ 547.36389,    0.     ,  345.97145,    0.     ,
            0.     ,  559.91687,  235.82042,    0.     ,
            0.     ,    0.     ,    1.     ,    0.     ]

【参数说明】

   camera_matrix:相机内参矩阵 (固有参数)

   distortion_coefficients:相机畸变系数 (固有参数)

   rectification_matrix:矫正矩阵(一般为单位阵 )

   projection_matrix:投影矩阵(世界坐标系到图像坐标系)

 7)然后将得到的标定文件 ost.yaml 进行名称的修改,此时的更改是根据刚刚报错的终端提文件名进行修改即可,刚刚终端提示的第一条是

Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found.

然后我们将刚刚彩色相机得到的标定文件 ost.yaml 的名称修改为 rgb_Astra_Orbbec.yaml ,并且还需要将该 yaml 文件中的 camera_name 也修改为 rgb_Astra_Orbbec ,不然后续运行的过程中会出现如下的提示:

[rgb_Astra_Orbbec] does not match name narrow_stereo in file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml

因为标定文件中默认的名称为 narrow_stereo ,而我们已经将彩色相机的标定文件修改为了 ost.yaml 的名称修改为 rgb_Astra_Orbbec.yaml ,因此为了保证不出现错误提示,还需要将 yaml 中的 camera_name 也修改为 rgb_Astra_Orbbec 便可解决此问题。

8)将刚刚修改的 rgb_Astra_Orbbec.yaml 移动到 /home/car/.ros文件下的/camera_info/文件夹中,由于我的 /home/car/.ros文件下没有/camera_info/文件夹,因此需要创建并移入

cd /tmp/calibrationdata/mkdir -p ~/.ros/camera_infomv rgb_Astra_Orbbec.yaml ~/.ros/camera_info/ 

到此处对于 Astra 相机的彩色部分标定完成。接下来对深度相机(红外相机)部分进行标定操作

2.2、标定红外相机

 1)标定ir红外相机与标定rgb彩色相机相比,除了第一步的image参数不同,其他都一样。

由于其深度数据的成像即为红外相机的投影光斑分析得到的,ir红外的相机标定结果即是深度相机的标定结果。

运行红外相机标定节点:

# 启动相机
roslaunch astra_camera astra.launch# 运行红外标定
rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.018 image:=/camera/ir/image

目前测试,在Ubuntu18.04下melodic预览图像内容是黑色的,如下图。但是在rviz下却可以正常查看。

原因是由于默认的IR图像数据是16-bit的,如果想清晰的显示出来,我们需要将之归一化成一个数值范围为0-255范围的8-bit图片。而rviz已经帮我们做了这样的归一化操作。

根据这个思想,我们实现一个图像类型转换节点,即订阅 /camera/ir/image 话题,将得到的16-bit的图片转换成8-bit,然后输出到 /camera/ir/image_mono8,想要输出为 /camera/ir/image_mono8的节点需要使用如下的转换文件才可以,网盘下载链接如下:

image_transformer.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

将此文件保存到catkin_ws/src文件下,然后使用 catkin_make 指令对刚刚的 image_transformer进行编译操作,编译完成后再次执行如下操作即可实现对红外相机的标定工作。

也可以通过如下指令进行克隆指令

cd catkin_ws/src
git clone https://gitee.com/tangyang/image_transformer

注意,一定得按照我下面的启动顺序依次启动运行指令,不然会出错

# 1)启动相机
roslaunch astra_camera astra.launch# 2)启动image_transformer转换节点
cd catkin_ws
source ./devel/setup.bash
rosrun image_transformer gray_image_transformer# 3)运行红外标定
rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.018 image:= /camera/ir/image_mono8

运行完 rosrun image_transformer gray_image_transformer 指令后,使用 rostopic list 指令便可以查询到转换后的8-bit节点,如下图所示:

运行红外标定指令后的图像如下:

然后便可以在标定程序中查看到如彩色相机标定的类似画面,其中标定的步骤和彩色相机部分一致,并且此处需注意,标定红外相机标定文件保存路径也是在/tmp/下,并且名称也是calibrationdata.tar.gz 的文件,需提前将前面的彩色相机的 calibrationdata.gz 的文件保存到其他地方,不然在红外相机标定文件保存时会将其覆盖。

此外,这里所得到的红外相机的标定文件打开也是和彩色相机相同的命名方式,将 ost.yaml 的名称修改为 depth_Astra_Orbbec.yaml ,将 yaml 中的 camera_name 也修改为 depth_Astra_Orbbec,然后保存修改文件,并使用如下指令将 depth_Astra_Orbbec.yaml 移动到 /home/car/.ros/camera_info/ 路径下

cd /tmp/calibrationdata/mv depth_Astra_Orbbec.yaml ~/.ros/camera_info/ 

至此,Astra 深度相机的整体标定已完成。

参考博客

奥比中光Astra相机(一)驱动安装及ROS标定 - 哔哩哔哩

使用标定文件出错:does not match name narrow_stereo in file /home/michael/.ros/camera_info/head_camera.yaml._[head_camera] does not match name narrow_stereo in-CSDN博客

Astra plus 深度相机校准标定-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(学习日记)2024.04.11:UCOSIII第三十九节:软件定时器

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

nacos分布式程序开发实例

1.通过windows docker desktop 完成 nacos 的安装/启动/配置 (1)先安装docker desktop docker-toolbox-windows-docker-for-windows-stable安装包下载_开源镜像站-阿里云 (2)配置docker 国内镜像源 Docker 镜像加速 | 菜鸟教程…

携程旅行 abtest

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章…

Linux|从 STDIN 读取 Awk 输入

简介 在之前关于 Awk 工具的系列文章中,主要探讨了如何从文件中读取数据。但如果你希望从标准输入(STDIN)中读取数据,又该如何操作呢? 在本文中,将介绍几个示例,展示如何使用 Awk 来过滤其他命令…

WPF使用MVVM,将Image中的图片绑定到OpenCVSharp中的Mat类型

看了很多帖子,代码复制过去都是报错的,查看了OpenCVSharp.Extensions的底层,发现用法在WPF中已经进行了更改,原本需要从Mat->Bitmap->BitmapImage,简化成了Mat->BitmapSource这一个过程,所以这也是…

基于单片机水塔水位检测控制系统设计

**单片机设计介绍, 基于单片机水塔水位检测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机水塔水位检测控制系统设计的主要目标是实现水塔水位的自动监测与控制,确保水塔内的水位始…

J基于微信小程序的电影订票、电影购票小程序

文章目录 1 **摘 要**2 技术简介**3 系统功能设计****第4章 系统设计****4.1系统结构设计** 第5章 系统实现**5.1管理员服务端功能模块**5.2用户客户端功能模块 结 论6 推荐阅读7 源码获取: 1 摘 要 本文从管理员、用户的功能要求出发,电影订票系统小程…

一文读懂RISC-V与ARM

RISC-V和ARM是近年来备受关注的两种处理器架构。RISC-V是一种基于精简指令集计算(RISC)原理的开源指令集架构(ISA),而ARM是一种专有ISA,由于其长期存在于嵌入式系统和移动设备中,已成为嵌入式系统和移动设备的主导选择。市场以及多年积累的信…

ElasticSearch中的分片,副本分别表示什么

在大多数环境中,每个节点都在单独的盒子或虚拟机上运行。 索引 - 在Elasticsearch中,索引是文档的集合。分片 -因为Elasticsearch是一个分布式搜索引擎,所以索引通常被分割成分布在多个节点上的被称为分片的元素。 一个索引被分解成碎片以便…

论如何在小程序展示超链接在线网页

在工作中遇到一个需求&#xff0c;就是在小程序中展示超链接网页&#xff0c;起初我是直接使用web-view标签 <web-view src"https://www.baidu.com/"/>但是web-view只能在开发阶段手机上展示&#xff0c;一旦小程序发布线上&#xff0c;就会出现下面这种情况“…

烤羊肉串引来的思考--命令模式

1.1 吃羊肉串&#xff01; 烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱&#xff0c;由于人实在太多&#xff0c;烤羊肉串的老板已经分不清谁是谁&#xff0c;造成分发错误&#xff0c;收钱错误&#xff0c;烤肉质量不过关等。 外面打游击烤羊肉串和这种开门店做烤…

React - 你知道在React组件的哪个阶段发送Ajax最合适吗

难度级别:中级及以上 提问概率:65% 如果求职者被问到了这个问题,那么只是单纯的回答在哪个阶段发送Ajax请求恐怕是不够全面的。最好是先详细描述React组件都有哪些生命周期,最后再回过头来点题作答,为什么应该在这个阶段发送Ajax请求。那…

7.1.4 Selenium 爬取京东商品信息实战

目录 1、实战内容 2、思路 3、分析 url 4、开始操作 1、得到 Cookies 2、访问页面&#xff0c;得到 response 3、解析页面 4、存入 MySQL 5、1-3步总代码 1、实战内容 爬取京东笔记本电脑商品的信息(如&#xff1a;价格、商品名、评论数量)&#xff0c;存入 MySQL 中…

JSBridge原理 - 前端H5与客户端Native交互

1. 概述&#xff1a; 在混合应用开发中&#xff0c;一种常见且成熟的技术方案是将原生应用与 WebView 结合&#xff0c;使得复杂的业务逻辑可以通过网页技术实现。实现这种类型的混合应用时&#xff0c;就需要解决H5与Native之间的双向通信。JSBridge 是一种在混合应用中实现 …

uni-app(H5)论坛 | 社区 表情选择 UI组件

项目源码请移步&#xff1a;bbs 效果 实现思路 表情切换 人物、动物、小黄人不同表情之间的切换实际就是组件的切换 emoji表情 emoji表情本身就是一种字符 如需其他emoji表情可参考 EmojiAll中文官方网站 需要注意的就是数据库的存储格式需要支持emoji表情&#xff0c;我项…

使用Python将多张图片转换为动态GIF图像

在本文中&#xff0c;我们将学习如何使用Python编写代码&#xff0c;将多张静态图片转换为一个动态的GIF图像。无论你的图片格式是JPEG&#xff08;.jpg&#xff09;还是PNG&#xff08;.png&#xff09;&#xff0c;我们都将使用Python中的PIL库来实现这一功能。通过本文的学习…

证书生成和获取阿里云备案获取密钥流程

1.在java文件夹下 输入 cmd 打开命令行窗口 2. keytool -genkey -alias 证书名 -keyalg RSA -keysize 2048 -validity 36500 -keystore 证书名.keystore 输入这一行&#xff0c;把证书名三个字 改成 项目的名称&#xff08;例如&#xff1a;D23102802&#xff09; 3. 密码默认填…

【HTML】简单制作一个分形动画

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建一个文本文档&#xff0c;其中HTML的文件名改为[index.html]&a…

金融企业区域集中库的设计构想和测试验证

导读 本文探讨了金融企业区域集中库的设计构想和测试验证&#xff0c;包括架构设想、数据库整合场景测试及优势和使用设想。作者提出利用 TiDB 数据库产品集中建设区域集中库&#xff0c;解决 MySQL 存量节点的整合问题&#xff0c;实现部署的标准化、按需扩展和统一运维管理。…

gitlab使用

个人笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔&#xff1a;工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 目录 一&#xff1a…