【1】AR Tag 在ros中的使用

1.定义

AR Tag 是一种用于增强现实(AR)应用中的视觉标记,用于跟踪和定位虚拟物体在现实世界中的位置。 AR Tag由黑白正方形图像表示,图像内部有黑色边框中的某些图案。它与我们经常用到的二维码长得类似,原理其实也一样,但其编码系统和二维码有很大的区别。

AR Tag 要用于做位姿识别,即通过相机图像识别 AR Tag 的位置和姿态,从而实现对AR标记物的定位。与二维码相比,AR Tag 的图案相对简单,仅包含黑白色块以及一些辅助图形,编码信息相对较少,因此其图案识别度更高。相比之下,二维码的图案复杂度较高,需要包含大量的信息,这会使得二维码在图像失真或光线不足等情况下更难以识别。

AR Tag 的类型有很多,他们使用不同的标签系统,每种类型各有优缺,下面展示了几种常见的图案。

ar_track_alvar 有四个主要功能:

  1. 生成不同大小、分辨率和数据的 AR Tag
  2. 识别和跟踪单个 AR Tag,可以选择与 kinect 深度数据集成获得更好的位姿识别效果
  3. 识别和跟踪由多个 AR Tag 组成的 “捆绑包”。以此可以获得更稳定的位姿识别、提高遮挡鲁棒性以及对多边物体的跟踪效果。
  4. 使用相机图像自动计算“捆绑包”中 AR Tag 之间的空间关系

2.使用场景

AR Tag 是一种低成本的位姿识别方式,因为它只需要使用相机和打印的标记(AR Tag)来进行实时跟踪,而不需要使用昂贵的传感器和硬件设备。另外,其算法实现也比其他传感器技术简单得多,所以可以快速而准确地识别位姿。基于其在应用上的便捷,这使得 AR Tag 成为许多实际场景的理想选择,比如:机器人导航、物体跟踪、增强现实和其他计算机视觉任务。

3.安装与生成

在 ROS 中使用 AR Tag 我们需要安装 ar_track_alvar 包,该软件包是一个 ROS 封装 Alvar 的开源 AR 标记跟踪库。

//安装 ar_track_alvar;ar_track_alvar 只支持ROS 1版本,并没有官方的 ROS2 版本。如果想在 ROS2 中使用ar_track_alvar,可能需要自己进行一些修改和适配。

sudo apt-get install ros-melodic-ar-track-alvar

// ar_track_alvar 包安装好后,就可以使用其提供的生成工具进行标签的生成了。一般常用的为数字编码的标签,其图案简单(也是相对的,数字0-9),可识别度相对较高:

rosrun ar_track_alvar createMarker -f 6 -s 10.0

4.在ros中使用

<launch><node pkg="tf" type="static_transform_publisher" name="base_to_camera" args="0.34 0 0.15 0 0 0 base_footprint camera_link 100" /><!-- AR tag 边框宽度 厘米  --><arg name="marker_size" default="4.0" /><arg name="max_new_marker_error" default="0.08" /><arg name="max_track_error" default="0.2" /><arg name="cam_image_topic" default="/camera/depth_registered/points" /><arg name="cam_info_topic" default="/camera/rgb/camera_info" /><arg name="output_frame" default="/camera_link" /><node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkers" respawn="false" output="screen"><param name="marker_size"           type="double" value="$(arg marker_size)" /><param name="max_new_marker_error"  type="double" value="$(arg max_new_marker_error)" /><param name="max_track_error"       type="double" value="$(arg max_track_error)" /><param name="output_frame"          type="string" value="$(arg output_frame)" /><remap from="camera_image"  to="$(arg cam_image_topic)" /><remap from="camera_info"   to="$(arg cam_info_topic)" /></node><!-- 开启摄像头  --><include file="$(find astra_camera)/launch/gemini.launch" /></launch>

 launch 文件主要为四个部分:

  1. 定义坐标转换
  2. 配置节点参数
  3. 开启摄像头

首先我们需要定义摄像头的位置,演示示例的摄像机是安装的机器人身上的,所以我们使用了 static_transform_publisher 发布了一个静态坐标转换,指定 camera_link,用于表示相机的位置和方向。使用TF(Transformation)库可以将坐标系之间的变换关系(transform)发布到ROS中,从而可以方便地进行相机的姿态控制和图像处理等操作。指定 camera_link 位姿时,我们使用的是 base_footprint ,其为机器人在地面上的投影位置,一般选择机器人中心。static_transform_publisher 的参数中我们定义了 camera_link 在空间的位置,是在 base_footprint 的前方 34cm 高 15cm 处。

配置 individualMarkers 的节点参数主要是定义 marker_size 黑色方块一侧的宽度,这里使用的单位是厘米,你可以在打印出 AR Tag 后进行测量填入。max_new_marker_error 和 max_track_error 是识别上的一些参数,分别表示在不确定的情况下检测到新标记的阈值和跟踪误差多少时认为标签消失,调整这些参数可以改变识别和跟踪效果,这里我们使用官方示例中的参考值。

另外,我们还需要配置一些摄像机图像数据相关的话题,cam_image_topic 深度摄像机点云数据,cam_info_topic 相机校准参数的主题名称,以便图像可以被校正,output_frame 发布的AR标签的笛卡尔坐标相对于哪个位置。

5.rviz展示效果

启动写好的 launch 后,我们就可以打开 rviz 来查看 AR Tag 的识别效果了。启动 rviz 后,我们首先修改 Global Option 的 Fixed Frame 为 base_footprint

接下来添加 TF 和 Marker 即可在界面中看到识别到的 AR Tag 了。在实际应用中,选择简单易识别的图案效果会更好,简单来说使用数字小的ID会更易识别。这其实取决于多个因素,如标签的大小,分辨率,摄像头的类型,光照条件等。

Reference:桑榆肖物

1.定义介绍» AR Tags and their Applications in Computer Vision Tasks – NUS Information Technology

2.ros使用

ar_track_alvar - ROS Wiki

3.ros小车实验

ar_track_alvar - ROS Wiki

4.launch文件可参考

point_cloud_process/launch/marker_track.launch at master · Hymwgk/point_cloud_process (github.com)

ar_track_alvar/launch/pr2_indiv.launch at indigo-devel · sniekum/ar_track_alvar (github.com)

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

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

相关文章

【序列推荐】MAN:跨领域顺序推荐的混合注意网络

#论文题目&#xff1a;MAN&#xff1a;Mixed Attention Network for Cross-domain Sequential Recommendation&#xff08;跨领域顺序推荐的混合注意网络&#xff09; #论文地址&#xff1a;https://dl.acm.org/doi/10.1145/3543507.3583278 #论文源码开源地址&#xff1a;http…

Java核心知识点整理大全19-笔记

目录 14.1.5.2. MemStore 刷盘 全局内存控制 MemStore 达到上限 RegionServer 的 Hlog 数量达到上限 手工触发 关闭 RegionServer 触发 Region 使用 HLOG 恢复完数据后触发 14.1.6.HBase vs Cassandra 15. MongoDB 15.1.1. 概念 15.1.2. 特点 16. Cassandra 16.1.1…

爬虫必学:Java创建代理ip池详细教程

目录 一、引言 二、代理IP池的基本概念 三、Java创建代理IP池的步骤 1、引入相关依赖 2、创建代理IP池类 3、代理IP的获取与释放 四、代理IP的获取方式 五、总结 一、引言 网络爬虫是自动从网站抓取信息的程序。在爬虫运行过程中&#xff0c;经常遇到的问题之一是目标…

应用密码学期末复习(1)

学习资料 应用密码学总结_应用密码学知识点总结-CSDN博客 应用密码学期末复习知识点总结_5的36次方mod97__PriDe的博客-CSDN博客 【密码学】密码学期末考试速成课&#xff0c;不挂科&#xff01;&#xff01;#高数帮_哔哩哔哩_bilibili 目录 学习资料 第一章 概述 1.1信息…

Linux基本指令汇总

本专栏内容为&#xff1a;Linux学习专栏&#xff0c;分为系统和网络两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握Linux。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;Linux从入门到精通 &#x1f69a;代码仓库&#xff1a;小…

每日一练2023.11.28——A-B【PTA】

题目链接&#xff1a;L1-011 A-B 题目要求&#xff1a; 本题要求你计算A−B。不过麻烦的是&#xff0c;A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉&#xff0c;剩下的字符组成的就是字符串A−B。 输入格式&#xff1a; 输入在2行中先后给出字符串A和B…

redis集群模式

集群模式 1.主从模式 一主多从模式。主节点可以负责:读操作&#xff0c;写操作。 从节点只能负责读操作&#xff0c;不能负责写操作。把读的压力从主节点分摊到从节点&#xff0c;以减少主节点的压力。 复制流程如下图&#xff0c; 从节点挂了&#xff1f; 从节点挂了在恢复…

【密码学引论】序列密码

第五章 序列密码 1、序列密码 定义&#xff1a; 加密过程&#xff1a;把明文与密钥序列进行异或运算得到密文解密过程&#xff1a;把密文与密钥序列进行异或运算得到明文以字/字节为单位加解密密钥&#xff1a;采用一个比特流发生器随机产生二进制比特流 2、序列密码和分组密…

java设计模式学习之【抽象工厂模式】

文章目录 引言抽象工厂模式简介定义与用途实现方式&#xff1a; 使用场景优势与劣势抽象工厂模式在spring中的应用银行和贷款服务示例代码地址 引言 在我们之前的讨论中&#xff0c;我们探索了工厂方法模式——一种简化单一产品创建的设计模式。现在&#xff0c;我们将视角转向…

Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134561660 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

1146:吃糖果(C语言)

题目描述 HOHO&#xff0c;终于从Speakless手上赢走了所有的糖果&#xff0c;是Gardon吃糖果时有个特殊的癖好&#xff0c;就是不喜欢连续两次吃一样的糖果&#xff0c;喜欢先吃一颗A种类的糖果&#xff0c;下一次换一种口味&#xff0c;吃一颗B种类的糖果&#xff0c;这样&…

开始使用Spring Boot Admin吧-使用Nacos注册SBA

什么是 Spring Boot Admin&#xff08;SBA&#xff09;? Spring Boot Admin 是 codecentric 公司开发的一款开源社区项目&#xff0c;目标是让用户更方便的管理以及监控 Spring Boot 应用。 应用可以通过我们的Spring Boot Admin客户端&#xff08;通过HTTP的方式&#xff0…