Realsense D455 调试

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: 0stamp: secs: 0nsecs:         0frame_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: 0stamp: secs: 0nsecs:         0frame_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.mzph.cn/news/823517.shtml

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

相关文章

用Skimage学习数字图像处理(021):图像特征提取之线检测(下)

本节是特征提取之线检测的下篇&#xff0c;讨论基于Hough变换的线检测方法。首先简要介绍Hough变换的基本原理&#xff0c;然后重点介绍Skimage中含有的基于Hough变换的直线和圆形检测到实现。 目录 10.4 Hough变换 10.4.1 原理 10.4.2 实现 10.4 Hough变换 Hough变换&…

项目实现:Boost搜索引擎

目录 一.项目背景 二. 搜索引擎的宏观原理 三.使用到的技术栈与项目环境 四.正排索引vs倒排索引 五.认识标签与去标签 六.建立索引模块 七&#xff0c;编写http服务端 八&#xff0c;编写前端页面 九.搜索结果的优化 遇到的问题&#xff1a; 项目源码&#xff1a;boos…

JS/TS笔记学习1

周末总得学点什么吧~ 奥利给! 跑火车 递归 减速 let currentIndex 0; let speed 500; // 初始速度&#xff0c;单位是毫秒 let decrement 20; // 每次迭代速度减少的量 const cells document.querySelectorAll(.cell); function highlightCell() { cells.forEach(…

Boost电感的作用

Boost电感在Boost升压电路中起着关键的作用。Boost电路是一种DC-DC电源转换器&#xff0c;其主要功能是将低电压直流&#xff08;DC&#xff09;信号转换为高电压直流&#xff08;DC&#xff09;信号。Boost电感在这个过程中起着平滑电流、储存能量和提高电路效率的作用。 具体…

柯桥商务口语之怎么样说英语更加礼貌?十个礼貌用语get起来!

当你在国外需要帮助的时候&#xff0c;这些礼貌用语真的是能够帮到你的哦 1.Would/Could you help me? 你可帮助我吗&#xff1f; 相信有些人想请求帮助的时候&#xff0c;一开口就用Can you&#xff0c;这个用在朋友或者熟人上面当然是没有问题的&#xff0c;但是如果是向…

Node.js 中的 RSA 加密、解密、签名与验证详解

引言 在现代的网络通信中&#xff0c;数据安全显得尤为重要。RSA加密算法因其非对称的特性&#xff0c;广泛应用于数据的加密、解密、签名和验证等安全领域。本文将详细介绍RSA算法的基本原理&#xff0c;并结合Node.js环境&#xff0c;展示如何使用内置的crypto模块和第三方库…

基于 LSTM 模型的古诗词自动生成算法实现及系统实现

近年来&#xff0c;研究者在利用循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;进行古诗自动生成方面取得了显著的效果。但 RNN 存在梯度问题&#xff0c;导致处理时间跨度较长的序列时 RNN 并不具备长期记忆存储功能。随后&#xff0c;出现的基…

【架构方法论(一)】架构的定义与架构要解决的问题

文章目录 一. 架构定义与架构的作用1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构&#xff1a;4R 架构 二、架构设计的真正目的-别掉入架构设计的误区1. 是为了解决软件复杂度2. 简单的复杂度分析案例 三. 案例思考 本文关键字 架构定义 架构与系统的关系从业务逻…

企业linux-堡垒机与跳板机测试案例-6140字详谈

在开始今天内容前&#xff0c;小编先把专栏前面学的Linux命令&#xff08;部分&#xff09;做了思维导图帮助各位平时的学习&#xff1a; 场景&#xff1a; 运维人员管理三台机器&#xff0c;通过远程连接工具连接上三台机器&#xff0c;也知道这三台机器root密码&#xff0c…

【Java探索之旅】掌握数组操作,轻松应对编程挑战

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、数组巩固练习1.1 数组转字符串1.2 数组拷贝1.3 求数组中的平均值1.4 查找数组中指…

Windows版Apache 2.4.59解压直用(免安装-绿色-项目打包直接使用)

windows下Apache分类 Apache分为 安装版和解压版 安装版: 安装方便&#xff0c;下一步------下一步就OK了&#xff0c;但重装系统更换环境又要重新来一遍&#xff0c;会特别麻烦 解压版&#xff08;推荐&#xff09;&#xff1a; 这种方式&#xff08;项目打包特别方便&#x…

力扣哈哈哈哈

public class MyStack {int top;Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1new LinkedList<Integer>();q2new LinkedList<Integer>();}public void push(int x) {q2.offer(x);//offer是入队方法while (!q1.isEmpty()){q2.offer(q1.pol…

HPTNet:为点云提取表面特征

论文题目&#xff1a;High-Performance Feature Extraction Network for Point Cloud Semantic Segmentation 论文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/10474110 文章目录 1. 平面几何特征的提取2. 几何和语义特征的分开处理3. Transformer模块4. 结…

MySQL基础知识——MySQL事务

事务背景 什么是事务&#xff1f; 一组由一个或多个数据库操作组成的操作组&#xff0c;能够原子的执行&#xff0c;且事务间相互独立&#xff1b; 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 注&#xff1a;MyS…

代码随想录算法训练营第一天 | 704. 二分查找 | 27. 移除元素

704. 二分查找 int search(int* nums, int numsSize, int target) {int left 0, right numsSize, mid;while (left < right) {mid left (right -left) / 2;if (nums[mid] < target) {left mid 1;} else if (nums[mid] > target) {right mid;} else {return mid…

CMMI认证是什么?如何确定CMMI认证的目标和范围

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证是一种用于评估和改进组织软件和项目管理过程的框架。它由美国国防部软件工程所&#xff08;SEI&#xff09;开发&#xff0c;旨在帮助组织提高其软件和项目管理的成熟度水平。 CMMI认证的意义在于&…

哪里有su材质库免费下载?

su材质库是一套草图大师的通用材质大全&#xff0c;包含多种不同类型的材质包和材质贴图&#xff0c;使得设计师能够轻松在电脑上进行直观的构思。对于需要免费下载su材质库的用户&#xff0c;可以尝试通过以下途径获取。 1. 官方网站查找&#xff1a;许多软件都会在官网上提供…

第十六篇:springboot案例

文章目录 一、准备工作1.1 需求说明1.2 环境搭建1.3 开发规范1.4 思路 二、部门管理2.1 查询部门2.2 删除部门2.3 新增部门2.4 修改部门2.5 RequestMapping 三、员工管理3.1 分页查询3.2 删除员工3.3 新增员工3.3.1 新增员工3.3.2 文件上传 3.4 修改员工3.4.1 页面回显3.4.2 修…

【数据结构】-- 栈和队列

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

二十一.订单分析RFM模型

目录 1.数据读取 2.数据清洗 3.可视化分析 做图吧 4.RFM模型 本次数据条数为: 51101 import pandas as pd import numpy as np 1.数据读取 #读取文件 df_data pd.read_csv("../data/dataset.csv",encoding"gbk") df_data#因为列标签都是英文,这里我…