英特尔 RealSense 深度摄像头¶
本文将介绍如何设置 英特尔 Realsense 深度摄像头 与 ArduPilot 一起用于 避障.该方法使用 Python 脚本(非 ROS)在配套计算机上运行,向 ArduPilot 发送距离信息。
购买什么¶
英特尔 RealSense 435 或 D435i 深度摄像头。其他 英特尔深度摄像头 也可
UP Squared 配套电脑 (已知赛扬 2GB 和 ATOM 可以使用)。其他配套电脑包括 RPi4 但不支持手动设置(参见下面的 "配置伴侣电脑 "部分)。
两个 USB 闪存盘(8GB 或以上)
硬件连接¶
将相机安装在载具上,朝向 转发 (其他方向尚不支持),并尽可能隔绝振动。将相机 USB 电缆连接到 UP2 电路板的蓝色 USB3 端口之一
将 UP Squared 的串行端口连接到(飞行)控制器的一个遥测端口(即 Telem1、Telem2),如下图所示
设置 UP Squared¶
将 APSync 安装到 UP Squared:
下载最新的 APSync 映像 (在此处查找 apsync-up2-d435i-yyymmdd.tar.xz) 并复制到其中一个 USB 闪存盘中
格式化第二个 USB 闪存盘并使用 Tuxboot 安装 Clonezilla 上
将第二个 USB 闪存盘插入 UP Squared 的 USB 端口,然后启动 UP Squared 电路板
CloneZilla 启动菜单应该会出现,按回车键选择第一个选项
在 CloneZilla 中:
按回车键接受默认键盘布局
按回车键启动 clonezilla
按回车键选择设备图像
按回车键输入 local_dev
插入第二个 U 盘,其中已复制了 APSync 映像
按回车键继续并检测 USB 设备
检测到设备后,使用 ctrl-c 退出检测屏幕
使用光标键选择包含 APSync 图像的设备
选择包含图像的 apsync 目录
使用制表符将 "光标 "移到 "完成 "上,然后按回车键
按回车键确认磁盘空间使用情况
按回车键选择初级模式
使用光标键选择 "restoredisk",然后按回车键
选择要恢复的图像文件,再次按回车键
选择要覆盖的目标磁盘。该磁盘上的任何数据都将被 APSync 映像覆盖。按回车键
选择 "是 还原前检查镜像",然后按回车键。这将确保复制到 USB 上的映像是健康的。
选择"-p choose"。在任何提示下按回车键,直到恢复开始
现在应该可以看到安装进度,请稍等片刻
提示将所有数据覆盖到所选磁盘时,输入 "Y"。
克隆过程结束后,系统会提示克隆成功,请按回车键继续。
按回车键 "关闭电源"
从电路板上移除所有 USB 记忆棒。还可以移除显示器输入。
重新启动
升级相机固件¶
检查相机固件是否为 5.12.8.200 或更高版本。可以使用 固件更新工具(仅限 Windows) 或 英特尔 Realsense 查看器
如果使用 固件更新工具 的 最新的相机固件可在此处找到
如果使用 英特尔 RealSense 浏览器 下载并安装后,用 USB3 电缆将相机连接到电脑。固件升级可通过应用程序右上方的弹出窗口或 "更多 "菜单触发,如下图所示
配置 ArduPilot¶
用地面站(如Mission Planner地面站)连接(飞行)控制器,检查是否设置了以下参数:
serial2_protocol = 2 (MAVLink2)。请注意,前提是配套计算机连接到 AutoPilot "Telem2 "端口。
SERIAL2_BAUD = 921(921600 波特)
启用任何 避障 由您自己选择。 简单的回避行为 (停止/滑动)将作为本维基的示例:
下面是第一个接近传感器的设置示例:
PRX1_TYPE = 2:用于 MAVLink
AVOID_ENABLE = 7:"全部",使用所有障碍物信息来源,包括 "接近 "传感器
具体示例 位置悬停
和 AltHold
模式:
避免马金 = 1.5:载具在距离障碍物多少米处试图停止或试图沿障碍物滑行
AVOID_BEHAVE = 1:载具应在障碍物前停止 (1),还是绕障碍物滑行 (0)
AVOID_DIST_MAX = 1.5:在 AltHold 状态下,载具在距离障碍物多远时开始偏离障碍物
避开最大角度 = 3000:载具尽量偏离障碍物的程度
可选:您可以指定一个 RC 开关来启用 "避让",而不是默认情况下的 "始终打开"。在Mission Planner地面站中设置 RC7 以打开 "避让 "的示例:
修改参数后,重新启动(飞行)控制器。
地面测试:飞行前验证¶
要验证 APSync 映像是否正常工作以及一切配置是否正确,请确保 ArduPilot 接收到以下信息 障碍物距离
信息,在Mission Planner地面站上:按 Ctrl+F
并单击 "Mavlink 检查器",就能看到输入的数据:
如果您有稳定的遥测连接,则"......
障碍物距离
信息应接近15 赫兹
.如果没有,请使用 USB 电缆连接 AP 和 GCS,以确保 AP 按预期接收到避障数据,然后再继续操作。
在Mission Planner地面站中,打开 邻近性 观点
(Ctrl-F
>; 邻近性
):
将载具/深度摄像头置于一些障碍物前方,检查距离最近的障碍物的距离是否准确,并显示在 "接近 "视图中。
邻近视图会将 45 度弧线范围内的所有距离都归为一组(载具周围共有 8 个象限),因此最多只能显示 3 个象限。 最近的 由于摄像机的视场角小于 90 度,因此在 "接近 "窗口中任何时候都会显示障碍物。
飞行测试¶
第一次飞行
测试过程:起飞 -> AltHold / Loiter -> 向障碍物移动。
只能轻推载具并观察其反应。
预期行为:载具应停止/滑行(由
AVOID_BEHAVE
)在距离障碍物一定距离处(由避免边距/避免距离最大值
取决于飞行模式)。
如果一切正常,下一步就是测试特定传感器/载具/环境的安全系数:
由于摄像头的视场角和最小/最大深度范围有限,因此必须测试其极限值,以确保载具在实际环境中的安全。
飞行员应该对这些余量有一个粗略的估计,并在飞行任务计划中加入一些开销。
实验¶
首次手动测试:确认存在障碍物时的预期行为,以及飞行器和摄像机的视场角和安全裕度。飞行在 Loiter 模式下进行:
自主飞行测试:下面的视频短片总结了实际实验中的主要步骤以及工作系统应该如何运行。在此示例中,飞行器将尝试按照方形模式飞行,但会在任何障碍物前停下。
数据闪存记录¶
深度摄像头的相关信息如下
PRX.CAn
和PRX.CDist
分别代表最近物体的角度和距离。您还可以查看每个象限(D0、D45 和 D315,即 0 度、45 度和 315 度)的距离数据。请注意,CAn 的数值范围是 360 度,而 CDist 和其他 Dangle 的数值范围只有几米,因此您可能需要分别查看。
系统概述¶
简而言之,该脚本将把 Realsense 深度摄像头提供的深度图像转换成与前方障碍物的距离。AP 支持 距离传感器 和 障碍物距离 MAVLink 信息,前者携带单一距离,后者携带一系列距离。 障碍物距离
允许我们同时发送多达 72 个距离,因此将使用它。
首先,重要的是要在 未经加工的 深度图像,以避免黑洞和噪音,并对数据进行总体改进,从而获得更稳定的结果。下面是完整的 过滤器列表 脚本中包含的过滤器,你可以单独启用它们。要测试不同过滤器的设置,可以使用 rs-深度-质量 由
librealsense
或运行示例opencv_depth_filtering.py
脚本下图展示了原始(左)和过滤后(右)的深度图像,水平线是我们计算与障碍物距离的位置。
接下来,从输入/处理过的深度图像来看,距离必须在同一水平线上。 水平 线(如右图所示),因为信息中没有区分不同俯仰角的区域。我们将摄像机的水平视场划分为 72 条均匀分布的光线。沿着每条射线,我们选择与射线末端相对应的像素,并拾取深度值。
随后,当载具上下俯仰时,障碍物线将通过补偿载具当前的俯仰保持 "固定"。 态度 MAVLink 信息。
最后,发送信息的频率应在 10Hz 或更高,这取决于载具的行驶速度。
手动设置配套计算机¶
只有在尚未将 APSync 安装到配套计算机的情况下,才需要执行这些步骤。
用于配套电脑:
操作系统: Ubuntu 18.04 (强烈建议使用该版本,因为该版本是所需库的最新版本)。
Python 3.6 及以上版本,这也是 Ubuntu 18.04 的标准。请使用
$ python3 -V
你应该看到Python 3.6.9
或更高。librealsense下载或安装 官方来源.
pyrealsense2
还需要
不同系统的安装过程差异很大,因此请参考 官方 Github 页面 了解具体系统的说明:
安装支持软件包¶
首次安装 适用于 Ubuntu 的 Python3 (对于 Ubuntu 18.04 及更高版本而言并非必要)。然后,您就可以运行英特尔提供的示例了。 ~/librealsense/wrappers/python/examples
使用 Python3 命令。
# 更新 PYTHONPATH 环境变量,添加 pyrealsense2 库的路径
出口 飞龙之路=$PYTHONPATH:/usr/local/lib
CD ~/librealsense/wrappers/python/examples
# 你应该能看到来自 D4xx 摄像头的深度数据流。
python3 python-tutorial-1-depth.py
为 Python3 安装 pip (pip3) 和其他辅助软件包:
苏都 apt-get 安装 python3-pip pip3 安装 pyrealsense2 pip3 安装 转换 pip3 安装 dronekit pip3 安装 apscheduler pip3 安装 串行 # 用于串行连接
管道3 安装 opencv-python sudo 适切 -y 安装 python3-gst-1.0 gir1.2-gst-rtsp-server-1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-ugly libx264-dev
# 只有在安装了最小版本的 Ubuntu 时才有必要
苏都 适切 安装 python3-opencv
下载主脚本 d4xx_to_mavlink.py 或克隆 对马夫罗斯的憧憬 仓库,找到脚本文件夹。
CD /path/to/download # 或 ROS 工作区 ~/catkin_ws/src
git 复制 https://github.com/thien94/vision_to_mavros.git
CD vision_too_mavros/script chmod +x d4xx_to_mavlink.py chmod +x opencv_depth_filtering.py # 用于测试过滤选项
与 AP 一起使用的主要脚本是
d4xx_to_mavlink.py
.第二个脚本opencv_depth_filtering.py
可用于在闲暇时测试不同的过滤选项。
修改脚本¶
如果没有安装监视器,请禁用脚本中的调试选项 d4xx_to_mavlink.py
通过设置 启用默认调试 = 假的
或添加参数 --调试启用 0
运行脚本时:
运行脚本:
CD /path/to/script python3 d4xx_to_mavlink.py
如果启用了调试选项,请等待显示输入和处理后的深度图像。在右上角可以看到处理速度(帧/秒)。输出图像(右侧)上的水平线表示我们找到与摄像头前方障碍物距离的直线。
设置摄像机 RGB 图像的视频馈送:
剧本
d4xx_to_mavlink.py
有一个选项rtsp_streaming_enable
.如果启用 (正确
),Realsense 摄像机的 RGB 图像视频流将在以下网站提供rtsp://<ip-address>:8554/d4xx
与<ip-address>;
UP2/配套电脑。在Mission Planner地面站中:右键单击 HUD > Video > Set GStreamer Source,打开 Gstreamer url 窗口。将以下示例管道传入 Gstreamer url 窗口。更改
<ip-address>;
因此:
rtspsrc 地点=rtsp://<ip-address>:8554/d4xx 盖帽="application/x-rtp、 媒体=(字符串)视频 时钟速率=(int)90000, 编码名=(字符串)H264" 潜伏期=100 ! 队伍 ! rtph264depay ! avdec_h264 ! 视频转换 ! 视频/x-原始格式=BGRA ! 应用汇 名字=外溢
视频传输的延迟取决于网络和管道配置,因此请随时调整/修改参数。
由于深度摄像头在不同设置/环境下的性能各不相同,建议在实际飞行前进一步调整脚本设置。以下是根据系统实际实验所做的一些改进:
当载具在地面上行驶时,深度图像的大部分可能会看到地面。在这种情况下,在
d4xx_to_mavlink.py
脚本,减少障碍物线高比例
参数(更接近零),将障碍物检测线上移。如果深度数据有噪声,可以通过修改
障碍物线宽像素
参数。在撰写本文时,我们的想法是处理某个边界(由该参数定义)内的一组像素,并找出最低值作为对象的指示符。如果将来开发出更好的方案,这一点可以改变。
提示
深度摄像头可与 用于非 GPS 导航的 Realsense T265 跟踪相机.支持 脚本 可简化同时使用多台摄像机的操作。