本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。
在安装和调试光流传感器之前,请先保证:
旋翼机已经安装、调试完毕,至少可以在Stabilize(自稳)和AltHold(定高)模式下稳定飞行。
飞控的固件为Copter-3.3或之后的版本。推荐使用最新的稳定版本。
手上有Maxbotix1403(PX4Flow自带)以外的一款超声波或激光雷达传感器(推荐),或飞控上的6.6V ADC没有被占用(使用PX4Flow自带的MB1403,不推荐)。ArduPilot开发者似乎是在测试中发现MB1403的读数不够稳定,没有支持通过I2C连接至MB1403。因此,只能使用其它型号的传感器,或将MB1403的模拟输出口引出至飞控ADC。
所有支持的传感器可见http://ardupilot.org/copter/docs/common-rangefinder-landingpage.html#common-rangefinder-landingpage
PX4Flow光流传感器是一款高分辨率的图像传感器,内置3轴陀螺仪,通过分析无人机正下方地面上的可见信息,确定无人机的地速、实现定点悬停。PX4Flow的正常工作需要声呐或雷达的配合,并且可以在GPS信号不良的时候起到替代GPS的作用。
注意PX4Flow自带的Maxbotix1403超声波传感器是不能直接使用的!建议购买不带超声波传感器版本的PX4Flow,同时另购一个超声波传感器。
通常,芯片在出货前都已经刷写了固件。一般情况下,你可以跳过这一步;当然,也可以重新刷写固件以防万一。
下载PX4Flow固件(源码见此)
使用micro USB线,从电脑连接到PX4Flow的USB口。打开MissionPlanner,应该可以通过COM口连接到PX4Flow。如果无法正常连接,可能是需要安装PX4Flow的驱动程序。
选择最上方的“初始设置/INITIAL SETUP”选项卡,选择“安装固件/Install Firmware”,右下角“加载自定义固件/Load custom firmware”,选择步骤1中下载的px4flow-klt-06dec2014.px4文件。之后根据提示进行操作,可能需要你拔下再插上USB线。
使用USB线,连接电脑和PX4Flow
在MissionPlanner右上角选择合适的COM口,连接到PX4Flow
在选项卡中打开”初始设置/INITIAL SETUP“->”可选硬件/Optional Hardware“->”PX4Flow光流/PX4Flow”
将传感器对准一定距离的物体(官方建议3m以上;但如果要在室内悬停的话,我个人认为1.5m更好),调整镜头焦距,使图像最清晰。
国产的PX4Flow的镜头没有固定,容易松动,建议对焦完成后用胶布缠一圈固定。
将PX4Flow正面的4Pin接口(I2C接口),连接至飞控的I2C接口。飞控通常会连接多个I2C设备,因此建议使用I2C分线器(飞控I2C接口连到I2C分线器,PX4Flow及其他设备连接至I2C分线器)。
USB口只作连接电脑、烧写固件之用,不用作与飞控通信的接口。
将镜头指向正下方,micro USB口指向飞机的正前方。此时,PX4Flow板上的X轴指向正前方,Y轴指向右。
通过修改FLOW_ORIENT_YAW参数,可以支持其他的安装朝向。
使用MissionPlanner连接Pixhawk,在”初始设置/INITIAL SETUP“->”可选硬件/Optional Hardware“->”光流/Optical Flow“中,勾选启用/Enable
或者,也可在参数中设置FLOW_ENABLE为1。
设置完成后,重启飞控。
本文主要介绍PX4Flow光流传感器的安装和调试。虽然只有拥有了测距雷达,光流传感器才能正常工作,但是因为测距雷达的种类和型号过多,难以一概而论。在此只简单介绍几种主流解决方案,具体配置和技术参数请查找相关产品的技术支持。
Lidar Lite是一款低价的激光雷达,标称有效距离40m,可以使用I2C或PWM模式连接至飞控。Lidar Lite作为激光雷达,有效距离和精度显著高于基于超声波原理的声呐;同时与其他激光雷达相比,价格相对较低。比较适合科研、商用以及预算充足的玩家。
Maxbotix1242是一款ArduPilot官方固件支持的超声波传感器,标称有效距离7m,可使用I2C接线,体积小巧,设置简单
Maxbotix1403是部分PX4Flow出厂自带的超声波传感器。据说开发团队认为该传感器的读数稳定性存在问题,于是没有在固件中提供对这个传感器的支持。不过,你依然可以自行将该传感器的模拟输出引脚(Pin 3)和地(Pin 7)引出,接入Pixhawk飞控的6.6V ADC接口(ADC接口从左到右分别为VCC、模拟输入和地;不要接入3.3V ADC,因为输出电压最高可达5V)。将Maxbotix1403视为模拟声呐,即可使用它采集到的数据。
以下参数设置仅供参考:
# 使用模拟声呐
RNGFND_TYPE = 1
# Pin 15代表6.6V ADC
RNGFND_PIN = 15
# 声呐输出为线性
RNGFND_FUNCTION = 0
# 声呐输出和参考电压(电源电压)成比例
RNGFND_RMETRIC = 1
# 没有Stop Pin(声呐会一直工作)
RNGFND_STOP_PIN = -1
# 设置最大有效距离(厘米)
RNGFND_MAX_CM = 500
# 若距离小于30cm,读数就被认为不可靠
RNGFND_MIN_CM = 30
# 停在地面时,声呐与地面的距离(厘米)
RNGFND_GNDCLEAR = 2
# 理论上,输入电压为5V,输出电压的范围为0.293V到4.885V (300mm to 5000mm)
RNGFND_OFFSET = 0.293
# 根据datasheet,距离5m,输出为4.885V
# 5m / 4.885v
RNGFND_SCALING = 1.02354
由于对Maxbotix1403的稳定性存疑,且模拟信号的噪声干扰较大,不是非常建议采用此方法。
这一信息提示RangeFinder(声呐或雷达)读数不正常,无法正常解锁。出现该信息,是因为在飞控程序中,只有读到了一个0.5m至2m的距离后,才会解锁飞控。如果读到了2m以上的距离,则需要重启飞控。
你可以每次将无人机提起至0.5m以上,完成这项检查;或者你可以在Arming Check的设置中,禁用Parameters选项,即可跳过这项检查。
通过MissionPlanner链接到Pixhawk,选择首页左下方的“状态/Status”栏。如果设置正确,可以观察到非0的opt_m_x,opt_m_y和opt_qua的值。
使用地面站连接飞控,启用在锁定状态下的飞行日志(Copter-3.3设置LOG_BITMASK为131071,Copter-3.4及以上设置LOG_DISARMED为1)
找一个有明显纹路的地面,确保光照充足
卸下螺旋桨
为无人机上电,用手将无人机提起至与视线齐平
在横滚(Roll)方向上,±15度范围内转动无人机5至10次,每次大约1秒;之后,在俯仰(Pitch)方向上重复此动作。
断电,下载此次飞行日志。绘制出OF.flowX
OF.bodyX
和IMU.GyrX
的数据,结果应该如下
如果OF.flowX
与OF.bodyX
大小不一致,则需要修改FLOW_FXSCALER参数使其一致
与步骤6类似,绘制OF.flowY
OF.bodyY
和IMU.GyrY
的数据。如果OF.flowY
和OF.bodyY
大小不一致,则需要修改FLOW_FYSCALER
在上述飞行日志中,绘制出NKF5.meaRng
(单位为米)。如果始终有非零读数,且读数值的变动在10cm以内,说明声呐读数良好(注意在转动无人机的过程中,声呐读数会有所改变)
如果一切正常,可以将LOG_DISARMED重新设置为0,避免产生体积过大的日志文件占用空间
试飞目的:
测试光流传感器和声呐的读数
参数设定:
# 卡曼滤波器采用GPS数据
EK2_GPS_TYPE = 0
# 使用气压计作为滤波器的主要高度数据源
EK2_ALT_SOURCE = 0
试飞步骤:
以自稳(Stabilize)或定高(AltHold)模式起飞,确认GPS信号良好后可以切换至定点(PosHold)模式。维持无人机的高度在0.5m至3m(建议达到3m),盘旋片刻即可降落。
分析日志:
NKF5.meaRng
应该和无人机的离地高度相同OF.flowX
和OF.flowY
应该不同OF.bodyX
、OF.bodyY
应该分别和IMU.GyrX
和IMU.GyrY
一致如果以上都三点符合,则可以进行第二次试飞,实际测试光流性能了。
试飞目的:
测试光流定点和声呐定高是否正常工作
参数设定:
# 卡曼滤波器使用光流数据
EK2_GPS_TYPE = 3
# 使用声呐作为主要高度数据来源
Ek2_ALT_SOURCE = 1
飞行前检查:
试飞步骤:
以留待(Loiter)模式解锁、起飞,至高度约1m。
如果无人机迅速向某个方向加速,立刻将模式切换成降落(Land)。你可能需要将飞行日志上传到ArduPilot论坛(英文),请大家分析其中可能的原因。
如果无人机实现了稳定的定高和定点,那说明光流和声呐正常工作了。你可以轻轻拨动摇杆,尝试在带光流的Loiter模式下飞行。
光流传感器在离地面过近或过远时,都会因为成像模糊,导致数据变差。我发现的一个常见现象是:在无人机贴近地面(30cm以内),以及无人机远离地面(跟焦距有关,大约3-5m以上)时,极易触发错误“Err: EKF_CHECK-2”。其原因为光流成像质量不佳,导致卡曼滤波器无法正常工作。为了确保安全,飞控会强制进入Land模式降落。
因此,充分分析无人机执行任务时所处的高度。例如,在单层住宅高度(2.8m)的室内飞行,个人认为,在大约1.5m处对焦就比较合适(没有经过充分试验,欢迎讨论)。
日光灯等光源有频闪现象,它们实际上以一定的频率不停地在亮、暗之间切换。这一频率肉眼无法分辨;但是如果频闪的频率较低,如使用电感镇流器的老式日光灯的闪烁频率为100Hz,则很有可能会干扰光流传感器。打开手机的摄像头,对准光源,如果能够观察到明显的亮暗变化,说明此光源很有可能会影响到光流传感器的正常工作。
因此,还是推荐使用自然光照、基本无频闪的白炽灯、以及使用电子镇流器的新式日光灯和LED灯(闪烁频率在10KHz量级)。
掉线的可能原因是供电不稳,I2C接口连接的设备过多,电流达到了上限。因为飞控程序的原因,光流掉线时不会有任何提示,只能根据飞行日志中有没有OF
数据段、检查FLOW_ENABLE参数来进行判断。
如果光流传感器掉线现象反复出现,可以考虑将光流传感器单独供电。
20170909 1.0 initial commit