存档:基于鼠标的光学流量传感器(ADNS3080)¶
备注
此页面已存档,ArduPilot 软件不再支持该设备
APM2.x 板上的 Copter-3.2.1 包含对基于鼠标传感器的有限支持。 光学流量传感器 飞行模式。
警告
最近版本的固件不支持该传感器。请使用 PX4 流量传感器.


将传感器连接至 APM2.5¶
如下图所示连接 VCC、GND、MISO、MOSI、SCLK 和 NCS 引脚
默认安装方式为镜头朝下,插销向前

剪切并重新焊接电路板背面的 MISOLVL 跳线,将 MISO 引脚切换为 3.3v 电压工作。这对于确保光流量传感器不干扰 MPU6000 至关重要。

将传感器连接至 APM2¶
电源、GND 和 NCS 引脚应连接至 A3
MISO、MOSI 和 SCLK 引脚应直接焊接到所示引脚上。
默认安装方式为镜头朝下,插销向前

将传感器连接至 APM1¶
如下图所示,将导线直接焊接到油盘顶部
默认安装方式为镜头朝下,插销向前

测试传感器¶
将测试草图上传到 APM:
如果使用 APM2,您可以 从此处下载十六进制文件 然后使用Mission Planner地面站的 初始设置 | 安装固件 | 加载自定义固件 链接
如果使用 APM1,则必须打开 AP_OpticalFlow_test.pde在 arduino IDE 中绘制草图,编译并上传至 APM1
使用串行监视器或 AP Mission Planner地面站终端连接 APM
键入 "c "以确保传感器响应 APM
输入 "m "并前后移动摄像头,检查 x、y 值是否发生变化。如果没有变化,则向左或向右转动镜头,调整焦距。

从传感器捕捉图像¶
为了检查镜头是否正确对焦,您可以直接从传感器捕捉图像,并使用 Python 编写的简单查看器显示图像。

将 AP_OpticalFlow_test.pde 上传到 APM(见上文)
安装 Python 2.7(或更高版本)。 官方 Python 站点
(对于 Windows 用户,为了与 pyserial 兼容,应安装 32 位版本即使您运行的是 64 位 Windows)。
安装 PySerial 2.5.Windows 软件包 可从此处下载.
启动 Python IDLE 编辑器
文件, 打开, .../arduino-0022/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py。
运行,运行模块 - Python Shell 和 ADNS3080ImageGrabber 应用程序应会出现
在 ADNS3080ImageGrabber 屏幕上,将默认 com 端口更改为连接到 APM 的端口,然后按打开
按 "发送 "按钮开始/停止从传感器抓取图像(每 2 秒钟会出现一幅新图像)。
注 1:捕捉图像后,您需要重置传感器(即插拔插头),使其恢复到正常的动作捕捉模式。
注 2:您应在 Python Shell 中看到 AP_OpticalFlow_ADNS3080 的菜单和任何错误。
工作原理¶
鼠标传感器会返回它所看到的表面特征的平均移动量(x 和 y 方向)。单个像素的移动不会导致传感器返回 "1"。它将返回一个 5 左右的较高值。这个值被称为 定标器 如下所示。在下面的示例中,返回值约为 1.6 ( (-5+5+5) / 3)

传感器的 x 和 y 值可根据海拔高度转换为实际距离
为了将传感器的数值转换为实际移动距离,我们需要考虑高度。这一点很有必要,因为从下面两张图片中可以看出,如果两个四边形移动的距离相同,但一个高度较低,另一个高度较高,那么高度较低的四边形将看到表面特征似乎移动得更远,这将导致更高的光流值


我们对载具的侧倾和俯仰变化进行补偿
载具滚动和俯仰的变化也会导致传感器返回的 x 和 y 值发生变化。与横向移动计算不同的是,这些变化并不取决于可见物体的距离。在下图中,您可以看到四轮车翻滚了 10 度,但两朵花都从第一张照片中的摄像头视角中心移动到了第二张照片中的视角边缘。

根据下面的公式,可以直接从滚动和俯仰的变化中计算出传感器值的预期变化。我们从传感器返回的实际值中减去这些预期变化。

获得 x/y 运动值后,我们就可以将这些值与当前偏航值进行时间上的整合,从而估算出位置。
已知问题¶
传感器只能在光线充足的环境下工作
使用的是定焦镜头,这意味着它无法聚焦 30 厘米(1 英尺)以下的物体。
旋转传感器会混淆传感器
致谢:¶
马尔科-克莱因-贝肯布什的 用鼠标传感器保持位置
研究论文 位置保持光流
研究论文 光流避物