精华内容
下载资源
问答
  • d435
    千次阅读 热门讨论
    2021-10-12 19:23:35

    ROS 使用 RealSense D435i 时出现串口异常


    1. 缘由

    有网友问 RealSense D435i 采用 《ROS 摄像头参数标定》usb_cam的功能包时出现的图像都是绿色的
    恰好有个 RealSense D435i 也试一下,确实如此
    而 usb_cam_node 已是集成文件,资料又少,就查看不了原因了

    想先看一下话题,采用 realsense2-camera 功能包,先安装

    $ sudo apt install ros-noetic-realsense2-camera
    

    然后启动一下

    $ roslaunch realsense2_camera rs_camera.launch
    

    就出现了failed to open usb interface: 0, error: RS2_USB_STATUS_ACCESS的异常


    2. 解决


    2.1. 创建

    检查目录/etc/udev/rules.d/下是否有99-realsense-libusb.rules
    如果有,需要修改内容。
    如果没有,则需要创建规则文件99-realsense-libusb.rules,内容如下:

    ##Version=1.1##
    # Device rules for Intel RealSense devices (R200, F200, SR300 LR200, ZR300, D400, L500, T200)
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0a80", MODE:="0666", GROUP:="plugdev", RUN+="/usr/local/bin/usb-R200-in_udev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0a66", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aa5", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0abf", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0acb", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad0", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="04b4", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad1", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad2", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad3", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad4", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad5", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad6", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af2", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af6", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0afe", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aff", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b00", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b01", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b03", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b0c", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b0d", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3d", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b48", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b49", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4b", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4d", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b52", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5b", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5c", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b64", MODE:="0666", GROUP:="plugdev"
    
    # Intel RealSense recovery devices (DFU)
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ab3", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0adb", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0adc", MODE:="0666", GROUP:="plugdev"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b55", MODE:="0666", GROUP:="plugdev"
    
    # Intel RealSense devices (Movidius, T265)
    SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0af3", MODE="0666", GROUP="plugdev"
    SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0b37", MODE="0666", GROUP="plugdev"
    SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="03e7", ATTRS{idProduct}=="2150", MODE="0666", GROUP="plugdev"
    
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad5", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0ad5", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af2", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0af2", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0afe", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0afe", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aff", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0aff", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b00", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b00", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b01", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor_custom", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b01", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3a", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3d", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b3d", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4b", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4b", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4d", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b4d", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5b", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5b", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5c", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b5c", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    KERNEL=="iio*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b64", MODE:="0777", GROUP:="plugdev", RUN+="/bin/sh -c 'chmod -R 0777 /sys/%p'"
    DRIVER=="hid_sensor*", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b64", RUN+="/bin/sh -c ' chmod -R 0777 /sys/%p && chmod 0777 /dev/%k'"
    

    2.2. 生效

    重新配置生效规则

    $ sudo /etc/init.d/udev restart
    

    2.3. 测试

    拔插设备
    再启动就正常了

    $ roslaunch realsense2_camera rs_camera.launch
    

    使用rviz查看不同图像话题效果
    在这里插入图片描述
    在标定时图像话题采用/camera/color/image_raw即可,收工。


    谢谢

    更多相关内容
  • 配置文件: rs_camera.launch realsense_color_config.yaml
  • 基于D435I相机的手眼标定,包括内参获取,外参估计等
  • SIMOTION__D435__实例.pdf

    2019-11-18 12:40:58
    本文档通过一个实际项目来介绍 ...在 SIMOTION SCOUT 软件的安装包里提供了一个供初学者学习的项目 “D435_BEGINNER”,该项目提供了完整的项目文 件和介绍文档,该项目可以在 SIMOTION D435 演示设备上模拟运行。
  • d435i深度相机读取数据并保存到本地
  • 使用英特尔D435实感摄像头,在Opencv DNN框架下基于Yolov3框架实现目标检测,并根据深度信息实现对异物的3D定位。 实时显示摄像机坐标系中的坐标。 异议检测和位置RealsenseD435要求C ++版本Ubuntu18.04或16.04 ...
  • 低速slam-d435i 使用Realsense d435i相机在室内环境下进行低速3D映射和猛击 安装-基本工具 从此处安装Ubuntu,ROS,Intel Realsense SDK,包装程序: : 注意:我推荐方法2 安装-带D435i包的SLAM 从链接安装以下...
  • d435i_凉亭

    2021-02-20 18:03:56
    英特尔实感凉亭ROS插件该软件包是用于Intel D435i realsense摄像机的Gazebo ROS插件。 通过该软件包,可以运行D435i摄像机(模拟),并在发射文件中包含urdf / xacro文件。 该软件包已在ROS Melodic,Ubuntu 18.04中...
  • Realsense_D435i.zip

    2021-11-01 10:04:39
    Linux 18.04版本, D435i的驱动程序,不会报错,有对应的解决方法,而且不会出现IMU时间混乱问题, 运行VINS-mono不会 出现IMU报错
  • MFC实现D435i相机视频显示并截取保存某一图像帧。
  • 主从多机matlab代码多机位.cpp 时间戳、对齐、点云、保存选项 以 6、15、30 fps 正常运行 专为使用两个英特尔实感摄像头流式传输 保存在内存中 fssLeft 和 fssRight 向量中的帧 ...输出时间戳到文本文
  • 该文档是有关realsense相机D435(D435i)利用左右相机采集图片的程序。涉及有VS17+opencv4.2.0+sdk2.0环境配置详细步骤、和相关测试代码。注:该工程没有连接实际相机,但是项目编译通过。
  • open3D与D435运用python代码及实例ply数据 数据及部分代码参考github开源项目
  • 带2轴摄像头安装座的Intel RealSense D435人员跟踪 介绍 该项目的目标是创建一个可以在2个轴上旋转并使用Intel D435 RGB-D摄像机在一个人周围移动时对其进行跟踪的摄像机装备。 为了完成此任务,评估了许多机器视觉...
  • 使用英特尔实感D435进行对象检测 坎特伯雷大学计算机科学系(COSC)和软件工程系最近购买了一辆陆虎,并在其上安装了Intel RealSense D435 3D摄像机。 目的是它将能够完成跨校园旅行的Mini-DARPA挑战。 该项目通过...
  • 机器人开发--D435

    2022-08-23 20:02:57
    D435

    1 D435

    RealSense是一款较为常用的深度(RGB-D)相机,目前也被广泛应用于很多实际的开发任务中。

    2 D415、D435、D435i与T265

    英特尔有实感深度摄像头D415, D435和D435i,以及实感追踪摄像头T265。

    2.1 D415和D435

    这两种模型之间存在两个主要差异:视场和快门类型。D435i在各方面都与D435相同,只是增加了惯性测量单元(IMU)。

    视场

    英特尔实感深度摄像头D415的视场大约为65度;而D435则更宽,大约为85度。
    请添加图片描述

    快门类型

    英特尔实感摄像头D415采用的是滚动快门,而D435则是全局快门。具有滚动快门的摄像头是通过快速扫描左右或上下来记录场景中的所有像素。这通常会在几帧的过程中发生,但数据将保存为单帧。
    请添加图片描述
    全局快门摄像头的操作方式不同。因为它们可以在一帧中对整个场景进行快照记录,因此可以同时捕获每个像素。
    请添加图片描述
    实感摄像头D435,更宽的视场使其更适合机器人和无人机导航等用例。较大的视场可以提供更多时间来对障碍物做出反应。如果你希望在捕获高速运动时防止深度图像模糊,全局快门可以提供更佳的性能。

    校准差异

    D415是基于英特尔实感D415模块。这意味着成像器,发射器和RGB都位于同一个计算板或加强件,从而可以令校准更加容易。
    英特尔实感摄像头D435则基于英特尔实感D430模块,带有附加但独立的RGB摄像头。深度算法基于传感器的精确放置,因此不将它们固定在相同的加强件有可能令深度摄像头和RGB摄像头之间的校准产生问题。

    像素差异

    英特尔实感D415采用了两百万像素成像器,而D435则是一百万像素。

    “Min Z”差异

    “Min Z”(深度摄像头到被捕获对象的距离)。与深度摄像头D415相比,D435在任何给定范围内的深度噪点都更高(> 2x),并且在相同分辨率下具有更小的最小操作距离(约0.5x),这意味着你可以更接近于摄像头。例如,在848×480分辨率下,D415的Min Z约为29厘米,而D435则是17厘米。

    对比

    https://www.intelrealsense.com/compare-depth-cameras/
    请添加图片描述
    请添加图片描述

    3 功能介绍

    Depth Camera D435 Camera Modules
    RealSense深度成像的原理是基于三角测量法,左右红外相机进行测量深度,中间红外点阵投射器相当于补光灯。实际上不打开也能测深度,只是效果不好。
    最右边的rgb相机用于采集彩色图片,最终可以将彩色视频流与深度流进行对齐。

    4 开发

    RealSense SDK:https://github.com/IntelRealSense/librealsense
    RealSense ROS:https://github.com/IntelRealSense/realsense-ros

    5 知识点

    5.1 结构光深度相机应用影响因素

    黑色物体的影响

    基于红外的结构光深度相机对深色(尤其是黑色)物体的测量一般不准确,甚至测量失败(没有深度值)。

    我们首先从物体的颜色说起。我们看到的物体的颜色是由于物体对不同波长的光具有选择性吸收而产生的。这个原理可以通过化学实验直观的观察到:当一束白光照射某溶液时,若溶液不吸收可见光,则白光全部通过,溶液呈现无色透明;若溶液吸收了某种颜色的单色光,那它就呈现出被吸收光的互补光。而溶液颜色的深浅,取决于浅溶液中吸光物质的浓度。

    如果两种不同颜色的单色光按一定的强度比例混合可以得到白光,那么就称这两种单色光为互补色光,这种现象称为光的互补。下图右中连线的两端构成互补光。
    请添加图片描述
    请添加图片描述
    而结构光一般采用的是人眼不可见的近红外光,它也是可以被物体吸收的。只不过因为其本身是不可见光,人眼无法直接观察到红外光被吸收的现象。
    请添加图片描述
    如下图所示,被测物体表面不同颜色(现在我们知道是不同物质对不同光的吸收不同)对结构光深度相机成像的影响。从图中可以明显看出深色物体(尤其是黑色物体)对红外光的吸收能力非常强,这导致投射在黑色物体上的红外光无法返回,红外成像传感器因为无法接收到返回的红外光,因此也就无法测量物体的深度。
    请添加图片描述
    下图右红框内黑色表示无深度值,可以看到黑色的椅子背靠和支撑腿都没有深度值。
    请添加图片描述

    光滑物体表面反射的影响

    当物体表面超过一定的光滑程度时,深度相机测量精度会急剧下降,甚至测量失败(没有深度值)。

    请添加图片描述

    上图左是漫反射示意图,指的是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,但由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射。

    自然界几乎所有的物体表面都符合漫反射条件,比如大气层、动植物、地面、墙壁、衣服等,有些物体表面粗看起来似乎很平滑,但用放大镜仔细观察,就会看到其表面其实是凹凸不平的。因此本来是平行的太阳光被这些表面反射后,弥漫且随机的地射向不同方向。

    漫反射是物体可以清晰成像的基础,因此我们从不同角度看同一物体,都能看的比较清楚。因此,深度相机中的成像端能够接收到足够的光线,从而清晰的成像。

    而相比之下,镜面反射发生在物体表面(接近)绝对光滑的情况下,比如水面、镜子、抛过光的金属表面等。当物体表面发生镜面反射时,只有当被测物体位于深度相机的发射端和接收端(成像端)的中垂线时,才能接收到反射光线,并且强度很集中,容易发生过度曝光;而其他情况下能够接收到的反射光线非常少,无法成像。

    下面给出一个实例,直观感受一下。下图左中光滑的桌面在下图右红框中对应的深度值是无效的(右图中黑色表示没有深度值)。
    请添加图片描述

    透明物体透射的影响

    我们知道红外光是可以轻松穿透普通透明玻璃的。所以除了前面提到的反射的影响,红外光在一定条件下还可能产生透射现象,这会给红外结构光深度相机带来新的问题:我称之为深度值的歧义性。
    请添加图片描述

    视差的影响

    结构光深度相机的发射端和接收端通常有一定的间距,因此在物体的边缘会存在一定的视觉盲区。这对于较远的物体边缘影响不大,但是对于近距离的物体边缘影响较大,会产生无效深度值的类似阴影的区域(如下图红框内所示)。
    请添加图片描述

    5.2 PCL点云库

    PCL(Point Cloud Library)是在吸收了前人点云相关研究基础上建立起来的大型跨平台开源C++编程库,它实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。支持多种操作系统平台,可在Windows、Linux、Android、Mac OS X、部分嵌入式实时系统上运行。如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位,PCL是BSD授权方式,可以免费进行商业和学术应用。

    参考

    1、哪款适合你?一览英特尔实感摄像头D415、D435、D435i、T265的差异
    2、计算机视觉life–深度相机:想说爱你不容易
    3、PCL(点云库)_百度百科
    4、intelrealsense

    展开全文
  • 本人使用过一段时间的realsense D435 因为能力有限,写出来代码有很多缺陷,打包起来的d435的功能也并不是很全面
  • d435i calibration results file
  • 使用 intel realsense D435 在opencv python平台下测摄像头与被测物体之间的距离。
  • 英特尔 D435/D435i双目相机 使用指南

    千次阅读 2022-04-06 20:52:10
    本文章对英特尔D435i这款相机的使用做了一个总结,自己也处在一个学习的阶段,也相当于是整理一下学到的东西。如果有不完善的地方,还是希望大家能够多多指正。

    目录

    Intel RealSense D435深度相机介绍:

    关于左右红外图像:

    关于像素深度的检索:

    Intel RealSense 各种工具:

    工具的介绍

    相机基本操作

    相机自校准

    获取相机参数

    python脚本

    Linux命令行

    相机运行并显示画面

    获得深度图像

    点云

    帧对齐

    英特尔官方手册:调整深度摄像头以获得最佳性能

    首先以相机的最佳深度分辨率运行

    确保图像已正确曝光(曝光不佳时性能不佳的首要原因)

    后处理

    更改深度步长

    彩色摄像头

    使用阳光,但避免眩光


    Intel RealSense D435深度相机介绍:

    一对立体红外传感器(Stereo IR Pair) + 一个红外激光发射器(IR Projector) + RGB Camera

    RGB摄像头分辨率达2000万像素,3D传感器可以30帧/秒的速度提供分辨率高达1280 × 720,或者以90帧/秒的速度提供848 × 480的较低分辨率。 深度距离在0.1 m~10 m之间,视场角度为85 × 58度。

    工作原理:左右红外相机(接收器)分贝产生两幅也就是左侧和右侧ir灰度图像,中间红外点阵发射器(红外散斑)相当于补光灯,进而可以得到点云。红外点阵发射器强度可调,是否发射也可调,不打开也能测深度,只是效果不好。最右边的rgb相机用于采集彩色图片,最终可以将彩色视频流与深度流进行对齐。

    测距原理和一般的双目相机相同,都是基于左右图像的视差来求得距离。只是相比于普通彩色rgb相机,红外ir相机是用来接收目标返回的红外光线的,得到的是左右两幅红外灰度图像。若把屋里灯光关掉,黑暗的环境,红外ir相机一样可以生成深度图像,只是质量略有下降。

    视差目前仅在D400系列上可用,可使用控件修改控制视差。(advanced_mode)

    关于左右红外图像:

    • 具有相同的内联函数
    • 没有失真
    • 两个图像之间没有旋转(单位矩阵)
    • 两个图像之间只有一个轴上的平移(translation[1]、translation[2]为零
    • 像素坐标的 y 分量可以在这两个图像间互换使用(立体校正的效果很好)

    关于像素深度的检索:

    立体视差通过逆线性关系与深度相关,并且可以通过 1 / rs2_get_depth_scale(...) 查询记录视差为 1 的点的距离。下面显示了如何检索像素的深度(以米为单位):

    c++:

    const float scale = rs2_get_depth_scale(sensor, NULL);
    const uint16_t * image = (const uint16_t *)rs2_get_frame_data(frame, NULL);
    float depth_in_meters = 1 / (scale * image[pixel_index]);

    Intel RealSense 各种工具:

    • 可以获取的原始数据如下:
    • color image,2D彩色图像
    • 点云xyz
    • texure image,点云纹理彩色图像,与点云xyz(或者说深度图像)是对其的
    • 点云xyz rgb,将点云xyz和texture image组合得到
    • ir left image,左侧ir灰度图像
    • ir right image,右侧ir灰度图像

    工具的介绍

    • 深度校准:Depth Quality Tool for Intel RealSense Cameras 用于测试z方向的深度数据是否准,只需要把rgbd相机正对着白色的墙面等就可以了,然后对比卷尺量的距离与软件上显示的距离,来判断是否需要校准相机;
    • Intel RealSense D400 Series Dynamic Calibration Software Tools 这个是校准工具,如果前面计算的距离不准,可以利用这个软件进行校准,在苹果或安卓手机搜realsense这个软件,安装打开,就是显示一张类似棋盘格标定板的图片,然后配合校准工具,按照上面的提示晃动手机即可校准,输出外参R\T。

    相机基本操作

    更详细说明见官网:

    Projection in RealSense SDK 2.0 · IntelRealSense/librealsense Wiki (github.com)

    相机自校准

    更详细内容可见官网:

    Intel® RealSense™ Self-Calibration for D400 Series Depth Cameras

    这张图片也就是说,在 Viewer 上进行校准,当误差小于一定值时,可以忽略。

    如果校准过程中报错:可能是没有足够的有效深度像素,通常可以通过确保投影仪处于打开状态来补救。

    获取相机参数

    python脚本

    # 注意!!!通过python script获取内参一定要看好自己到底用了哪个video stream
    import pyrealsense2 as rs
    pipeline = rs.pipeline()
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.rgb8, 30)
    cfg = pipeline.start(config)
    time.sleep(1)
    profile = cfg.get_stream(rs.stream.depth) # 获取深度流的配置文件
    intr = profile.as_video_stream_profile().get_intrinsics() # 向下播放到视频流并获取内在信息
    print(intr)  # 获取内参 width: 640, height: 480, ppx: 319.115, ppy: 234.382, fx: 597.267, fy: 597.267, model: Brown Conrady, coeffs: [0, 0, 0, 0, 0] 319.1151428222656
    print(intr.ppx)  # 获取指定某个内参

    Linux命令行

    rs-sensor-control

    相机运行并显示画面

    import pyrealsense2 as rs
    
    pipeline = rs.pipeline()
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.rgb8, 30)
    pipeline.start(config)
    
    time.sleep(1)
    frames = pipeline.wait_for_frames()
    depth_frame = frames.get_depth_frame()
    color_frame = frames.get_color_frame()
    
    # Convert images to numpy arrays
    depth_image = np.asanyarray(depth_frame.get_data())
    color_image = np.asanyarray(color_frame.get_data())
    
    # # Apply colormap on depth image (image must be converted to 8-bit per pixel first)
    # depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
    #
    # # Stack both images horizontally
    # images = np.hstack((color_image, depth_colormap))
    #
    # # Show images
    # cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
    # cv2.imshow('RealSense', images)
    # cv2.waitKey(1)
    
    fig, axes = plt.subplots(1, 2)
    for ax, im in zip(axes, [color_image, depth_image]):
        ax.imshow(im)
        ax.axis('off')
    plt.show()
    pipeline.stop()

    获得深度图像

    通过函数从2D像素坐标映射到3D坐标需要了解该像素的深度(以米为单位)。下面显示了如何获得像素的深度(以米为单位):

    python:

    dpt_frame = pipe.wait_for_frames().get_depth_frame().as_depth_frame()
    pixel_distance_in_meters = dpt_frame.get_distance(x,y)

    若设备无法确定给定图像像素的深度,则深度图像中将存储零值。这表示“无深度”。C++可以修改深度的刻度。(python似乎也可以)

    点云

    pyrealsense2提供了一个处理块,用于从深度和颜色框架创建点云和相应的纹理映射。从深度影像创建的点云是深度流的3D坐标系中的一组点。下面是如何创建点云对象:

    python:

    import pyrealsense2 as rs
    pc = rs.pointcloud()
    points = pc.calculate(depth_frame)
    pc.map_to(color_frame)

    帧对齐

    通常在处理颜色和深度图像时,需要将每一个像素从一个图像映射到另一个图像

    import pyrealsense2 as rs
    align = rs.align(rs.stream.color)
    aligned_frames = align.proccess(depth_and_color_frameset)
    color_frame = aligned_frames.first(rs.stream.color)
    aligned_depth_frame = aligned_frames.get_depth_frame()

    英特尔官方手册:调整深度摄像头以获得最佳性能

    调整深度摄像头以获得最佳性能 (intelrealsense.com)

    首先以相机的最佳深度分辨率运行

    • 英特尔实感系列D435:848*480
    • 可以使用较低的分辨率,但会降低深度精度。立体深度传感器的深度测量性能来自匹配左右图像中物体位置的能力。输入分辨率越高,输入图像越好,深度精度越好
    • 如果由于计算原因,应用程序需要较低的分辨率,我们建议使用后处理算法在收到数据后立即对更高分辨率的深度图和彩色图像进行子采样(抽取)。将D4xx相机设置为较低分辨率模式的唯一令人信服的理由是:
      • 减小最小工作范围,该范围将随 x-y 分辨率进行扩展,
      • 减少USB3.0总线上的带宽,例如,如果达到带宽限制,则允许更多摄像机同时运行。

    确保图像已正确曝光(曝光不佳时性能不佳的首要原因)

    检查自动曝光是否良好,若不好,则切换到手动曝光以确保拥有良好的灰度左右图像。曝光不佳是性能不佳的首要原因。

    通常,我们建议先调整曝光以获得最佳效果,同时保持GAIN=16(最低设置)。增加增益往往会引入电子噪声,虽然彩色图像可能看起来更好,但深度质量会下降。曝光单位为微秒,因此33000为33ms。请注意,过度曝光图像可能与曝光不足一样糟糕,因此请小心找到合适的曝光。

    自动曝光功能的使用见官方手册

    后处理

    英特尔没有对深度图像进行任何的后处理,而是将其留给其他的应用程序。在SDK2.0中有一些简单的后处理选项,通常有以下处理步骤:

    1. 子采样:在捕获后降低x-y分辨率通常有利于减少更高级别的计算。分辨率减低2倍讲授后续处理速度提高4倍。此外,子采样可用于使用非零均值或非零中位数函数对数据进行一些基本的孔填充和平滑处理。最后,子采样实际上也有助于点云的可视化。
    2. 时间过滤:使用一些时间平均来改善深度,深度数据中存在时间噪声。建议使用 IIR 过滤器。但在某些情况下,使用“持久性”也可能是有益的。
    3. 保留边缘的滤波:平滑深度噪点,保留边缘,同时使表面更平坦。建议在视差域(即深度刻度为 1/距离)中进行此处理,并通过逐渐增加步长阈值进行试验,直到它看起来最适合预期用途。另一种成功的后处理技术是使用由 RGB 图像引导的域变换滤波器或双线性滤波器。例如,这可以帮助锐化边缘
    4. 孔填充:有必要根据相邻值或RGB图像用最佳猜测来填充孔

    更改深度步长

    可能需要在高级模式 API 中更改“深度单位”。默认情况下,D4 VPU 提供 16 位深度,深度单位为 1000um (1mm)。这意味着最大范围将约为65m。但是,例如,通过将其更改为5000um,可以将深度报告为最大值5x65 = 325m。

    彩色摄像头

    优点:

    1. 像素完美对齐、校准并与深度图重叠
    2. 完美的时间同步
    3. 无需额外的开销即可对齐颜色与深度
    4. 不会产生额外的遮挡伪像,因为它完全共对其。

    缺点:

    1. 如果投影仪打开,它通常会显示投影仪图案

    使用阳光,但避免眩光

    1. 阳光可以降低传感器的噪音,并倾向于"带出"物体的纹理。此外,曝光可以减少到接近1ms,这也减少了运动伪像。因此,结果是英特尔实感D4xx摄像头实际上在阳光下表现非常好。
    2. 需要注意的一个问题是指向太阳或靠近太阳时的镜片眩光。建议用挡板遮挡镜片,以降低镜片眩光的风险。
    3. 在自动曝光方面要特别小心,尤其是在图像中可以看到太阳或太阳反射的情况下。默认情况下,自动曝光算法会尝试将整个图像的平均强度保持在一定范围内。如果太阳在那个图像中,其他一切都会突然变成黑色。对于许多应用,如自主机器人或汽车,只需将自动曝光算法的兴趣区域更改为较小的尺寸,或者具体到图像的下半部分,它会有所帮助。
    展开全文
  • Grasping_Franka 使用Franka Emika和RealSense D435进行机器人抓取
  • ubuntu16.04 Intel Realsense D435i 环境安装

    千次阅读 2022-04-13 17:28:26
    ubuntu16.04 Intel D435i 开发背景intel Realsense D435i 环境配置 背景 选intel Realsense D435i,是看重了这款相机可以和机械臂搭建成eye-in-hand的机械臂平台。至于选择ubuntu16.04,是因为机械臂的开发是在...

    背景

    选intel Realsense D435i,是看重了这款相机可以和机械臂搭建成eye-in-hand的机械臂平台。RealSense是通过红外飞行时间获取深度的,更适合室内场景(之前用的zed2的深度是通过双目计算深度,适用于室内室外,但对于很细的导线是无法双目匹配的)。至于选择ubuntu16.04,是因为机械臂的开发是在ubuntu16.04下进行的。
    这次开发内容是:在工控机下通过yolov5+intel D435i 来识别物体,获取物体的三维坐标给到机械臂并进行控制。

    intel Realsense D435i 环境配置

    工控机安装ubuntu16.04系统(不讲啦)、安装ros-kinetic(可看回以前的文章)

    安装realsense D435i SDK以及realsense-ros

    隔了几天才写,尽量把安装过程都写正确。

    先说说坑,再说正常流程

    realsense-ros 要和 librealsense 版本匹配,个人建议先正常安装SDK和realsense-ros,查看realsense-ros支持的librealsense版本后再重新安装指定的SDK版本

    你可以通过下图或者github的librealsense-ros中的可以看到realsense-ros需要对应的版本是realsense 2.50.0,其他人可能是直接更换这个版本,我是重新下载realsense指定的 2.50.。
    realsense-ros

    安装librealsense-sdk(参考了官方文档

    正常安装如下

    1. 更新系统
    sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
    
    1. 下载源码
    git clone -b v2.50.0 https://github.91chi.fun//github.com/IntelRealSense/librealsense.git
    
    1. 断开realsense的USB连接,安装依赖
    sudo apt-get install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
    
    sudo apt-get install libglfw3-dev
    

    4.安装realsense所需的内核模块

    cd librealsense
    
    ./scripts/setup_udev_rules.sh
    

    安装补丁包,执行比较慢,有V-p-n就好

    ./scripts/patch-realsense-ubuntu-lts.sh
    

    编译安装

    mkdir build && cd build
    
    cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=true
    
    sudo make uninstall && make clean && make -j8 && sudo make install
    

    成功后,打开viewer,连接摄像头就能看到内容啦

    realsense-viewer
    

     
     

    可能遇到的问题
    执行cmake时候版本太低,所以下载高版本的camke

    apt-get安装cmake后卸载方法(参考这位博主

    sudo apt-get remove cmake
    

    地址:https://cmake.org/download/
    下载最新版本的cmake-3.23.1.tar.gz

    cd cmake-3.23.0
    sudo ./configure
    sudo make
    sudo make install
    

    查看新版本

    cmake --version
    

    更新Cmake后出现CMake Error Could not find CMAKE_ROOT错误
    新开一个终端就好啦,原因是该终端的hash表有缓存之前版本cmake的路径导致的。

     
     

    源码编译 realsense-ros

    创建工作空间

    mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/src
    

    下载源码,并检查依赖

    git clone https://github.com/IntelRealSense/realsense-ros.git
    cd realsense-ros/
    git checkout `git tag | sort -V | grep -P "^\d+\.\d+\.\d+" | tail -1`
    sudo apt-get install ros-kinetic-ddynamic_reconfigure
    

    编译

    cd ~/catkin_ws
    catkin_make clean
    catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
    catkin_make install
    echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    

    这期间会遇到 dddynamic_reconfigure 没有安装,下载,然后catkin_make

    测试

    启动roscre

    roscore
    

    调用点云图

    roslaunch realsense2_camera rs_camera.launch filters:=pointcloud
    

    rviz启动

    rviz
    

    在这里插入图片描述
    如果你的python版本不是切换到python2.7那么你会启动不了roscore,切换方法如下

    sudo update-alternatives --config python
    

    选者手动就好啦,具体切换过程看这位:博主`

    展开全文
  • D435i vins搜集资料

    千次阅读 2022-03-22 10:04:21
    D435i上运行VINS-Mono 前面都测试好之后就可以再D435i上运行VINS-Mone了,这里特地感谢下博客如何用Realsense D435i运行VINS-Mono等VIO算法 获取IMU同步数据的作者Manii,让这个过程变得非常简单...
  • 使用D435i运行VINS-Mono1. Intel RealSense SDK 2.0的安装 1. Intel RealSense SDK 2.0的安装 /camera/accel/imu_info /camera/color/camera_info /camera/color/image_raw /camera/depth/camera_info /camera/...
  • D435i&Rtabmap&Vins目录D435id435i驱动安装D435i launch文件重要参数解析RTAB-MAPRTAB-MAP?RTAB-MAP原理RTABMAP安装RTABMAP实测效果总结RTABMAP launch文件重要参数解析Rtabmap内部运行关键参数VINS-...
  • ORB_SLAM需要修改的部分包括CMakelist.txt和rgbd_tum.cc,这部分需要较大改动。首先看rgbd_tum.cc,由于我们打算完成一个实时系统,所以不在需要数据的读取、color和depth的匹配;可以省去相当部分的工作。...
  • RealSense D435——基本介绍

    千次阅读 2022-01-10 12:30:25
    一、结构介绍 采用的是结构光Tof成像方案。 正面的四个摄像头从左至右,依次是左红外相机、红外点阵投影仪、右红外相机、RGB相机。(前三个负责形成深度图,最后一个就形成...Realsens D435/435i简介及安装教程 ...
  • Realsense D435I标定

    万次阅读 多人点赞 2019-07-26 14:56:25
    参考链接 :kilibr官网   ... ... ...前期准备:在ubuntu16.04配置好realsense d435i相机环境,详细参见前面的...tip:深度图与彩色图对齐:在d435i的launch文件(rs_camera.launch)里修改align_depth值为true即可。  
  • D435i相机标定(不同标定方法总结)

    千次阅读 2021-09-29 18:13:43
    cd ~/catkin_biao/src/imu_utils/launch touch d435i_imu_calibration.launch gedit d435i_imu_calibration.launch 文件内容: <launch> <node pkg="imu_utils" type="imu_an" name="imu_an" output="screen"> ...
  • 基于D435i的点云重建

    千次阅读 2022-01-18 11:48:58
    Task: 采用D435i采集深度图和RGB图像,进行点云重建和聚类。 1)解析Bag数据: import os import cv2 import numpy as np import rosbag from cv_bridge import CvBridge import sensor_msgs.point_cloud2 as pc2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,108
精华内容 11,643
关键字:

d435