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

news2024/11/26 2:56:03

文章目录

前言

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)可以简化同时使用多个摄像头的过程。

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

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

相关文章

每天学点儿Python(5) -- 序列索引和切片

Python中&#xff0c;序列是指一块可存放多个值的连续内存空间&#xff0c;这些值按一定顺序排列&#xff0c;可通过每个值所在位置的编号&#xff08;称为索引&#xff09;访问它们。它类似于C/C中的数组或字符串&#xff0c;但又比数组或字符串强大很多 序列类型包括字符串、…

(洛谷P34060):海底高铁—->差分数组,贪心思想

海底高铁 题目描述 该铁路经过 N N N 个城市&#xff0c;每个城市都有一个站。不过&#xff0c;由于各个城市之间不能协调好&#xff0c;于是乘车每经过两个相邻的城市之间&#xff08;方向不限&#xff09;&#xff0c;必须单独购买这一小段的车票。第 i i i 段铁路连接了…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

掌握 C# 爬虫技术:使用 HttpClient 获取今日头条内容

摘要/导言&#xff1a; 在本文中&#xff0c;我们将探讨如何使用 C# 中的 HttpClient 类和爬虫代理IP技术来获取今日头条的内容。我们还将实现多线程技术&#xff0c;以提高数据采集的效率。 背景/引言&#xff1a; 随着信息时代的到来&#xff0c;数据已经成为了一种非常宝…

Leetcode110_平衡二叉树

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;…

机器学习machine learning

1. 概念 机器学习是从数据中提取知识。涉及统计学和人工智能&#xff0c;也被称为预测分析或统计学习。 应用领域非常广泛&#xff0c;用户习惯预测&#xff0c;个性推荐&#xff0c;分析DNA序列等等。 机器学习优势是将决策过程自动化&#xff0c;需要涉及较好的算法。如果…

如何打造高度柔性动态的智能仓储物流解决方案?

近年来&#xff0c;仓储物流行业步入自动化系统集成时代&#xff0c;以货架为存储主体的方式逐步发展成为了自动化储方式&#xff0c;核心设备也由货架转变为机器人货架&#xff0c;形成系统集成物流存储体系。河北沃克根据客户需求精准发力&#xff0c;推出了新一代海格里斯智…

九招!教做出立体感十足的地图组件,不服?还有谁

一、立体感地图在可视化大屏中的作用 在可视化大屏中&#xff0c;立体感十足的地图组件可以起到以下作用&#xff1a; 引导用户注意力&#xff1a;立体感的地图组件可以吸引用户的注意力&#xff0c;使其更加关注地图所代表的信息和数据。通过增加立体感&#xff0c;地图组件可…

Spring Security——08,自定义失败处理

自定义失败处理 一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint 二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足 一键三连有没有捏~~ 我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json&#xff0c…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

基于spring boot的社区医院管理服务系统

基于spring boot的社区医院管理服务系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

【MySQL】数据库开篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是数据库&#xff1f; 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…

Python实现对一个IP地址和端口号列表进行nmap扫描

一.功能目的 使用python实现对一个IP地址和端口号列表进行nmap扫描 二.功能调研 根据查找得知我们需要用到python的subprocess库 1.代码示例 以下是搜到的简单的subprocess库代码 import subprocess result subprocess.run([ls, -l], capture_outputTrue, textTrue) …

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

嵌入式学习50-单片机3

知识散记&#xff1a; 1. xdata 开到扩展内存 2.memcpy 内存拷贝 1、什么是并行通信、串行通信&#xff1f; 并行通信&#xff1a; …

DS18B20与单片机的通信、DS18B20采集温度、MODBUS协议、练习框架

我要成为嵌入式高手之4月9日51单片机第四天&#xff01;&#xff01; ———————————————————————————— DS18B20温度传感器 单总线数字温度计 异步的半双工的串行通信 测量范围从-55℃ ~ 125℃&#xff0c;增量值为0.5℃ 要用DS18B20采集温度&am…

远程控制软件免费

远程控制软件免费&#xff1a;选择、价值与安全性探讨 随着科技的进步和互联网的普及&#xff0c;远程控制软件在日常生活和工作中的应用越来越广泛。这类软件允许用户通过网络远程访问和控制另一台计算机&#xff0c;为远程办公、技术支持和在线教育等提供了极大的便利。本文…

Java中双重检查锁(double checked locking)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 双重检查锁&#x…

电脑硬件 - 内存

内存&#xff0c;是一台电脑的CPU与硬盘间数据交互的中转站。不稳定的内存时常会导致蓝屏&#xff0c;黑屏&#xff0c;死机&#xff0c;甚至电脑无法亮机。 在电脑工作中&#xff0c;CPU和硬盘间无时无刻地进行着大量的数据交互。为了保证软件流畅正常运行&#xff0c;会在中…

大厂Java笔试题之与7有关的数

题目&#xff1a;输出 1到n之间 的与 7 有关数字的个数。 一个数与7有关是指这个数是 7 的倍数&#xff0c;或者是包含 7 的数字&#xff08;如 17 &#xff0c;27 &#xff0c;37 ... 70 &#xff0c;71 &#xff0c;72 &#xff0c;73...&#xff09; 比如输入20&#xff0c;…