一、获取 camera_link to map 的坐标转换矩阵 T

具体请参考 ROS2 的官方文档,本文着重描述坐标转化。

void update_callback()
{std::string fromFrameRel = target_frame_.c_str();std::string toFrameRel = "map";geometry_msgs::msg::TransformStamped transformStamped;try {transformStamped = tf_buffer_->lookupTransform(toFrameRel, fromFrameRel, tf2::TimePointZero);} catch (tf2::TransformException & ex) {RCLCPP_INFO(this->get_logger(), "Could not transform %s to %s: %s", toFrameRel.c_str(), fromFrameRel.c_str(), ex.what());return;}Sophus::SE3d pose(Eigen::Quaterniond(transformStamped.transform.rotation.w, transformStamped.transform.rotation.x, transformStamped.transform.rotation.z, transformStamped.transform.rotation.z),Eigen::Vector3d(transformStamped.transform.translation.x, transformStamped.transform.translation.y, transformStamped.transform.translation.z));T = pose;

二、图像的回调函数

void img_callback(const sensor_msgs::msg::Image::SharedPtr img)
{Eigen::Vector3d point;Eigen::Vector3d pointWorld;cv_bridge::CvImageConstPtr cv_ptr;cv_ptr = cv_bridge::toCvShare(img, "16UC1");unsigned int d = cv_ptr->image.ptr<unsigned short>(v)[u];if (d <= 0) {return;} else {point[0] = double(d) / depthScale;point[1] = -1 * (u - cx) * point[2] / fx;point[2] = -1 * (v - cy) * point[2] / fy;pointWorld = T * point;}
}
  1. RGBD 相机中的深度话题中只保存了数据的存储格式,和数据的存储地址,所以不能直接读取深度图的 data 数据。ROS2 提供了 cv_bridge 的方法去将 sensor_msgs::msg::Image 转换到 cv::mat 中,需要添加头文件#include <cv_bridge/cv_bridge.h>16UC1是一种图像的编码格式,不同相机可能有不同,具体需要查看自己相机的深度话题。现在 cv_ptr 中存的就是 cv::mat 格式的深度数据了,这里我读取了一个像素点的深度值。
  2. 其他部分和高博的slambook2中ch5的代码基本相同。有一点不同的是,point 数组中的存的是相机平面下数据,而相机的坐标系是east-down-north的,不同于 world 坐标系的north-west-up。所以在使用坐标转化时 point 中的数据需要对应到 world 坐标系下,也就是说对应到世界坐标系下
  • x 为相机中的 z,原本的 point[2]
  • y 为相机中的 -x,原本的 -point[0];
  • z 为相机中的 -y,原本的 -point[1];

这时 pointworld 中存的就是深度数据在世界坐标系下中的坐标了。

ROS2 Galactic Depth to World coordinate RGBD相机的深度数据转换到世界坐标系相关推荐

  1. DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM

    作者丨Clark@知乎 来源丨https://zhuanlan.zhihu.com/p/479534098 编辑丨3D视觉工坊 论文信息 @article{teed2021droid,title={D ...

  2. DROID-SLAM: 单目、双目、RGBD相机的深度视觉SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨泡泡机器人SLAM 标题:DROID-SLAM: Deep Visu ...

  3. 【深度补全算法】基于RGBD相机的深度补全算法(非Lidar)论文与GitHub代码总结

    目录 前言 一.经典的深度补全算法(2018-2019) 1.Deep Depth Completion of a Single RGB-D Image 2.Indoor Depth Completi ...

  4. 元旦特惠!无人机/ROS2/三维重建点云/SLAM/多传感器/相机标定/深度估计等重磅干货教程...

    随着AI技术的大规模落地,国内外资本对AI视觉兴趣只增不减,自动驾驶.工业视觉.AR/VR.测量测绘.移动机器人等领域涌现了大量独角兽公司,相关产品更是受到重点关注. AI领域的热度和资本涌入持续增长 ...

  5. RGB-D相机视觉SLAM

    RGB-D相机视觉SLAM Dense Visual SLAM for RGB-D Cameras 开源代码地址: vision.in.tum.de/data/software/dvo 摘要 本文提出 ...

  6. Udacity机器人软件工程师课程笔记(十九) - 3D感知介绍 - 主动/被动式传感器、RGB-D相机、点云

    3D感知介绍 目录 传感器 RGB-D相机 点云 1.传感器 主动式传感器是指向目标发射电磁波,然后收集从目标反射回来的电磁波信息的传感器,如合成孔径雷达等. 被动式传感器指只能收集地而目标反时来自太 ...

  7. RGBD相机模型与图片处理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 图像 灰度图 灰度是描述灰度图像内容的最直接的视觉特征.它指黑白图 ...

  8. RGBD相机参数输出定义

    关于Orbbec Sensor SDK输出给用户的相机参数作如下规定: 深度相机参数(内参.畸变等)与深度流需要一一对应:例如用户使用开启D2C的深度流,那就需要使用对应模式下相机参数转点云,因此使用 ...

  9. RGB-D相机(Azure Kinect DK)SDK安装

    RGB-D相机(Azure Kinect DK)SDK安装 文章目录 RGB-D相机(Azure Kinect DK)SDK安装 1. Azure Kinect 传感器 SDK 下载安装 1.1 官方 ...

  10. RGBD相机的标定和图像配准

    作者 | ljc_coder @CSDN 链接 | https://blog.csdn.net/m0_52785249/article/details/124505848 编辑 | 新机器视觉 本篇内 ...

最新文章

  1. Linux_学习_01_常用命令大全
  2. 移动机器人传感器---IMU
  3. php图片传入及改名代码,WordPress添加媒体中文名图片上传改名(优化版)
  4. getline读取不等待输入的问题
  5. 前端学习(2649):vue3.0的处理展示
  6. opc读取ab的plc数据_C#读写 AB PLC 直接通过节点来读写数据 读写 AllenBradley PLC
  7. 图像分割中的深度学习:U-Net 体系结构
  8. 作为职场小白,除了要注意自身的言谈举止
  9. css如何让两个div上下排列_CSS层叠上下文
  10. mysql 分库外置索引,MySQL的分库分表与Innodb的Btree索引
  11. 第四天作业发布时间:2021-05-31 09:57:49相关课程:RHCSA2021-05-22 
  12. 网络推广方式有哪些?分享几种常见的推广方式,十分有效
  13. android焦距跟实际距离,android相机焦距和焦距不变
  14. 【渝粤教育】电大中专计算机网络基础 (2)作业 题库
  15. Redis缓存雪崩与解决方案
  16. 苹果ipad怎么刷机_苹果iPhone SE 2(3GB/64GB/全网通)手机密码忘记怎么刷机?
  17. android屏幕刷新显示机制
  18. 南大通用数据库-Gbase-8a-学习-26-UDF自定义函数(C、python外部函数)
  19. AD GPO应用实例
  20. 一篇文章带你看懂AWS re:Invent 2018大会,揭秘Amazon Aurora

热门文章

  1. unity3d的uGUI基本操作
  2. JQuery简要介绍(转)
  3. 数据结构与算法分析:第1、2章:引论和算法分析
  4. uniapp 获取用户手机号
  5. 如何在C#窗体中定义全局变量
  6. Protobuf3详细介绍
  7. 13. Use Objects to manage resources.
  8. 归并排序MergeSort
  9. 注册微服务到Eureka Service
  10. java list增改查_Java编程通过list接口实现数据的增删改查代码示例