# PX4FLOW 智能摄像机
PX4FLOW 是一种 光流 智能相机。它的原生分辨率为 752x480 像素,能以 400 Hz 的速度在 4 倍分档和裁剪的区域上计算光流,因此具有极高的光敏感度。
与许多鼠标传感器不同的是,它还能在室内和室外微光条件下工作,无需 LED 照明。它可以自由重新编程,以执行任何其他基本、高效的低级计算机视觉任务。
- 168 MHz Cortex M4F CPU(128 + 64 KB RAM)
- 752x480 MT9V034 图像传感器,L3GD20 3D 陀螺仪
- 16 毫米 M12 镜头(红外滤光片)
- 尺寸 45.5 毫米 x 35 毫米
- 耗电量 115mA / 5V
# 购买地点
从以下网站订购该模块
- 无人技术 (打开新窗口) 英国
- 圣卡罗 (打开新窗口) (德国 & 欧盟)
- Drotek (打开新窗口)
# 规格
- 带全局快门的 MT9V034 机器视觉 CMOS 传感器
- 在 4x4 分档图像上进行光流处理 400 赫兹
- 24x24 μm 超级像素带来卓越的感光度
- 板载 16 位陀螺仪,速度可达 2000°/s,更新率为 780 Hz,默认高精度模式为 500°/s
- 机载声纳输入和支架,用于 Maxbotix 声纳传感器.(建议使用 HRLV-EZ4、 SparkFun 产品链接 (打开新窗口))
- USB 引导加载程序
- USB 串行端口,最高 921600 波特(包括实时摄像机视图,带 QGroundControl (打开新窗口))
- USB 电源选项
- 适合 MatrixVision Bluefox MV 安装孔(摄像机中心偏离中心)
# Pixhawk 设置
要使用 PX4Flow 电路板,请将其连接到 I2C 总线(任何 Pixhawk 系列控制器上),并使用以下命令启用驱动程序 sens_en_px4flow.
警告
PX4FLOW 无法在 FMUv5(Pixhawk 4)上运行,适用于 PX4 版本小于 1.9.0.所有其他 PX4/PX4-Autopilot 版本均可使用。
步骤如下
- 在 QGroundControl:
- 更新 PX4Flow 上的固件(在左上角菜单中点击 "配置",然后点击 "固件升级")。
- 设置参数 sens_en_px4flow 并重新启动(见 参数 查找和设置参数的信息)。
- 将 PX4Flow I2C 连接到 Pixhawk I2C
启用后,模块将在启动时被检测到。如果自动驾驶仪是通过以下方式连接的,流量数据应该以 10Hz 的频率传输 USB.流量数据通过无线信道传输的速率较低。
# 安装/定向
建议的安装方向定义为流量板上的 Y 指向 车头如下图所示。
关于 PX4,应使用参数 SENS_FLOW_ROT.上述方向与 sens_flow_rot=270 度(默认值)。
确保 PX4Flow 板阻尼良好。
警告
PX4Flow 会发出大量电磁辐射,因此应尽可能远离其他电子设备(特别是 GPS 模块)(请参阅 "电磁辐射")。 硬件/问题/8 (打开新窗口) 了解更多信息)。
# PX4 配置
您可能需要配置的 PX4Flow 参数如下。
参数 | 说明 |
---|---|
sens_en_px4flow | 启动 PX4 Flow 驱动程序。 |
传感器流量最大值 | 依靠光流时离地面的最大高度。 |
传感器流量最小值 | 依靠光流时离地面的最低高度。 |
SENS_FLOW_MAXR | 光学流量传感器可可靠测量的最大角流量。 |
SENS_FLOW_ROT | PX4FLOW 板相对于车体框架的偏航旋转。 |
如果将流量与 ECL/EFK2 估算器一起使用,还需要设置 光流> 估算器> EKF2 参数。通过这些参数,可以融合光学流量测量来计算速度,如果传感器不在载具中心,还可以定义偏移量。
# 连接
PX4flow 与 I2C 总线相连。如果要将多个设备连接到同一总线上,则需要为每个设备设置唯一的地址。下一节将介绍如何设置。
# PX4FLOW I2C 设备地址
PX4Flow 的默认 I2C 地址为 0x42,但可以通过标有"I2C BUS ADDR"的三个焊接跳线进行增量。如果其他设备具有相同的地址,这将非常有用。
地址增量等于跳线编码的 3 位值。例如,如果跳线 0 和 1 焊接,跳线 2 未焊接,则地址增量为 1*1 + 1*2 + 0*4 = 3,即地址为 0x45。如果所有跳线都未焊接,自动驾驶仪固件将自动发现摄像机。
8 种可能选择的地址范围是0x42 - 0x49。
地址 | 位 2 | 位 1 | 位 0 |
---|---|---|---|
7 位地址 0x42(默认值) | 0 | 0 | 0 |
7 位地址 0x43 | 0 | 0 | 1 |
: | : | : | : |
7 位地址 0x49 | 1 | 1 | 1 |
TIP
有不同的 I2C 读数可供选择。有关 I2C 帧 和 I2C 积分框架 在驱动程序源代码中。
如果修改了 PX4Flow 的 I2C 地址,请确保使用正确的地址启动 PX4 驱动程序:
px4flow start # address=0x42(默认) px4flow stop px4flow start -a 0x45 # address=0x45
# 镜头对焦
为了确保良好的光流质量,必须将 PX4Flow 上的摄像头对焦到所需的飞行高度。要使摄像头对焦,请将一个带文字的物体(如一本书)放在上面,然后将 PX4Flow 插入 USB,运行 QGroundControl.在 "设置 "菜单下选择 PX4Flow,您将看到一个摄像头图像。拧下固定螺钉,松开并拧紧镜头,找到对焦位置,对准镜头。
备注
如果飞行高度超过 3 米,相机将对焦到无限远处,在更高的飞行高度下无需更换相机。
图:使用教科书将流动相机对焦到您想要飞行的高度,通常为 1-3 米。在 3 米以上的高度,相机应该对焦到无限远处,在更高的高度也是如此。
图可用于摄像机对焦的 QGroundControl px4flow 界面
# 准确性
下面的正射影像照片显示,在公园道路上的飞行测量非常准确。这是使用 PX4FMU 在 7" quad 上进行的手动飞行,飞行高度约为 1.6 米。没有 GPS,只有 PX4FLOW 集成定位。
# 下载
# 手册和示意图
# USB 驱动程序
Linux 和 MacOS 自带所需的驱动程序。Windows 驱动程序可从以下网址下载: px4flow_win_drivers.zip (打开新窗口)
# 论文
该流程模块已被德国卡尔斯鲁厄国际机器人与自动化会议(ICRA 2013)录用为论文。
- Dominik Honegger、Lorenz Meier、Petri Tanskanen 和 Marc Pollefeys: 适用于室内外应用的开源开放硬件嵌入式公制光流 CMOS 摄像机 (打开新窗口)
# 图书馆
以下是可用于将 flow 模块集成到项目中的第三方库。
- 马夫罗斯 (打开新窗口):通用 MAVLink ROS 接口,由 Vladimir Ermakov 维护
- [px-ros-pkg]](https://github.com/cvg/px-ros-pkg):PX4FLOW ROS(机器人操作系统)接口,由 Lionel Heng 维护 ([email protected])。
- arduino-px4flow-i2c (打开新窗口):封装 I2C 接口的 Arduino 库,由 Laurent Eschenauer ([email protected]) 维护。
# 连接器
- USART2 (J2):广濑 DF13 6 位置 (Digi-Key 链接:DF13A-6P-1.25H(20) (打开新窗口))
- 配套设备广濑 DF13 6 位置外壳 (Digi-Key 链接:Hirose DF13-6S-1.25C (打开新窗口))
- USART3 (J1):广濑 DF13 6 位置 (Digi-Key 链接:DF13A-6P-1.25H(20) (打开新窗口))
- 配套设备广濑 DF13 6 位置外壳 (Digi-Key 链接:Hirose DF13-6S-1.25C (打开新窗口))
- I2C1 (J3):广濑 DF13 4 位置 (Digi-Key 链接:DF13A-4P-1.25H(20) (打开新窗口))
- 配套设备广濑 DF13 4 位置外壳 (Digi-Key 链接:广濑 DF13-4S-1.25C (打开新窗口))
- USB (J5):微型 USB-B
- 伴侣:手机数据线/充电器电缆,例如 Digi-Key 链接:安思曼 AK67421-0.5-R (打开新窗口)
- 臂式微型 JTAG(J6,//默认情况下未填充//):1.27 mm 10pos 接头(SHROUDED,用于 Black Magic 探头:Samtec FTSH-105-01-F-DV-K 或(未测试)或 Harwin M50-3600542 (Digikey (打开新窗口) 或 贸泽 (打开新窗口))
- JTAG 适配器选件 #1: 黑魔法探针 (打开新窗口).注意,可能不带电缆(请咨询供应商)。如果是这样,则需要 Samtec FFSD-05-D-06.00-01-N 电缆Samtec 样品服务 (打开新窗口) 或 Digi-Key 链接:SAM8218-ND (打开新窗口))和一条微型 USB 电缆
- JTAG 适配器选件 #2: Digi-Key 链接:ST-LINK/V2 (打开新窗口) / ST 用户手册 (打开新窗口)需要一个 ARM Mini JTAG 转 20pos 适配器: Digi-Key 链接:726-1193-ND (打开新窗口)
- JTAG 适配器选件 #3: SparkFun 链接:Olimex ARM-TINY (打开新窗口) 或任何其他与 OpenOCD 兼容的 ARM Cortex JTAG 适配器,需要一个 ARM Mini JTAG 至 20pos 适配器: Digi-Key 链接:726-1193-ND (打开新窗口)
# 光学
3D Robotics 公司提供的正确光学镜组已经安装好并进行了对焦。
- 镜头安装 (打开新窗口)
- 16 毫米 M12(S 安装)镜头(带红外截止滤光片)
焦距会影响最大可测量速度。
最大速度 = +/- 4 像素/(1 秒/内部延迟)*地面距离/焦距(像素
内部更新率为 400 Hz。
像素大小为 24 微米,因此 16 毫米镜头的焦距为 0.016 米/每个像素 24 微米 = 666.666 像素
不同焦距镜头和地面距离的最大速度:
地面距离 | 1m | 3m | 10m |
---|---|---|---|
16 毫米镜头 | 2.4 米/秒 | 7.2 米/秒 | 24 米/秒 |
8 毫米镜头 | 4.8 米/秒 | 14.4 米/秒 | 48 米/秒 |
6 毫米镜头 | 6.4 米/秒 | 19.2 米/秒 | 64 米/秒 |
4 毫米镜头 | 9.6 米/秒 | 28.8 米/秒 | 96 米/秒 |
max_vel = 4/(1/400)*地面距离/(焦距/0.000024)
# 配置:图像质量和输出
PX4FLOW 并非作为照相机设计,而是在片上完成所有处理过程。您可以配置图像质量和输出(图像输出仅用于镜头对焦)。
- 下载 QGroundControl (打开新窗口)
- 拔下流量传感器插头
- 在 QGroundControl点击 配置 > 固件更新.点击绿色大图 扫描 按钮。
- 连接流量传感器。检测到流量传感器后点击升级(将默认值设为 "稳定")。
- 最大化 QGroundControl 窗口。点击 工具小工具> 视频下行链路
- 欣赏实时画面和 拧松锁定螺钉,对准 3 米远的物体转动镜头,对准相机对焦.
- 如果您想获得更高的分辨率来对传感器进行对焦,请转到 配置> 高级配置 并设置 仅视频 参数为 1。
# 一般故障排除
如果流量传感器已堵塞,请拔下插头
开始 QGroundControl选择 PX4 启动模式,转至 配置 > 固件升级.
- 点击 SCAN(中间的绿色按钮)
- 现在连接流量传感器
- 闪存稳定固件
点击 高级配置 在左侧菜单中查看参数
用 QGroundControl (工具小工具> 视频下行链路)
- 检查数据流上是否有条纹。如果出现条纹,请设置
IMAGE_TEST_PAT
图像应与上述示例相似。如果图像中有条纹,但启用该模式时没有条纹,请在两种模式下都右键单击图像一次,然后保存并将每种模式的图像发送给制造商的支持团队。 - 检查图像是否清晰(这是一个远摄/变焦镜头,因此可见区域会很小)
- 检查数据流上是否有条纹。如果出现条纹,请设置
设置
仅视频
参数为 1,以获得更高分辨率的图像。检查工作距离(典型飞行高度)上的图像是否清晰
TIP
寻求帮助 如果图像变形,出现明显的暗线(如下图):
# PX4FLOW 开发人员指南
# 硬件设置
- PX4FLOW 板 v1.3
- HRLV-MaxSonar-EZ (MB1043)
- 16 毫米镜头
- 微型 USB 电缆
# 软件/构建源
- 配备 QGroundControl 安装
- PX4FLOW 固件(固件源代码在 Github 上: PX4/Flow (打开新窗口))
备注
PX4 驱动程序 代码可在此处找到: PX4/PX4-Autopilot/src/drivers/px4flow (打开新窗口)
# 建设
安装 PX4 工具链.然后使用 https://github.com/PX4/Flow 克隆源代码。 Git.
CD 流动
生产 一应俱全
生产 上传-usb
然后连接流量传感器。上传成功后,应该会显示这些步骤:
找到电路板 6,0 引导程序 修订 3 on /dev/ttyACM1 erase...程序..核实...完成,重启。
# 故障排除
如果没有看到上述步骤,应通过以下方式删除调制解调器管理器:
苏都 apt-get 删除 modemmanager
用户还需要在 plugdev 组中:
苏都 篡改 -a -G plugdev $USER
# 聚焦图像
将 PX4FLOW 连接到 QGroundControl:
- 通过 USB 将 PX4FLOW 传感器连接到电脑
- 打开 QGroundControl
- 切换到剧情视角:视角/情节
- 连接至 PX4FLOW 传感器:通信/添加链接
- 链接类型串行
- 协议MAVLink
- 串行端口:相应端口(如 /dev/ttyACM* 或 COMM*)
现在应该会出现一个新的无人驾驶系统,机载参数也已加载(如果没有,请单击 "获取")。
更改参数 仅视频
到 1,然后按 设置。
Widget 视频下行链路现在以全分辨率显示图像。将镜头对准 1.5 米处。固定镜头位置并切换 仅视频
模式关闭。
# 数据输出
PX4FLOW 模块输出 MAVLink (打开新窗口) USB 和串行端口上的数据包。使用方法 QGroundControl (打开新窗口) 从模块读取数据。此外,还提供用于读取传感器数据的 I2C 接口。第三方 图书馆 可用于在项目中连接和集成 PX4FLOW 数据。
- USART3:MAVLink,波特率为 115200、8N1: OPTICAL_FLOW (打开新窗口) 留言 光流辐射 (打开新窗口), 心跳 (打开新窗口) 信息
- USB:波特率无关(USB 忽略):
OPTICAL_FLOW
留言光流辐射
,心跳
信息,图像。 - I2C1:自上次 I2C 读出后可读出的最新流量值(i2c_frame)和累积流量值(i2c_integral_frame)。
# PX4FLOW 参数
下面列出了 PX4FLOW 固件中当前可用参数的简要说明。
警告
参数目前未写入 ROM(断电时重置)。要永久更改这些参数,请使用 PX4FLOW 开发人员指南 以上。相关参数如下 这里 (打开新窗口).
# BFLOW_F_THRD
该参数是一个特征阈值,用于限制计算底流的模式质量。数值较低时(如 10),几乎所有模式都会被采用;数值较高时(如 100),只有重要模式才会被采用。
# BFLOW_V_THRD
这是模式相关性阈值,用于过滤不良匹配。越低表示只接受强相关性。
# 其他
名称 | 默认值 | 访问 | 评论 |
---|---|---|---|
AEC | 1 | RW | 相机自动曝光控制。1:开启,0:关闭。 |
AGC | 1 | RW | 摄像机自动增益控制。1:开启,0:关闭。 |
BFLOW_F_THLD | 40 | RW | 该参数是一个特征阈值,用于限制计算底流的模式质量。数值较低时(如 10),几乎所有模式都会被采用;数值较高时(如 100),只有重要模式才会被采用。 |
BFLOW_V_THLD | 5000 | RW | 这是模式相关性阈值,用于过滤不良匹配。越低表示只接受强相关性。 |
BFLOW_HIST_FIL | 0 | RW | 流量直方图滤波器。1:开启,0:关闭。 |
BFLOW_GYRO_COM | 0 | RW | 陀螺补偿。1:开启,0:关闭。 |
BFLOW_LP_FIL | 0 | RW | 流量输出的低通滤波器。1: 开,0: 关。 |
BFLOW_W_NEW | 0.3 | RW | 流动低通滤波器增益 |
BFLOW_MAX_PIX | 8 | R | 删除(参数未使用)。 |
BFLOW_RATE | 10.0 | RW | 发布光流更新的速率 |
明亮 | 20 | RW | 摄像头提供的所需亮度 |
DEBUG | 1 | RW | 调试信息。1:打开,0:关闭 |
EXPOSURE_MAX | 500 | RW | 最大曝光时间(微秒) |
最大增益 | 16 | RW | 最大增益(单位?) |
GYRO_SENS_DPS | 250 | RW | 陀螺仪灵敏度:250、500、2000(dps) |
GYRO_COMP_THR | 0.01 | RW | 陀螺补偿阈值 (dps):陀螺仪数据低于该阈值时不进行补偿,以防止漂移 |
HDR | 1 | RW | 摄像机高动态范围。1: 开,0: 关 |
图像高度 | 64 | R | 图像高度(像素) |
图像宽度 | 64 | R | 图像宽度(像素) |
IMAGE_L_LIGHT | 0 | RW | 删除(参数未使用)。 |
IMAGE_NOISE_C | 1 | RW | 图像传感器噪音校正,1: 开,0: 关 |
IMAGE_TEST_PAT | 0 | RW | 灰度测试模式。1:开启,0:关闭 |
镜头焦距 | 16.0 | RW | 镜头焦距(毫米) |
定位(POSITION) | 0 | RW | 0:仅使用位置 0(底部:0,前部:1,顶部:2,后部:3,右侧:4,左侧:5) |
SHTR_W_1 | 443 | RW | 相机快门 W_1 ? |
SHTR_W_2 | 473 | RW | 相机快门 W_2 ? |
SHTR_W_TOT | 480 | RW | 相机快门总数? |
SONAR_FILTERED | 0 | RW | 声纳输出卡尔曼滤波器。1: 开,0: 关。 |
SONAR_KAL_L1 | 0.8461 | RW | 声纳卡尔曼增益 L1(用于位置) |
SONAR_KAL_L2 | 6.2034 | RW | 声纳卡尔曼增益 L2(用于速度) |
SYS_ID | 81 | RW | MAVLink (打开新窗口) 系统 ID |
SYS_COMP_ID | 50 | RW | MAVLink (打开新窗口) 组件 ID |
SYS_SENSOR_ID | 77 | RW | MAVLink (打开新窗口) 传感器 ID |
SYS_TYPE | 0 | RW | MAVLink (打开新窗口) 系统类型(0 表示通用) |
SYS_AP_TYPE | 0 | RW | MAVLink (打开新窗口) 自动驾驶仪类型(0 表示通用类型) |
SYS_SW_VER | 13XX | R | 软件版本 |
SYS_SEND_STATE | 1 | RW | 发送 MAVLink (打开新窗口) 心跳。1:开启,0:关闭。 |
SYS_SEND_LPOS | 1 | RW | 发送 MAVLink (打开新窗口) 本地位置估计。1: 开,0: 关。 |
USART_2_BAUD | 115200 | R | 波特率 USART 2 |
USART_3_BAUD | 115200 | R | 波特率 USART 3(数据输出) |
USB_SEND_DEBUG | 1 | RW | 通过 USB 发送调试信息。1:开启,0:关闭。 |
USB_SEND_FLOW | 1 | RW | 通过 USB 发送流量。1: 开。0:关。 |
USB_SEND_FWD | 0 | RW | 通过 USB 发送转发流量。1:开启,0:关闭。 |
USB_SEND_GYRO | 1 | RW | 通过 USB 发送陀螺仪数据。1:开启,0:关闭。 |
USB_SEND_VIDEO | 1 | RW | 通过 USB 发送视频。1:开启,0:关闭。 |
仅视频 | 0 | RW | 高分辨率视频模式。1:开启,0:关闭 |
视频速率 | 50 | RW | 视频传输图像之间的间隔时间(毫秒) |
# 模式
# 仅视频模式
设置 仅视频
调至 1 表示高分辨率模式。在该模式下,摄像机图像以更高分辨率传输,以简化镜头对焦过程。该模式下不计算流量值。
# 测试模式
如果参数 IMAGE_TEST_PAT
设为 1 时,传感器会在信号链中插入垂直灰度测试图案。
- 测试模式 64x64(仅视频模式关闭)
- 测试模式 376x240(仅视频模式已打开)