在ArduPilot旋翼机上安装PX4Flow光流传感器

2023-05-16

在ArduPilot旋翼机上安装PX4Flow光流传感器

知识共享许可协议本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。

预先要求

在安装和调试光流传感器之前,请先保证:

  1. 旋翼机已经安装、调试完毕,至少可以在Stabilize(自稳)和AltHold(定高)模式下稳定飞行。

  2. 飞控的固件为Copter-3.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简介

PX4Flow光流传感器是一款高分辨率的图像传感器,内置3轴陀螺仪,通过分析无人机正下方地面上的可见信息,确定无人机的地速、实现定点悬停。PX4Flow的正常工作需要声呐或雷达的配合,并且可以在GPS信号不良的时候起到替代GPS的作用。

注意PX4Flow自带的Maxbotix1403超声波传感器是不能直接使用的!建议购买不带超声波传感器版本的PX4Flow,同时另购一个超声波传感器。

安装PX4Flow

刷写PX4Flow固件

通常,芯片在出货前都已经刷写了固件。一般情况下,你可以跳过这一步;当然,也可以重新刷写固件以防万一。

  1. 下载PX4Flow固件(源码见此)

  2. 使用micro USB线,从电脑连接到PX4Flow的USB口。打开MissionPlanner,应该可以通过COM口连接到PX4Flow。如果无法正常连接,可能是需要安装PX4Flow的驱动程序。

  3. 选择最上方的“初始设置/INITIAL SETUP”选项卡,选择“安装固件/Install Firmware”,右下角“加载自定义固件/Load custom firmware”,选择步骤1中下载的px4flow-klt-06dec2014.px4文件。之后根据提示进行操作,可能需要你拔下再插上USB线。

    Load PX4Flow Firmware

镜头对焦

  1. 使用USB线,连接电脑和PX4Flow

  2. 在MissionPlanner右上角选择合适的COM口,连接到PX4Flow

  3. 在选项卡中打开”初始设置/INITIAL SETUP“->”可选硬件/Optional Hardware“->”PX4Flow光流/PX4Flow

    Focusing the lens

  4. 将传感器对准一定距离的物体(官方建议3m以上;但如果要在室内悬停的话,我个人认为1.5m更好),调整镜头焦距,使图像最清晰。

  5. 国产的PX4Flow的镜头没有固定,容易松动,建议对焦完成后用胶布缠一圈固定。

连线至Pixhawk

将PX4Flow正面的4Pin接口(I2C接口),连接至飞控的I2C接口。飞控通常会连接多个I2C设备,因此建议使用I2C分线器(飞控I2C接口连到I2C分线器,PX4Flow及其他设备连接至I2C分线器)。

USB口只作连接电脑、烧写固件之用,不用作与飞控通信的接口。

组装PX4Flow

将镜头指向正下方,micro USB口指向飞机的正前方。此时,PX4Flow板上的X轴指向正前方,Y轴指向右。

通过修改FLOW_ORIENT_YAW参数,可以支持其他的安装朝向。

启用PX4Flow

使用MissionPlanner连接Pixhawk,在”初始设置/INITIAL SETUP“->”可选硬件/Optional Hardware“->”光流/Optical Flow“中,勾选启用/Enable

Enable PX4Flow

或者,也可在参数中设置FLOW_ENABLE为1。

设置完成后,重启飞控。

安装声呐/激光雷达

本文主要介绍PX4Flow光流传感器的安装和调试。虽然只有拥有了测距雷达,光流传感器才能正常工作,但是因为测距雷达的种类和型号过多,难以一概而论。在此只简单介绍几种主流解决方案,具体配置和技术参数请查找相关产品的技术支持。

Lidar Lite

Lidar Lite是一款低价的激光雷达,标称有效距离40m,可以使用I2C或PWM模式连接至飞控。Lidar Lite作为激光雷达,有效距离和精度显著高于基于超声波原理的声呐;同时与其他激光雷达相比,价格相对较低。比较适合科研、商用以及预算充足的玩家。

Maxbotix1242

Maxbotix1242是一款ArduPilot官方固件支持的超声波传感器,标称有效距离7m,可使用I2C接线,体积小巧,设置简单

PX4Flow自带的Maxbotix1403(模拟输出)

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的稳定性存疑,且模拟信号的噪声干扰较大,不是非常建议采用此方法。

PreArm:Check RangeFinder的解决方法

这一信息提示RangeFinder(声呐或雷达)读数不正常,无法正常解锁。出现该信息,是因为在飞控程序中,只有读到了一个0.5m至2m的距离后,才会解锁飞控。如果读到了2m以上的距离,则需要重启飞控。

你可以每次将无人机提起至0.5m以上,完成这项检查;或者你可以在Arming Check的设置中,禁用Parameters选项,即可跳过这项检查。

测试和校准

测试光流传感器

通过MissionPlanner链接到Pixhawk,选择首页左下方的“状态/Status”栏。如果设置正确,可以观察到非0的opt_m_x,opt_m_y和opt_qua的值。

Testing PX4Flow

校准光流传感器

  1. 使用地面站连接飞控,启用在锁定状态下的飞行日志(Copter-3.3设置LOG_BITMASK为131071,Copter-3.4及以上设置LOG_DISARMED为1)

  2. 找一个有明显纹路的地面,确保光照充足

  3. 卸下螺旋桨

  4. 为无人机上电,用手将无人机提起至与视线齐平

  5. 在横滚(Roll)方向上,±15度范围内转动无人机5至10次,每次大约1秒;之后,在俯仰(Pitch)方向上重复此动作。

  6. 断电,下载此次飞行日志。绘制出OF.flowX OF.bodyXIMU.GyrX的数据,结果应该如下

    Flow_x calibration

    如果OF.flowXOF.bodyX大小不一致,则需要修改FLOW_FXSCALER参数使其一致

  7. 与步骤6类似,绘制OF.flowY OF.bodyYIMU.GyrY的数据。如果OF.flowYOF.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),盘旋片刻即可降落。

分析日志

  1. NKF5.meaRng应该和无人机的离地高度相同
  2. OF.flowXOF.flowY应该不同
  3. OF.bodyXOF.bodyY应该分别和IMU.GyrXIMU.GyrY一致

如果以上都三点符合,则可以进行第二次试飞,实际测试光流性能了。

第二次试飞

试飞目的

测试光流定点和声呐定高是否正常工作

参数设定

# 卡曼滤波器使用光流数据
EK2_GPS_TYPE = 3

# 使用声呐作为主要高度数据来源
Ek2_ALT_SOURCE = 1

飞行前检查

  1. 确保:
    • 可以用遥控器切换到留待(Loiter)模式
    • 自稳(Stabilize)定高(AltHold)中至少有一个模式可用
    • 留待(Loiter)模式下可以方便地切入降落(Land)模式。
  2. 确认在无人机周围,有至少15m的空地。如果光流数据异常,无人机可能会直接以最大速度向一个方向偏移。

试飞步骤

留待(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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在ArduPilot旋翼机上安装PX4Flow光流传感器 的相关文章

  • 解读gazebo_ros_control gazebo_ros

    本篇的目的是想解读gazebo ros control 以及 gazebo ros 因为gazebo本身是独立于ros的 通过教程Intermediate Control plugin 以及教程 Category Write a plugi
  • vtaskstartscheduler(); //开启任务调度语句不执行

    项目场景 xff1a FreeRTOS实时嵌入式操作系统开发 基于stm32 第一章移植代码 问题描述 xff1a 任务调度器执行到vtaskstartscheduler 开启任务调度语句不执行 span class token keywo
  • python3中定义类变量,并使用类函数修改类变量的值

    定义类变量的方式有两种 1 在 init 中定义self elements 其中self elements是类变量名 a是传入Difference类的参数名 xff0c 这里的 init 作用是定义了类变量名 xff0c 将外部参数a传给类
  • printf函数的内涵以及造成的严重内存问题

    问题的引出 xff1a 在某型号的核心网络交换机设备中 xff0c 为调试方便 xff0c 实现了一个把内存内容从终端打印的功能 xff0c 也就是dump memory xff0c 屏幕的左边显示十六进制 xff0c 右边以ASCII形式
  • 关于docker那点事儿——Dockerfile编写

    Dockerfile编写 前言一 Dockerfile创建镜像二 Dockerfile常用指令三 示例1 Dockerfile构建nginx镜像2 Dockerfile构建微服务 四 CMD与ENTRYPOINT比较 前言 Dockerfi
  • SylixOS信号量(二进制信号量、 计数型信号量、 互斥信号量(简称互斥量)、 读写信号量)

    目录 二进制信号量 互斥信号量 计数器信号量 读写信号量 SylixOS 信号量 多个线程在读写某个共享数据 xff08 全局变量等 xff09 时必须通过某种方法实现共享数据的互斥访问或者同步访问 xff08 例如线程 B 等待线程 A
  • 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转 xff0c 是指在使用信号量时 xff0c 可能会出现的这样一种不合理的现象 xff0c 即 xff1a 高优先级任务被低优先级任务阻塞 xff0c 导致高优先级任务迟迟得不到调度 但其他中等优先级的任务却能抢
  • STM32CubeMX在F103上的ADC注入通道配置异常问题

    前言 最近业余时间在搞无刷电机FOC的控制 xff0c 其中有一部分是关于流过电机三相绕组电流采集的 xff0c 需要用到STM32内置的ADC xff0c 核心是需要使用注入通道以确保ADC数据采集的实时性 xff0c 但是我在STM32
  • C++ static静态成员变量用法

    C 43 43 static静态成员变量用法 参考网址 xff1a 1 http c biancheng net cpp biancheng view 209 html 2 https www runoob com cplusplus cp
  • 解决AndroidStudio 控制台编译输出中文乱码,黑方块+问号之类的

    100 有效 解决AndroidStudio 控制台编译输出中文乱码 xff08 黑色方框问号 xff09 xff0c 亲测解决 xff01 xff08 转载 xff09 Pdx 666的博客 CSDN博客 背景在AndroidStudio
  • sphinx安装及简单使用

    sphinx安装及简单使用 如果你要编写技术文档 可以用 reStructuredText 或 Markdown 格式编辑文件 xff0c 然后使用 Sphinx 工具转换成 html PDF ePub等格式 xff0c 或者托管到 git
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • python爬虫 记录一次爬取淘宝的过程

    淘宝可以说是一个检验爬虫技术是否过关的最强关卡了 xff0c 下面来打破它吧 淘宝的所有操作差不多都是在登录的状态下进行的 xff0c 这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了 方式一 xff1a xff08 seleni
  • 问题tensorflow.python.framework.errors_impl.ResourceExhaustedError:OOM

    tensorflow python framework errors impl ResourceExhaustedError 2 root error s found 0 Resource exhausted OOM when alloca
  • ROS安装超详细保姆级教程

    1 版本选择 ROS与Ubuntu版本是有着对应关系的 xff0c 其中Ubuntu1604 43 ROS Kinetic xff1b Ubuntu1804 43 ROS Melodic xff1b Ubuntu2004 43 ROS No
  • 2021年9月22号,实战烧写树莓派sd卡的系统

    1 下载格式化u盘的软件 xff0c 软件地址 xff0c 阿里云盘地址 xff1a https www aliyundrive com s ux2re9FFxd2 2 将有sd卡的读写盘插入电脑接口 3 打开软件 xff0c 点击格式化即
  • 工作流与BPM的区别

    一 工作流是什么 xff1f 根据国际工作流管理联盟 Workflow Management Coalition xff0c WFMC 的定义 xff0c 工作流就是 一类能够完全或者部分自动执行的经营过程 xff0c 它根据一系列过程规则
  • 被遗忘的软件产品形态

    从2010年以后 xff0c 很多公司开发的软件产品 xff0c 很少有客户端了 xff0c web2 0之后 xff0c 主流的业务系统基本上都是基于Web去构建业务系统 这几年见到的业务应用系统都是基于Web的构建的 而在To C市场
  • C端产品工作流程

    文章目录 发现需求需求分析用户需求定义产品需求定义构建产品方案收集需求确定产品功能 产品需求分类产品目标分解产品版本规划需求评审产品功能设计需求评审确定执行计划测试验收发布上线 发现需求 通过自身的体验发现需求 通过间接的体验发现需求 1
  • STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

    通过STM32cubeMX将STM32F767 43 LAN8720 43 LwIP 43 FreeRTOS的以太网实现 本文使用了正点原子的阿波罗开发板 xff0c 接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网

随机推荐

  • 数据产品经理有哪些

    文章目录 数据分析产品经理数据挖掘产品经理策略产品经理数据工程类产品 首先希望大家能重新认识经理这份工作 xff1a 大数据产品经理并不一定要数学能力强或者编程能力强 xff0c 只要你有用数据思考的方式 xff0c 有相信数据的信念 xf
  • 产品经理必备的20个常用工具

    原型设计工具 xff1a Axure 墨刀 思维导图工具 xff1a Xmind MindManager 流程图绘制工具 xff1a Viso ProcessOn 数据处理与分析工具 xff1a Excel Tableau 问卷调研工具 x
  • Hibernate根据实体类自动生成表的方法

    文章目录 第一种方法第二种方法参考 第一种方法 这种方法需要配置 hibernate cfg xml 的属性 hibernate hbm2ddl auto xff0c 该属性值的具体说明如下 xff1a 值说明update实体对应的表如果不
  • 微信账户如何解除对第三方应用的授权

    参考文章 xff1a https baijiahao baidu com s id 61 1754354599985802723 amp wfr 61 spider amp for 61 pc amp searchword 61 E5 B0
  • 进程间通信

    现在的嵌入式系统往往有并发的特征 xff0c 就像多任务操作系统的多进程一样 xff0c 其内核会提供几种机制处理任务间通信 xff0c 本文对四种常见通信模式进行了分析 xff0c 并对其各自的优劣作较细致的比较 目前 xff0c 越来越
  • HTTP请求返回状态码的不同含义

    用户通过 HTTP 访问一台正在运行Internet信息服务的服务器上的内容时 xff0c 会返回一个表示该请求的状态的数字代码 状态代码可以指明具体请求是否已成功 xff0c 还可以揭示请求失败的确切原因 1 信息提示 这些状态代码表示临
  • 异常检测及其分布集成

    异常检测算法种类繁多 xff0c 包括聚类 xff0c 树 xff0c 统计分布 xff0c 机器学习 xff0c 深度学习等多种形式 xff0c 下面对一些常见问题进行了自己的总结 xff1a 1 如何选型 xff1f 主要看算法原理和数
  • 关于FreeRTOS 任务运行中卡死在临界区vPortExitCritical()

    FreeRTOS创建任务正常运行 xff0c 偶尔出现任务卡死状态 xff0c 通过在线调试 xff0c 程序卡在vPortExitCritical 函数中 xff0c 在IAR Call Stack中观察到各任务都可能回调该接口 span
  • Ardupilot添加自定义日志(AP_LOG)

    1 在libraries AP Logger LogStructure h中添加自定义的结构体 span class token keyword struct span span class token class name PACKED
  • Ardupilot 编译Bootloader

    1 清理之前的编译中间文件 xff0c 一定要清理一下 xff0c 能避免很多奇怪的问题 span class token punctuation span span class token operator span waf distcl
  • 基于STM32CUBE的LWIP+FREERTOS+Socket构成的TCP服务器

    本实验基于STM32F767制作 一 实验目的 本实验主要目的是通过Socket网络编程方法完成通过以太网控制两个LED的亮灭的 xff0c 同理可用到继电器上控制其它高电压设备 二 实验步骤 1 首先先生成一个带有LWIP和FreeRTO
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • opencv4以上版本报错:CV_LOAD_IMAGE_COLOR和CV_BGR2HSV和CV_CAP_PROP_FRAME_WIDTH

    报错关于 xff1a CV LOAD IMAGE COLOR xff0c 加入头文件 span class token preprocessor property include span span class token string 3
  • 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?

    统计的结果请见第一篇文章 代码已经开源至GitHub 本文下面所有的爬虫项目都有详细的配套教程以及源码 xff0c 都已经打包好上传到百度云了 xff0c 链接在文章结尾处 xff01 扫码此处领取大家自行获取即可 讲真 这个应该是我做过的
  • 如何从源码编译SITL

    从源码编译SITL Windows 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 SITL简介和适用情况 SITL 61 Software in the loop xff0c 是著名无人机开源社区ArduPil
  • 使用从源码编译的SITL测试dronekit代码

    使用从源码编译的SITL测试DroneKit代码 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 DroneKit和SITL简述 DroneKit是一款Python语言的无人机开发库 xff0c 可以对使用MAV
  • Keil一进入调试器就退出的解决方法

    Keil一进入调试器就退出的解决方法 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 问题描述 在使用Keil与TI公司的Tiva TM4C123开发板进行开发时 xff0c 偶尔会出现一进入在线调试器 xff0
  • 在ArduPilot旋翼机上安装PX4Flow光流传感器

    在ArduPilot旋翼机上安装PX4Flow光流传感器 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 预先要求 在安装和调试光流传感器之前 xff0c 请先保证 xff1a 旋翼机已经安装 调试完毕 xff0