光流传感器

参考手册目录

光流传感器(基于鼠标传感器版本)



为了提高不能用GPS的环境的位置保持的精度,APM:Copter现在支持基于鼠标传感器的光流传感器


连接传感器至 APM1

  • 直接把线焊到盖板上面,如下图所示
  • 默认的安装方式是镜头朝下,引脚朝前


连接传感器至APM2

  • 电源、地、NCS引脚应连接到 A3
  • MISO, MOSI 和 SCLK 引脚应直接焊接到下图所示的引脚
  • 默认的安装方式是镜头朝下,引脚朝前


连接传感器至 APM2.5

注:截止 2012 年 9 月 15 日,在 APM 2.5 上支持光流的代码还没有发布。

  • 如下图所示,连接 VCC, GND, MISO, MOSI, SCLK 和 NCS 引脚
  • 默认的安装方式是镜头朝下,引脚朝前

  • 断开板子背面 的 MISOLVL 跳线,重新焊接使 MISO 引脚工作在 3.3v。 这非常重要,确保光流传感器不会干扰 MPU6000。


测试传感器

  • 上传测试sketch到APM:
        • 如果使用的是APM2,你可以在下载区下载hex文件,然后使用Mission Planner的初始设置 > Install Firmware > Load custom firmware的链接,上传到你的APM2
        • 如果你使用的是APM1,你需要打开Arduino IDE 加载AP_OpticalFlow_test.pde,编译并上传到你的APM1
  • 用串口监视器或 AP Mission Planner终端连接 APM
  • 输入 'c',确保传感器响应APM
  • 输入 'm',把摄像头前后启动,检查 x,y 值变化。 如果没有变化,左右旋转镜头调整焦距。


从传感器捕获图像

为了检查你的镜头是否对焦合适,你可以从传感器直接捕捉一张图片,并用一个 Python 写的查看器显示该图片。

  1. 把 AP_OpticalFlow_test.pde 上传到 APM (参见上方)
  2. 安装 Python 2.7(或更新的版本)http://www.python.org/getit/
    (对于windows用户,为了pyserial兼容性,您应安装32位版本即使您使用的是64位Windows)
  3. 安装 PySerial 2.5。 Windows 安装包在 (这里)
  4. 启动 Python IDLE 编辑器
  5. File(文件),Open(打开),…/arduino-0022/libraries/AP_OpticalFlow/examples/ADNS3080ImageGrabber/ADNS3080ImageGrabber.py
  6. Run(运行),Run Module(运行模块) – 会先出现 Python 命令行,然后出现 ADNS3080ImageGrabber应用
  7. 在 ADNS3080ImageGrabber 界面, 把默认 com 端口改成 APM 用的端口,点击 Open
  8. 按 Send 按钮启动/停止捕获图片 (每 2 秒应该出一张新图片)

注1: 捕获图像后,你需要重置传感器(即拔掉插回它)来将其恢复到正常运动捕获模式。

注2:你可以在 Python 命令行窗口看见 AP_OpticalFlow_ADNS3080 的菜单和任何错误提示


它是如何工作的

鼠标传感器返回它看见的表面特征的平均运动(x 和 y 方向)。 单个像素点的运动不会使传感器输出 "1"。 它会返回一个更高的 5 左右的值。 这个值在下面成为 scaler。 在下面的例子中,返回值大约是 1.6 ( (-5+5+5) / 3)

传感器的 x 和 y 值可以根据高度转换为实际距离

为了把传感器输出值转换成实际运动的距离,我们需要考虑高度。 从下面的两张图中可以看到,如果两个四轴运动了同样距离,但是一个低,一个高,低的一个会看到表面特征运动得更远,所以光流数值会更大。

我们弥补飞行器侧倾和俯仰变化

飞行器的侧倾和俯仰的变化也将导致传感器返回的X和Y值的变化。 与横向运动的计算不同,这些都不依赖于可见物体的距离。 在下面的图片中,你可以看到的四轴已经侧倾了10度,但第一张图中视角中心的两个花都移到了第二张图片的视角边缘。

传感器值预期的变化可以根据下面的公式用侧倾和俯仰的变化算出。 我们把这些预期的变化从传感器返回的实际值中减去。

我们得到的 x/y 轴的运动后,就可以与当前的偏航相结合结合,用于估计位置。


已知问题

  • 传感器只能在光线好的环境下工作
  • 因为使用定焦镜头,所以不能对近于30厘米的物体对焦。
  • 旋转传感器将使传感器混乱

致谢:

  1. Marko Klein Berkenbusch的 用鼠标传感器保持位置
  2. 研究论文光流用于位置保持
  3. 研究论文光流用于避障

[question]
[translator main=”螺丝刀,斯东”]


Questions about this page? Comments? Suggestions? Post to APM Forum! Use the platform specific to your query, and make sure to include the name of the page you are referring to.