(3)(3.1) 英特尔Realsense深度摄像头(三)

2024-04-12 10:36

本文主要是介绍(3)(3.1) 英特尔Realsense深度摄像头(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

前言

10 系统概述

11 手动设置配套计算机


前言

本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用,以实现避障(obstacle avoidance)。该方法使用在配套计算机上运行的 Python 脚本(非 ROS)向 ArduPilot 发送距离信息。


10 系统概述

简而言之,该脚本会将 Realsense 深度摄像头提供的深度图像转换成与前方障碍物的距离。AP 支持 DISTANCE_SENSOROBSTACLE_DISTANCE MAVLink 消息,前者携带单个距离,后者携带距离数组。OBSTACLE_DISTANCE 允许我们同时发送多达 72 个距离,因此我们将使用它。

  •  首先,必须对原始深度图像应用某种形式的滤波器,以避免黑洞和噪音,并改进数据以获得更稳定的结果。以下是脚本中包含的滤镜的完整列表(list of filters),你可以单独启用这些滤镜。要测试不同滤镜的设置,可以使用 librealsense 提供的 rs-depth-quality 示例或运行 opencv_depth_filtering.py 示例脚本。下图展示了原始(左)和过滤后(右)的深度图像,水平线是我们计算与障碍物距离的位置; 

  •  接下来,从输入/处理后的深度图像来看,由于信息中没有区分不同俯仰角度的区域,因此距离需要在同一水平线上(如右图所示)。我们将摄像头的水平视场划分为 72 条均匀分布的光线。沿着每条射线,我们选择与射线末端相对应的像素,并提取出深度值;
  • 随后,当飞行器上下俯仰时,障碍物线将通过补偿飞行器当前俯仰(由 MAVLink 的ATTITUDE 信息提供)保持"固定";
  • 最后,发送信息的频率应在 10Hz 或更高,这取决于飞行器的行驶速度。 

11 手动设置配套计算机

只有在尚未将 APSync 安装到配套计算机的情况下,才需要执行这些步骤。

用于配套电脑:

  •  操作系统:Ubuntu 18.04(强烈建议使用此版本,因为该版本包含最新的所需库);
  • Python 3.6 及以上版本,这也是 Ubuntu 18.04 的标准版本。使用 $ python3 -V 查看版本,应该能看到 Python 3.6.9 或更高版本;
  • librealsense:从官方资源(official source)下载或安装;
  • pyrealsense2 也是必需的。 

不同系统的安装过程有很大差异,因此请参考 github 官方页面(the official github page),了解具体系统的安装说明:

  1. Ubuntu
  2. Jetson
  3. Odroid
  4. Windows
  5. Raspbian

安装支持软件包

首先为 Ubuntu 安装 Python3(Python3 for Ubuntu)(Ubuntu 18.04 及以上版本无需安装)。然后使用 Python3命令运行英特尔提供的示例,这些示例位于 ~/librealsense/wrappers/python/examples 文件夹中。

# Update the PYTHONPATH environment variable to add the path to the pyrealsense2 library

export PYTHONPATH=$PYTHONPATH:/usr/local/lib

cd ~/librealsense/wrappers/python/examples

# You should see a stream of depth data coming from the D4xx camera.

python3 python-tutorial-1-depth.py

安装 Python3pip (pip3) 和其他支持软件包:

sudo apt-get install python3-pip

pip3 install pyrealsense2

pip3 install transformations

pip3 install dronekit

pip3 install apscheduler

pip3 install pyserial # For serial connection

pip3 install opencv-python

sudo apt -y install python3-gst-1.0 gir1.2-gst-rtsp-server-1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-ugly libx264-dev

# Only necessary if you installed the minimal version of Ubuntu

sudo apt install python3-opencv

下载主脚本 d4xx_to_mavlink.py,或克隆 vision_to_mavros 软件源并找到脚本文件夹。

cd /path/to/download # Or ROS workspace ~/catkin_ws/src

git clone https://github.com/thien94/vision_to_mavros.git

cd vision_to_mavros/script

chmod +x d4xx_to_mavlink.py

chmod +x opencv_depth_filtering.py  # Useful to test the filtering options

AP 一起使用的主要脚本是 d4xx_to_mavlink.py。第二个脚本 opencv_depth_filtering.py可用于在闲暇时测试不同的过滤选项。

修改脚本

如果没有插入监视器,可通过设置 debug_enable_default = False 禁用脚本 d4xx_to_mavlink.py 中的调试选项,或在运行脚本时添加参数 --debug_enable 0

1. 用以下命令运行脚本。

cd /path/to/script

python3 d4xx_to_mavlink.py

2. 如果启用了调试选项,请等待显示输入和处理后的深度图像。在右上角可以看到处理速度(帧/秒)。输出图像(右侧)上的水平线表示我们找到的与摄像机前方障碍物距离的直线。

设置摄像机 RGB 图像的视频馈送:

1. 脚本 d4xx_to_mavlink.py 有一个选项 RTSP_STREAMING_ENABLE。如果启用(True),Realsense 摄像机的 RGB 图像视频流将在 rtsp://<ip-address>:8554/d4xxUP2 / 配套计算机的 <ip-address> 上提供。

2.Mission Planner 中:右键单击 HUD > 视频 > 设置 GStreamer 源,这将打开 Gstreamer url 窗口。将以下示例管道输入 Gstreamer url 窗口。相应更改 <ip-address>

rtspsrc location=rtsp://<ip-address>:8554/d4xx caps=“application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264” latency=100 ! queue ! rtph264depay ! avdec_h264 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink

3. 视频传输的延迟取决于网络和管道配置,因此请随时调整/修改参数。

由于深度摄像头在不同设置/环境下的性能各不相同,建议在实际飞行前进一步调整脚本设置。以下是根据系统实际实验所做的一些改进:

1. 当飞行器在地面上时,深度图像的大部分可能会看到地面。在这种情况下,可在 d4xx_to_mavlink.py 脚本中减小 obstacle_line_height_ratio参数(接近零),以向上移动障碍物检测线。

2. 如果深度数据有噪声,可以通过修改obstacle_line_thickness_pixel参数来增加障碍物线的厚度。在撰写本文时,我们的想法是处理某个边界(由该参数定义)内的一组像素,并找出最低值作为物体的指示器。如果将来开发出更好的方案,这一点可以改变。

Tip

深度摄像头可与 Realsense T265 跟踪摄像头一起用于非 GPS 导航(Realsense T265 Tracking camera for non-GPS navigation)。有一些支持脚本(scripts)可以简化同时使用多个摄像头的过程。

这篇关于(3)(3.1) 英特尔Realsense深度摄像头(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896889

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

深度优先(DFS)和广度优先(BFS)——算法

深度优先 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访

JavaEE7 Servlet 3.1(JSR 340)规范中文版

http://www.iteye.com/news/27727-jinnianshilongnian     Jave EE 7中的部分规范已正式获得批准通过,其中包括JSR340 Java Servlet 3.1规范,去年翻译了该规范,在此分享出来,希望对某些朋友有所帮助,不足之处请指正。   点击直接下载    在线版目录   Servlet3.1规范翻译

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi

java线程深度解析(五)——并发模型(生产者-消费者)

http://blog.csdn.net/Daybreak1209/article/details/51378055 三、生产者-消费者模式     在经典的多线程模式中,生产者-消费者为多线程间协作提供了良好的解决方案。基本原理是两类线程,即若干个生产者和若干个消费者,生产者负责提交用户请求任务(到内存缓冲区),消费者线程负责处理任务(从内存缓冲区中取任务进行处理),两类线程之