深度相机,通过2d检测得到目标坐标系的3d检测框

news2024/9/22 12:31:47

算法流程图如下
在这里插入图片描述

1. 输入同步

  • 订阅三个主题:
    • 深度图像 (depth_image)。
    • 相机信息 (depth_info)。
    • 2D目标检测 (detections)。
  • 使用 message_filters.ApproximateTimeSynchronizer 来同步这些输入,以确保处理的消息是对应的。

2. 计算2D边界框的中心位置和尺寸

  • 通过yolo模型获得每个目标的2D边界框。这些边界框由其中心点坐标 (center_x, center_y) 和尺寸 (size_x, size_y) 表示。
  • center_xcenter_y 表示2D边界框在图像平面中的中心点坐标,而 size_xsize_y 则分别表示边界框的宽度和高度。

3. 使用深度图像找到对应的深度(Z)值

  • 2D边界框的中心点对应图像中的一个像素点,通过深度图像可以获取该像素点的深度值(即Z值)。深度图像的每个像素值表示从相机到该点的距离,通常以毫米或米为单位。

4. 通过相机的内参将其转换为世界坐标系中的3D位置(X, Y, Z)

  • 相机内参矩阵 K 包含了相机的焦距(fxfy)以及主点坐标(光学中心)pxpy。相机内参矩阵的形式如下:
    K = [ fx   0  px
           0  fy  py
           0   0   1 ]
    
  • 根据针孔相机模型,图像中的2D点 (u, v) 和3D空间中的点 (X, Y, Z) 的关系可以表示为:
    X = Z * (u - px) / fx
    Y = Z * (v - py) / fy
    
  • 其中,Z 是从深度图像中获取的深度值,(u, v) 是图像中的像素坐标,即2D边界框的中心点坐标 (center_x, center_y)
  • 通过这个公式,计算出在3D空间中对应的 XY 坐标,这些坐标连同深度 Z 一起定义了2D边界框在世界坐标系中的3D位置 (X, Y, Z)

5. 计算3D边界框的尺寸

  • 在得到 Z 值之后,可以进一步计算3D边界框的宽度 W 和高度 H。这些值通过以下公式计算:
    W = Z * (size_x / fx)
    H = Z * (size_y / fy)
    
  • 这里的 size_xsize_y 是2D边界框的宽度和高度,fxfy 是相机的焦距,Z 代表的是2D边界框中心点的深度值。
  • 通过这些公式,可以将2D边界框的尺寸投影到3D空间,得到3D边界框的宽度和高度。

6. 生成3D边界框消息

  • 最终,代码将计算出的3D位置 (X, Y, Z) 和尺寸 (W, H, D) 组装成一个 BoundingBox3D 消息,该消息包含了3D边界框的中心位置和尺寸。

这整个过程将图像中的2D信息和深度图像中的距离信息结合起来,从而生成了目标在世界坐标系中的3D表示。

7. 发布结果

  • 最后,生成的3D检测结果(包括边界框和关键点),生成的3D边界框转换到目标坐标系(例如base_link)。这个方法通过应用平移旋转操作,将3D边界框对齐到指定的target_frame参数对应的坐标系中。

8. 坐标转换过程:

  1. 获取转换信息

    • 获取从当前坐标系到目标坐标系(例如base_link)的转换信息。这个信息包括:
      • 平移向量:描述如何将物体从一个坐标系移动到另一个坐标系的平移操作。
      • 旋转四元数:描述如何旋转物体以对齐到目标坐标系。
  2. 应用平移和旋转

    • 接受生成的3D边界框以及从get_transform`方法获得的平移和旋转信息。转换过程如下:

    a. 平移

    • 首先,对3D边界框的中心位置(x, y, z)应用平移操作。平移向量translation被加到3D边界框的中心位置坐标上,使得3D边界框的位置移动到目标坐标系。

    b. 旋转

    • 然后,使用旋转四元数rotation对3D边界框的中心位置和尺寸进行旋转。这个旋转会改变3D边界框的方向,使其对齐到目标坐标系的方向。

    具体过程:

    • 位置转换:通过qv_mult方法,旋转四元数与位置向量进行乘法运算,得到旋转后的位置,再加上平移向量,最终得到转换后的3D边界框中心位置。
    • 尺寸转换:同样的旋转操作也会应用到边界框的尺寸向量上,以确保3D边界框在新坐标系中的形状和方向正确。
  3. 更新坐标系信息

    • 最后,3D边界框的信息(如位置、尺寸)被更新为新坐标系中的数据,并且3D边界框的frame_id属性被设置为目标坐标系(target_frame,例如base_link)。

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

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

相关文章

GET新知识-如何通过Ubuntu和Windows进行文件交互

知识记录篇改求助篇了呜呜呜~~~ ,到最后一步passwd咋样都无法链接了。 1.通过下载open SSH进行交互 输入Linux命令: sudo apt install openssh-server 然后就会出现这个,输入Y确认,即可安装成功 2.在Windows上也安装open SSH,具体…

CAN总线详解-理论知识部分

目录 CAN总线简介 CAN总线硬件电路 CAN电平标准 CAN收发器 ​编辑 CAN物理层特性 CAN总线帧格式 数据帧 数据帧格式 数据帧发展历史 遥控帧 错误帧 过载帧 帧间隔 位填充 波形实例 CAN总线接收方数据采样 接收方数据采样遇到的问题 位时序 硬同步 再同步 波…

月销量不足1000的新能源车,都是什么人在买?

近日,盐城经济技术开发区人民法院决定受理高合汽车母公司华人运通(江苏)技术有限公司预重整申请。 由此,高合汽车正式破产重整。无独有偶,恒大汽车附属公司广东恒大新能源汽车和智能汽车也被申请破产重整。 高合和恒…

使用API有效率地管理Dynadot域名,对拍卖的域名进行出价

前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

python实现每天定时发送邮件

文章目录 步骤 1: 安装所需的库步骤 2: 编写发送电子邮件的 Python 脚本步骤 3: 配置电子邮件发送服务步骤 4: 运行脚本进一步扩展 要编写一个用于自动发送每日电子邮件报告的 Python 脚本,并配置它在每天的特定时间发送电子邮件,使用 smtplib 和 emai…

高可用集群keepalived的应用以及部署

1.高可用集群 1.1.集群类型 LB:Load Balance 负载均衡 LVS/haproxy/nginx(http/upstream,stream/upstream) HA : High Point of Failure 高可用集群 数据库、Redis SPoF:single point Of failure 解决单点故障 HPC:…

数据库管理-第228期 Oracle全球分布式数据库-初探(20240812)

数据库管理228期 2024-08-12 数据库管理-第228期 Oracle全球分布式数据库-初探(20240812)1 概念2 关于全球分布式数据库3 分布式分区4 Oracle全球分布式数据库的优势总结 数据库管理-第228期 Oracle全球分布式数据库-初探(20240812&#xff0…

如何在Shopify开发中高度还原Figma设计稿

### 一、理解设计意图:设计与开发的有效沟通#### 1. 早期沟通的重要性在开发工作开始之前,开发人员应与设计师进行详细的沟通,确保对设计意图有深刻理解。关键点包括:- **色彩和字体**:了解设计师对品牌色彩和字体的选…

从0开始搭建vue + flask 旅游景点数据分析系统(十一):登录、注册页面、未登录拦截、注销逻辑

这一期已经到了系列教程的尾声了,下面来搭建登录、注册页面,处理登录拦截和注销的逻辑 1 建表 先把数据库表用户相关的数据库表建立一下: CREATE TABLE tb_user (id int NOT NULL AUTO_INCREMENT COMMENT id,realname varchar(255) CHARAC…

燃气综合管理解决方案:构建安全可靠的燃气供应网络

无论是繁华的都市中心还是宁静的郊区,地下深处都隐藏着错综复杂的燃气管道网络,这些管网为千家万户输送着生活必需的能源。尽管这些管道由高强度和耐腐蚀材料制成,但长期暴露于自然环境中仍会逐渐老化和磨损。一旦发生破损或因人为错误导致管…

eNSP 华为单臂路由实现VLAN间通信

华为单臂路由实现VLAN间通信 SW&#xff1a; <Huawei>sys <Huawei>system-view [Huawei]sysname SW [SW]VLAN batch 10 20 //批量划分VLAN [SW]int g0/0/1 [SW-GigabitEthernet0/0/1]port link-type trunk [SW-GigabitEthernet0/0/1]port trunk allow-pa…

LabVIEW光纤水听器闭环系统

开发了一种利用LabVIEW软件开发的干涉型光纤水听器闭环工作点控制系统。该系统通过调节光源频率和非平衡干涉仪的光程差&#xff0c;实现了工作点的精确控制&#xff0c;从而提高系统的稳定性和检测精度&#xff0c;避免了使用压电陶瓷&#xff0c;使操作更加简便。 项目背景 …

安卓平板电脑定制方案_MTK联发科智能终端方案开发

基于联发科MT8788八核2.0GHz处理器的平板电脑方案&#xff0c;这款平板电脑不仅支持4G和Wi-Fi 5高速网络&#xff0c;还搭载了Android12.0系统&#xff0c;可带来流畅的多任务处理和广泛兼容性。其6GB运行内存和128GB内置存储&#xff0c;再加上支持TF卡扩展&#xff0c;确保了…

【微信小程序】WXS脚本

概述 1. 什么是 wxs WXS&#xff08;WeiXin Script&#xff09;是小程序独有的一套脚本语言&#xff0c;结合 WXML&#xff0c;可以构建出页面的结构。 2. wxs 的应用场景 3. wxs 和 JavaScript 的关系* 基础语法 1. 内嵌 wxs 脚本 2. 定义外联的 wxs 脚本 3. 使用外联的 w…

【Qt菜鸟笔记】QLCDNumber控件

1.QLCDNumber控件简介&#xff08;Qt6.5.3版&#xff09; QLCDNumber控件显示带有类似 LCD 数字的数字。它可以显示十进制、十六进制、八进制或二进制数。 头文件引入#include<QLCDNumber>CMake配置:find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_librar…

ffmpeg的基础命令

文章目录 ffmpeg/ffplay/ffprobe区别ffmpeg 的作用ffplay的作用ffprobe的作用 ffmpeg使用概述功能概述转码过程简单使用FFMPEG -i常用的 -i例子 ff***工具之间共享的选项ffmpeg主要选项ffmpeg提取音视频数据ffmpeg命令修改原有的视频格式ffmpeg命令裁剪和合并视频拼接视频的方式…

【二叉树OJ】常见面试题

文章目录 1.[单值二叉树](https://leetcode.cn/problems/univalued-binary-tree/description/)1.2 题目要求1.3 深度优先搜索 2.[相同的树](https://leetcode.cn/problems/same-tree/)2.1 题目要求2.2 深度优先遍历 3.[对称二叉树](https://leetcode.cn/problems/symmetric-tre…

热敏打印机ESC指令封装-SAAS本地化及未来之窗行业应用跨平台架构

一热敏打印机ESC指令 它包含了一系列的控制指令&#xff0c;通过这些指令可以实现对打印内容的格式设置&#xff0c;如字体大小、加粗、下划线、对齐方式等。还能够控制打印的位置、纸张进纸、切纸等操作。 例如&#xff0c;在商业零售场景中&#xff0c;收银小票打印机就是基…

刷到好听的音频怎么办

在短视频平台上&#xff0c;我们常常会刷到那些好听得让人陶醉的视频&#xff0c;可却无法直接下载保存其中的音频&#xff0c;是不是感觉很遗憾&#xff1f; 比如刷到林俊杰这首前奏超好听的《江南》&#xff0c;却禁止下载无法直接下载保存。 别担心&#xff0c;下面就为您揭…

html页面缩放自适应

html页面缩放自适应 一、为什么页面要进行缩放自适应 在我们一般web端进行页面拼接完成后&#xff0c;在web端的显示正常&#xff08;毕竟我们是按照web端进行页面拼接完成的&#xff09;&#xff0c;那么要是用其他设备打开呢&#xff0c;比如手机或者平板&#xff0c;这时候…