Realsense D455 调试

news2024/7/6 18:40:57

1 Realsense


 

D455 配置:

  • RGB:彩色相机,FOV(h,v)( 90*65 )
  • 红外点阵发射:位于上图中RGB右边,发射特定模式的红外光,通常是一种点阵图案,这有助于红外摄像头捕捉和计算物体的深度信息
  • Right 和 Left:双目红外相机,FOV(h,v)( 87 *58 ),可接受普通光源和红外光源,基线9.5cm
    可输出:1 深度图 %2@4M; 2 双目灰度图3 彩色单目Left (ps:不同于RGB相机,这个是IR相机的彩色)
  • IMU:BMI055

2 安装

以下是基于Ubuntu20.04系统安装realsense-ros的一般步骤

2.1 前置

  • 安装ROS:您需要在您的计算机上安装ROS。假设您使用的是ROS Noetic版本,您可以按照ROS官方安装指南进行安装。

  • 安装RealSense SDK 2.0:在安装realsense-ros之前,您需要安装Intel RealSense SDK 2.0。您可以通过以下命令来安装它:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
    sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
    sudo apt-get install librealsense2-dkms -y
    sudo apt-get install librealsense2-utils -y
    sudo apt-get install librealsense2-dev -y
    sudo apt-get install librealsense2-dbg -y 
    # version后面出现realsense表示更新成功。
    modinfo uvcvideo | grep "version:"
    
  • 使用sdk:

       插入D455相机,需要USB3.0及以上接口。使用命令启动:
           realsense-viewer
       用来列出系统上连接的所有RealSense设备和它们的属性,使用命令:
           rs-enumerate-devices

2.2 realsense-ros

  1. 设置ROS工作空间(如果您还没有):

    mkdir -p ~/catkin_ws/src

  2. 克隆realsense-ros仓库:

    cd ~/catkin_ws/src
    git clone https://github.com/IntelRealSense/realsense-ros.git cd realsense-ros/
    # 选择最新的稳定版本
    git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`

  3. 编译工作空间:

    catkin_make

  4. 环境配置:

    source ~/catkin_ws/devel/setup.bash

  5. 安装完成后,您可以通过运行示例节点来测试安装是否成功::

    roslaunch realsense2_camera rs_camera.launch

  6. 编译realsense-ros时遇到了一个错误,提示找不到ddynamic_reconfigure这个ROS包。这个包是必需的,因为realsense-ros需要它来动态调整参数。
    下面是解决这个问题的步骤:
    sudo apt-get update sudo apt-get install ros-noetic-ddynamic-reconfigure

3 使用

3.1 获取标定外参

需要 source devel/setup.bash;

3.1.1 Left IR camera (深度图)到 RGB camera

rostopic echo /camera/extrinsics/depth_to_color

这条命令会输出深度摄像头到彩色摄像头的转换矩阵,包括旋转矩阵和平移向量。旋转矩阵接近单位阵,平移向量大概距离6cm。

​​​​​​​header: 
    seq: 0 
    stamp: 
        secs: 0 
        nsecs: 0 
    frame_id: "depth_to_color_extrinsics" 
    rotation: 
        [0.9999966025352478, 0.0024309128057211637, -0.000930685258936137,                                 
         -0.0024320671800523996, 0.9999962449073792, -0.001241242396645248,    
         0.0009276643977500498, 0.0012435016687959433, 0.9999988079071045]                
    translation: 
        [-0.05915042757987976, -0.0002094241644954309, 0.0002801527443807572]

3.1.2 Left IR camera 即为 depth camera

rostopic echo /camera/extrinsics/depth_to_infra1

旋转矩阵为单位阵,平移向量为0

header: 
  seq: 0
  stamp: 
    secs: 0
    nsecs:         0
  frame_id: "depth_to_infra1_extrinsics"
rotation: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
translation: [0.0, 0.0, 0.0]

3.1.3 Left IR camera 到 Right IR camera

rostopic echo /camera/extrinsics/depth_to_infra2

旋转矩阵为单位阵,平移向量为右侧9.5cm

header: 
  seq: 0
  stamp: 
    secs: 0
    nsecs:         0
  frame_id: "depth_to_infra2_extrinsics"
rotation: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
translation: [-0.09505465626716614, 0.0, 0.0]

3.2 使用RealSense ROS获取数据

3.2.1 使用默认配置

roslaunch realsense2_camera rs_camera.launch

启动后查看topic:

rostopic list

图像数据话题
/camera/color/camera_info: 提供彩色摄像头的校准和元数据信息,如内参矩阵、畸变系数等。
/camera/color/image_raw: 发布未经处理的彩色图像数据。
/camera/color/metadata: 关于彩色图像流的元数据。
/camera/depth/camera_info: 发布深度摄像头的校准和元数据信息。
/camera/depth/image_rect_raw: 发布矫正后的深度图像,这些图像已经根据内参矩阵进行了畸变校正。
/camera/depth/metadata: 深度图像流的元数据。

标定和参数配置话题
/camera/extrinsics/depth_to_color: 提供从深度摄像头到彩色摄像头的外参数据,即两个摄像头之间的相对位置和旋转。
/camera/motion_module/parameter_descriptions 和 /camera/motion_module/parameter_updates: 有关运动模块参数的描述和更新。
/camera/rgb_camera/auto_exposure_roi/parameter_descriptions 和 /camera/rgb_camera/auto_exposure_roi/parameter_updates: 彩色摄像头自动曝光区域的参数描述和更新。
/camera/stereo_module/auto_exposure_roi/parameter_descriptions 和 /camera/stereo_module/auto_exposure_roi/parameter_updates: 立体摄像模块的自动曝光区域参数描述和更新。

系统和诊断话题

/diagnostics: 发布系统的诊断信息,可以用于监控设备状态和性能。
/rosout 和 /rosout_agg: ROS系统日志输出,用于调试和日志记录。
/tf 和 /tf_static: 发布时间和空间中的坐标变换信息,/tf用于动态变换,而/tf_static用于几乎不变的变换。

3.2.2 启用原始双目IR图片

默认配置只开启了深度图模式,没有发送双目IR图片。

两个IR相机共有三种模式:1 深度图(默认打开);2双目灰度IR;3单左目彩色IR(不是那个彩色相机)

模式2和模式3不能同时,只能选择一种,模式1可以在打开模式2或3时同时开启。

编辑 realsense-ros/realsense2_camera/launch/rs_camera.launch:

配置模式2
  <arg name="enable_infra"        default="false"/>
  <arg name="enable_infra1"       default="true"/>
  <arg name="enable_infra2"       default="true"/>
  <arg name="infra_rgb"           default="false"/>

配置模式3
  <arg name="enable_infra"        default="true"/>
  <arg name="enable_infra1"       default="false"/>
  <arg name="enable_infra2"       default="false"/>
  <arg name="infra_rgb"           default="true"/>

​​​​​​​3.2.3  lauch文件中所有可配置参数

基础参数

  • serial_no: 指定连接设备的序列号。
  • usb_port_id: 指定设备连接的USB端口ID。
  • device_type: 指定设备类型,如D455。
  • json_file_path: 指定一个JSON配置文件的路径,该文件包含用于设备的预设配置。
  • camera: 指定摄像头的命名前缀。
  • tf_prefix: 指定发布到tf中的坐标系前缀。
  • external_manager: 如果设置为true,使用外部的节点管理器。
  • manager: 指定节点管理器的名称。
  • output: 指定日志输出方式。
  • respawn: 如果节点终止,是否自动重启节点。

图像数据流参数

  • fisheye_width/height: 指定鱼眼摄像头的图像宽度和高度。
  • enable_fisheye: 是否启用鱼眼摄像头。
  • depth_width/height: 指定深度摄像头的图像宽度和高度。
  • enable_depth: 是否启用深度摄像头。
  • confidence_width/height: 指定置信图像的宽度和高度。
  • enable_confidence: 是否启用置信度图像。
  • confidence_fps: 置信图像的帧率。
  • infra_width/height: 指定红外摄像头的图像宽度和高度。
  • enable_infra, enable_infra1, enable_infra2: 是否启用红外摄像头。
  • infra_rgb: 是否将红外图像与RGB图像同步。
  • color_width/height: 指定彩色摄像头的图像宽度和高度。
  • enable_color: 是否启用彩色摄像头。

性能参数

  • fisheye_fps, depth_fps, infra_fps, color_fps: 对应各摄像头的帧率。
  • gyro_fps, accel_fps: 陀螺仪和加速度计的帧率。
  • enable_gyro, enable_accel: 是否启用陀螺仪和加速度计。

点云和同步参数

  • enable_pointcloud: 是否生成点云数据。
  • pointcloud_texture_stream: 点云的纹理来源。
  • pointcloud_texture_index: 使用的纹理流的索引。
  • allow_no_texture_points: 是否允许无纹理点。
  • ordered_pc: 是否生成有序点云。
  • enable_sync: 是否启用传感器数据同步。
  • align_depth: 是否将深度数据与其他数据流对齐。

转换和滤镜参数

  • publish_tf: 是否发布TF转换。
  • tf_publish_rate: TF发布的频率。
  • filters: 应用于图像数据的滤波器。
  • clip_distance: 裁剪距离,用于过滤远距离的点。
  • linear_accel_cov: 线性加速度的协方差。
  • initial_reset: 启动时是否重置设备。
  • reconnect_timeout: 重连超时时间。
  • wait_for_device_timeout: 等待设备连接的超时时间。
  • unite_imu_method: IMU数据的合并方法。
  • topic_odom_in: 接收里程计信息的话题。
  • calib_odom_file: 里程计校准文件的路径。
  • publish_odom_tf: 是否发布里程计的TF数据。

曝光和增益参数

  • stereo_module/exposure/1, stereo_module/gain/1: 第一个红外摄像头的曝光和增益设置。
  • stereo_module/exposure/2, stereo_module/gain/2: 第二个红外摄像头的曝光和增益设置。

3.2.4  URDF 坐标系可视化

roslaunch realsense2_description view_d455_model.launch

在 RViz 中查看 Intel RealSense D455 模型。这个启动文件一般包含在 realsense2_description 包中,该包用于存储和展示 RealSense 设备的 URDF(统一机器人描述格式)模型。

为什么urdf中会有camera_infra2_optical_frame与camera_infra2_frame 这两种形式的坐标系?

在 URDF (统一机器人描述格式) 中,包含 camera_infra2_optical_framecamera_infra2_frame 这两种形式的坐标系的原因主要与ROS的坐标系规范和特定的应用需求有关。每种坐标系都有其特定的用途,理解它们的区别对于进行精确的空间计算和数据整合非常重要。ROS坐标系范:

  1. 通用坐标系(例如 camera_infra2_frame):

    • 这通常是相对于摄像头硬件本身的坐标系。在这个坐标系中,原点通常位于摄像头的物理中心或某个固定的参考点,坐标轴与摄像头的默认方向对齐。
    • camera_infra2_frame 可能会用于表示摄像头硬件的位置和方向相对于其他硬件组件(如机器人本体)的情况。
  2. 光学坐标系(例如 camera_infra2_optical_frame):

    • 光学坐标系遵循一个特殊的ROS规范,其中 z 轴正对着前方,x 轴向右,y 轴向下。这种布局是基于图像坐标系的常见布局,使得z轴正对图像平面。
    • camera_infra2_optical_frame 用于处理图像数据时更为方便,因为它使得摄像头捕获的图像直接对应于其坐标系的方向,这对于图像处理和计算机视觉应用尤为重要。

应用场景

  • 数据转换:在ROS中,不同的节点和工具可能需要使用不同的坐标系来处理数据。例如,一个节点可能使用通用坐标系来计算摄像头的物理位置,而另一个节点则使用光学坐标系来处理图像数据和执行视觉识别任务。
  • 模块化和灵活性:提供两种坐标系允许开发者根据需要选择最适合其应用的坐标系,而无需在中间进行复杂的坐标转换。

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

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

相关文章

深度学习架构(CNN、RNN、GAN、Transformers、编码器-解码器架构)的友好介绍。

一、说明 本博客旨在对涉及卷积神经网络 &#xff08;CNN&#xff09;、递归神经网络 &#xff08;RNN&#xff09;、生成对抗网络 &#xff08;GAN&#xff09;、转换器和编码器-解码器架构的深度学习架构进行友好介绍。让我们开始吧&#xff01;&#xff01; 二、卷积神经网络…

Dryad Girl Fawnia

一个可爱的Dryad Girl Fawnia的三维模型。她有ARKit混合形状,人形装备,多种颜色可供选择。她将是一个完美的角色,幻想或装扮游戏。 🔥 Dryad Girl | Fawnia 一个可爱的Dryad Girl Fawnia的三维模型。她有ARKit混合形状,人形装备,多种颜色可供选择。她将是一个完美的角色…

网络攻防演练:一场针锋相对的技术博弈与安全防护实践

随着ChatGPT5的即将上线&#xff0c;其安全防护能力面临更为严峻的考验。网络攻防演练作为检验系统安全性能、提升防御体系的关键环节&#xff0c;对于确保ChatGPT5的安全稳定运行具有重要意义。本文将深入探讨网络攻击与防守之间的动态关系&#xff0c;并提供在网络攻防演练中…

【Leetcode每日一题】 分治 - 颜色分类(难度⭐⭐)(57)

1. 题目解析 题目链接&#xff1a;75. 颜色分类 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路解析 本算法采用三指针法&#xff0c;将数组划分为三个区域&#xff0c;分别用于存放值为0、1和2的元素。通过…

vivado 设置 VIO 核以执行测量、查看 VIO 核状态

设置 VIO 核以执行测量 您添加到自己的设计中的 VIO 核会显示在“硬件 (Hardware) ”窗口中的目标器件下。如果未显示这些 VIO 核 &#xff0c; 请右键 单击器件并选择“ Refresh Hardware ”。这样将重新扫描 FPGA 或 ACAP 并刷新“ Hardware ”窗口。 注释 &#xff…

【免费】基于SOE算法的多时段随机配电网重构方法

1 主要内容 该程序是完全复现《Switch Opening and Exchange Method for Stochastic Distribution Network Reconfiguration》&#xff0c;也是一个开源代码&#xff0c;网上有些人卖的还挺贵&#xff0c;本次免费分享给大家&#xff0c;代码主要做的是一个通过配电网重构获取…

“面包板”是什么?有啥用?

同学们大家好&#xff0c;今天我们继续学习杨欣的《电子设计从零开始》&#xff0c;这本书从基本原理出发&#xff0c;知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例&#xff0c;可以说是全面系统地介绍了电子设计所需的知识…

一种范围可调式测径仪 满足生产各规格检测!

摘要&#xff1a;范围可调式测径仪&#xff0c;满足各种外径尺寸的产品检测&#xff0c;囊括产线的所有规格&#xff0c;性价比更高的测径仪。 关键词&#xff1a;测径仪,范围可调测径仪,在线测径仪 引言 生产线中&#xff0c;各种外径尺寸的线材、棒材、管材都有生产&#xff…

【SAP NWDI】服务开启:SLD,CM,CMS(二)

一、启用System Landscape Directory 二、启用 NWDI using CMS

CAN的底层驱动

框架图 拆解链路模型 CAN子系统 can_controller Core 包含协议控制器和接收/发送移位寄存器。它可处理所有 ISO 11898-1: 2015 协议功能,并支持 11 位和 29 位标识符。

一、基础算法-快速排序

1.快速排序 快速排序主要利用了分治的思想&#xff0c;具体步骤为&#xff1a; step1 确定分界点&#xff0c;常用为q[left],q[right],q[mid]&#xff0c;也可以是随机的 step2 调整区间&#xff0c;将比分界点小的放左边&#xff0c;大的放右边 step3 利用递归处理左右两端 …

嵌入式Linux串口通信

嵌入式板子就和普通用的单片机比如stm32开发板&#xff0c;51开发板差不多&#xff0c;他们的串口都很类似&#xff0c;都是直接连上然后在PC机器上用串口软件打开就好了。 我使用的嵌入式开发板上面有8个rs485串口&#xff0c;2个rs232串口以及一个网口&#xff0c;刚开始开发…

代码随想录算法训练营第三十七天| LeetCode 738.单调递增的数字、总结

一、LeetCode 738.单调递增的数字 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 状态&#xff1a;已解决 1.思路 如何求得小于等于N的最大单调递增的整数&#xff1f;98&am…

<计算机网络自顶向下> 多路复用与解复用

多路复用/解复用 端口号区分进程到进程多路解复用工作原理 解复用作用&#xff1a;TCP或者UDP实体采用哪些信息&#xff0c;将报文段的数据部分交给正确的socket&#xff0c;从而交给正确的进程主机收到IP数据报 每个数据报有源IP地址和目标地址每个数据报承载一个传输层报文段…

C++从入门到精通——const与取地址重载

const与取地址重载 前言一、const正常用法const成员函数问题const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗总结 二、取地址及const取地址操作符重载概…

PPTX与PPT文件有什么区别?这2个办公技巧一定要知道!

每一次点击鼠标&#xff0c;每一次敲击键盘&#xff0c;我们都在与各种软件进行互动。其中&#xff0c;PPTX 和 PPT 无疑是职场中最常见的两种办公文档格式。那么&#xff0c;你是否清楚 PPTX 和 PPT 这两者之间的区别呢&#xff1f; 或许你会说&#xff0c;这不过是文件后缀名…

通过抖音短视频获客 只需要六步

抖音是当前最受欢迎的短视频平台之一&#xff0c;拥有庞大的用户群体和强大的社交矩阵&#xff0c;已经成为企业打造品牌口碑和快速获客的一种有效方式。那么&#xff0c;如何利用抖音短视频快速获客&#xff0c;打造品牌口碑呢&#xff1f;小马识途营销顾问简要分析如下&#…

【已解决】html页面刷新后css样式消失

登录失败后显示主页面时样式消失&#xff0c;如&#xff1a; 原因&#xff1a;index的样式引入css前面没有加斜杠 解决办法&#xff1a;添加斜杠 <link th:href"{/asserts/css/bootstrap.min.css}" rel"stylesheet"><link th:href"{/a…

【Git教程】(十四)基于特性分支的开发 — 概述及使用要求,执行过程及其实现,替代方案 ~

Git教程 基于特性分支的开发 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现3.1 创建特性分支3.2 在 master 分支上集成某一特性3.3 将 master 分支上所发生的修改传递给特性分支 4️⃣ 替代方案4.1 直接在部分交付后的合并版本上继续后续工作4.2 到发行版即将成型时再集成特…

AI实践与学习4_大模型之检索增强生成RAG实践

背景 针对AI解题业务场景&#xff0c;靠着ToT、CoT等提示词规则去引导模型的输出答案&#xff0c;一定程度相比Zero-shot解答质量更高&#xff08;正确率、格式&#xff09;等。但是针对某些测试CASE&#xff0c;LLM仍然不能输出期望的正确结果&#xff0c;将AI解题应用生产仍…