这里主要针对模块使用过程中遇到的问题做一些整理和总结。
详见: MATEKSYS Optical Flow & LIDAR 3901-L0X
Beginners Guide To Optical Flow Sensor with LIDAR on Drone MATEKSYS 3901-L0X Opt
其主要硬件构成:
- PMW3901 Optical Flow Sensor --> SPI
- VL53L0X Lidar Sensor --> I2C
- STM32L051/STM32F051 --> TTL(UART)
PMW3901
Field of view: 42 degree
Working range: > 80 mm
Minimum Illumination: >60Lux
VL53L0X
Field of view: 27 degree
Working range: 20 mm ~ 2000 mm
模块参数
Input voltage: 4.5~5.5V
Power Consumption: 40mA
Size: 3612mm (F051 version) 2g
Size: 3613mm (L051 version) 2g
根据官网描述和规格分析,我们大致可以知道该模块的使用步骤如下:
传感模块:Tx/Rx/GND/VCC与飞控对应引脚相接
鉴于以下细节规格:
光流计 > 80 mm
激光测距 20 mm ~ 2000 mm
气压计 10cm以内存在气垫效应
整体上要做到定点定高的悬停功能存在以下局限:
基于使用,以及传感应用逻辑,有以下问题:
+---------------------------+
| header (0xFE) |
+---------------------------+
|number of data bytes (0x04)|
+---------------------------+
| x-motion high byte |
+---------------------------+
| x-motion low byte |
+---------------------------+
| y-motion high byte |
+---------------------------+
| y-motion low byte |
+---------------------------+
| checksum |
+---------------------------+
| surface quality |
+---------------------------+
| footer (0xAA) |
+---------------------------+
+------------------------------+
| up header 1 (0xFE) |
+------------------------------+
| up header 2 (0x0A) |
+------------------------------+
| flow_x_integral low byte |
+------------------------------+
| flow_x_integral high byte |
+------------------------------+
| flow_y_integral low byte |
+------------------------------+
| flow_y_integral high byte |
+------------------------------+
|integration_timespan low byte |
+------------------------------+
|integration_timespan high byte|
+------------------------------+
| distance_z low byte |
+------------------------------+
| distance_z high byte |
+------------------------------+
| optical flow valid |
+------------------------------+
| distance credibility |
+------------------------------+
| XOR |
+------------------------------+
| footer (0x55) |
+------------------------------+
目前从协议格式及代码角度,CXOF & UPFLOW协议不兼容。
从兼容性角度看:
Ardupilot代码中,直接支持CXOF & CXOF协议。
iNav代码中,尚未支持UPFLOW协议
从光流和测距传感类型支持广度角度看:
鉴于上述情况,如果iNav希望使用MATEK 3901-L0X模块,就需要硬件上确认如何使能VL53L0X 芯片,并通过I2C将数据传输到飞控上。
注:VL53L0X 可能与STM32L051/STM32F051连接,至于STM32是否固件上操做I2C控制该芯片,完全取决于软硬件的使能方法。该信息从官网资料上看,并未给出。
该模块使用的参考视频详见:Beginners Guide To Optical Flow Sensor with LIDAR on Drone | MATEKSYS 3901-L0X Optical Flow & LIDAR
估计是指MATEKSYS 3901-L0X模块,尚没有支持外接声呐测距功能。
现实情况:
初步分析:
不知道是什么原因导致MATEK最后没有将该模块以完整功能投入市场。市场需求(购买力),数据融合效果,技术问题,还是其他问题。虽然硬件接口上都遗留了产品规划的一些构思,但是在实际开发和产品化阶段,停留在现在的情况。
之前主要是BF代码看的多点,而且拿到了一份upixels的光流激光二合一协议手册,总是纠结在CXOF和UPFLOW上。
上面的这个角度去看问题,确实会就在iNav在使用MATEK 模块会遇到一些实际问题。
最终,还是仔细看了MATEK官网给出的一个信息,支持MSPV2格式通信协议。
按照上述角度,可以非常清晰的看清传感数据逻辑流程:
PMW3901 Optical Flow Sensor --- SPI ---+
|
+---> STM32L051/STM32F051 --- TTL(UART/MSP Sensor Protocol) ---> Flight Control
|
VL53L0X Lidar Sensor --- I2C ---+
Matek Optical Flow and Lidar Sensor Journey. Part 1
Matek Optical Flow and Lidar Sensor Journey. Part 2
Matek Optical Flow and Lidar Sensor Journey. Part 3
目前的效果尚不理想主要存在以下几个问题:
1)【未解决】桨叶有缺损
2)【未解决】螺丝有缺失
3)【待改善】水平校准(iNav多次水平校准 + 遥控器微调,能暂时1~2秒内保持稳定悬停)
4)【待改善】地面花纹(漫反射)
5)【待改善】光照照度需要量化
6)【未解决】定制的posHold算法
iNav
【1】Multiwii Serial Protocol Version 2
【2】BetaFlight模块设计之三十二:MSP协议模块分析
【3】iNavFlight之MSP Sensor报文格式