当前位置:   article > 正文

OAK-D-Long-Range: 让你的机器人拥有鹰一样的视觉!3D视觉精度与点云方案!_oak-d-long-range 让你的机器人拥有鹰一样

oak-d-long-range 让你的机器人拥有鹰一样

OAK-D LONG RANGE – 精度与点云

有没有想过让你的机器人有鹰的视力?来看看我们OAK-D-Long Range相机吧!这是一款3D+AI相机,为全球项目带来了超强的视觉效果!让我们深入了解它是如何通过15cm的基线做到这一点的!

15CM基线: 更深度的透视

有了15厘米的立体基线,OAK-D -Long-Range可以更准确地感知更远的物体。在配置立体深度文档中(Configuring Stereo Depth (luxonis.com),我们提到基线距离(线性)与精度相关,因此,如果我们将基线距离增加2倍,则在相同距离下的误差将减少2倍。
在这里插入图片描述

深度精度

在我们的深度精度文档()Depth accuracy (luxonis.com)页面上,我们有关于每个设备精度的更深入(双关语)信息,以及关于精度图为何如此的图表和解释。以下是我们的OAK-D-Long-Range的深度精度(与距离有关):
在这里插入图片描述
这种精度是通过具有82°水平FOV的默认镜头获得的。如果我们减少FOV(不同的镜头或中央裁剪框,而不是ISP缩小尺寸),我们会获得更好的远距离精度。

点云

图形很好,但如果相机不适用于现实世界中的应用程序,它们就毫无用处。我们在一辆振动重型拖拉机(一辆有30年历史的IMT 549)上录制了一些镜头,未经过滤的点云看起来相当不错。
使用rerun.io(Rerun — Visualize multimodal data over time),我们可视化了直接从设备获得的RGB-D帧,并且没有主机上的后处理(额…类似于RealSense™相机的操作)。因此,如果我们添加主机计算密集型点云处理,我们将获得更平滑的曲面。

Tractor Video 1

Tractor Video 2

Tractor Video 3

Tractor Video 4

代码复现

我们使用depthai-sdk进行管道构建和回放,并使用the depthai-viewer(GitHub - luxonis/depthai-viewer: Log images, point clouds, etc, and visualize them effortlessly. Built in Rust using egui)进行可视化。我们也可以使用原生Rerun(这里有一个Rerun的例子:OAK-D Long Range Tractor pointcloud visualization with native Rerun (non-colorized pointclouds?) · GitHub),但点云不会被着色。在运行代码之前,需要安装以下要求:

python3 -mpip install depthai-sdk==1.14 depthai-viewer==0.2.2
  • 1

安装要求并将OAK设备连接到计算机(进行立体声重建)后,可以运行以下代码:

from depthai_sdk import OakCamera
import depthai as dai
import depthai_viewer as viewer
import subprocess
import sys
import cv2

# Download and run the tractor recording
with OakCamera(replay="tractor-oak-d-lr") as oak:

    # Run & initialize the depthai_viewer
    try:
        subprocess.Popen([sys.executable, "-m", "depthai_viewer", "--viewer-mode"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    except subprocess.TimeoutExpired:
        pass
    viewer.init("Depthai Viewer")
    viewer.connect()

    oak.replay.set_fps(10)
    cam_b = oak.create_camera('CAM_B')
    cam_c = oak.create_camera('CAM_C')
    # Downscale the 1920x1200 frames to 1280x800
    oak.replay.resize('cam_c', (1280, 800))
    oak.replay.resize('cam_b', (1280, 800))

    nn = oak.create_nn('mobilenet-ssd', cam_c)

    stereo = oak.create_stereo(left=cam_b, right=cam_c)
    stereo.node.setOutputSize(640, 400)
    stereo.config_stereo(confidence=215, lr_check=True, extended=True, subpixel=True, subpixel_bits=5)
    stereo.config_stereo(align=cam_c)
    stereo.node.setDepthAlign(dai.CameraBoardSocket.CAM_C)

    # On-device post processing for stereo depth
    config = stereo.node.initialConfig.get()
    stereo.node.setPostProcessingHardwareResources(4, 4)
    config.postProcessing.speckleFilter.enable = True
    config.postProcessing.speckleFilter.speckleRange = 50
    config.postProcessing.temporalFilter.enable = False
    config.postProcessing.spatialFilter.enable = True
    config.postProcessing.spatialFilter.holeFillingRadius = 1
    config.postProcessing.spatialFilter.numIterations = 1
    config.postProcessing.thresholdFilter.minRange = 400
    config.postProcessing.thresholdFilter.maxRange = 15000
    config.postProcessing.brightnessFilter.maxBrightness = 255
    stereo.node.initialConfig.set(config)

    q = oak.queue([
        stereo.out.depth.set_name('depth'),
        stereo.out.rectified_right.set_name('rr'),
        nn.out.main.set_name('nn'),
    ]).configure_syncing(enable_sync=True, threshold_ms=250).get_queue()
    # oak.show_graph()
    oak.start()

    calibData = oak.device.readCalibration()
    intrinsics = calibData.getCameraIntrinsics(dai.CameraBoardSocket.CAM_C, dai.Size2f(640, 400))
    viewer.log_pinhole("CAM_C/transform/Color", child_from_parent=intrinsics, width=640, height=400, timeless=True)
    viewer.log_rigid3("CAM_C/transform", child_from_parent=([0, 0, 0], [1, 0, 0, 0]), xyz="RDF", timeless=True)

    while oak.running():
        packets = q.get()
        depth = packets['depth']
        viewer.log_image("Right", packets['rr'].frame)

        color = packets['nn'].frame
        color = cv2.pyrDown(color) # Downscale to match 640x400 depth frame

        viewer.log_image("CAM_C/transform/Color/Image", color[:, :, ::-1]) # BGR to RGB
        viewer.log_depth_image("CAM_C/transform/Color/Depth", depth.frame, meter=1e3)

        oak.poll()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

请注意,在第一次运行时,depthai-sdk将下载大约300MB的tractor-oak-d-lr录制:

在这里插入图片描述
欢迎大家点赞!关注!评论!三连啊~~~

新朋友还想进一步了解OAK相机的话可到我们官网哦,https://www.oakchina.cn/

如果你初次遇见OAK,可来这里系统查看一下:https://www.oakchina.cn/intro/
Shopping直通车在这里:https://www.oakchina.cn/shop/

OAK中国 | 追踪AI技术和产品新动态
公众号 | OAK视觉人工智能开发
戳「+关注」获取最新资讯↗↗
如果喜欢,请一键三连吧~比心❤️

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/840835
推荐阅读
  

闽ICP备14008679号