[源码解读]position_estimator_inav_main解读(如何启动光流)

本文详细分析了光流传感器在无人机定点控制中的应用问题。针对无法切换至posctl飞行状态及光流数据融合等问题,作者从位置估计函数出发,逐步排查光流与雷达数据的有效性。最终发现lidar有效性为关键因素,并通过修改参数成功实现了飞行模式的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅读工具:source insight
技术交流:zinghd@163.com ,757012902@qq.com
源码版本:Firmware(原生固件)

如有需求可以索要word版

这篇博客彻底解决了我无法切换模式的问题,但是还存在几个问题

  1. 目前还是没有看到定点效果,有可能是磁场干扰(我实验室有几个磁悬浮装置。。。)

也有可能是需要启动LPE

  1. 没有发现光流与GPS数据融合,据说光流在此函数中是辅助GPS的,可有可无,但是我看程序的光流和GSP数据是独立提供的(希望大神指点

分析问题的思路(我一直认为思路很重要)

目的:我希望实现光流定点效果

问题:无法切换posctl飞行状态(可能是程序问题,也可能是光流数据问题)

思路:位置估计函数最终一组数据给位置控制,已知GPS可以实现定点,可以认为位置控制部分是对的,也就是说控制算法不用管只需要检查光流部分是否正确。 那么我只需要找到哪些数据可以由光流传感器提供,并检查其数值是否正确。
这里写图片描述
这是位置估计最后产生的值,我们倒过来往前找,can_estimate_xy
这里写图片描述
bool can_estimate_xy = (eph < max_eph_epv) || use_gps_xy || use_flow || use_vision_xy || use_mocap;可以看到can_estimate_xy是与use_flow光流有关的
接下来两个与GPS有关跳过,看x_est, y_est,z_set
这里写图片描述
Lidar与flow提供了accel_bias_corr[3]数组的3个数
这里写图片描述
accel_bias_corr[3]数组的3个数传递给了acc_bias[3];
5
acc_bias[3]最终传递给 acc[3];
6

7

8
这写着惯性预测滤波,第一次给定了x_set[2], y_set[2], z_set[2]数组的值,Z轴的值是lidar提供,光流只提供水平值
9
预测结束,马上就进行了第二次滤波,当输入是0时z_set[0],z_set[1]都被赋值,lidar提供这两个数据
10

11

12
当输入时1时,这个函数只给x_est[1], y_est[1]赋值,所以光流第2次滤波只改修改了这两个值。
综上所述,光流加上雷达提供了x_est[2], y_est[2], z_est[2],所有数据,但是为什么有这么多滤波,暂时不知道。
att.yaw,其实就是vehicle_attitude_s.yaw
13

14
通过订阅来的,那么是谁发布的呢?
Attitude_estimator_q_main.cpp (firmware\src\modules\attitude_estimator_q):
orb_publish_auto
(ORB_ID(vehicle_attitude), &_att_pub, &att, &att_inst,ORB_PRIO_HIGH);
姿态估计发布的(找topic的发布者好难,有谁有简单的方法教我一下吧)
dist_bottom_valid, lidar提供
15
eph(水平定位精度),epv(垂直定位精度)常数
16
到这所有数据就分析完了 总结一下,光流能提供所有水平有关的值,lidar提供垂直方向的值,为什么要分析lidar?
17
看见没 想用光流 第一个条件就是lidar是否有效,在位置估计里雷达就是距离传感器,对应的实际就是超声波传感器,(实测lidar的数据都是超声波提供的)
18
所以启用光流的核心问题就是如何启动lidar_valid
19
20
21
可以看出lidar_valid与3个数据有关params.enable_lidar_alt_est,
lidar.current_distance > lidar.min_distance,lidar.current_distance < lidar.max_distance
其实我们已知光流是有读数,那么后两个判读肯定是能成立的(当前高度大于30cm,小于5m)
主要就是params.enable_lidar_alt_est(为了保险我在程序里加上标志位进行了判读,确实就是第一个条件一直不成立)
22
找到这个赋值函数,注意这个函数是把h的值给P,(不是把p给h)!!!!!!
23
24
25里把这个0改成1就启动了
在函数里找到了,想到这种设置应该在地面站也有,于是去QGC找果然
26

27
在这里改应该也是一样的,亲测现在可以自由切换到Posctl(定点模式了)虽然还是不能实现定点功能,但是解决了第一个问题还是很开心。
http://blog.youkuaiyun.com/czyv587/article/details/51922787 结合使用
最新的源码 这些参数好像不见了(2017/1/6)

<think>好的,我现在需要帮助用户解决QGC地面站中飞行模式下选项空白的问题。首先,我得回忆一下自己之前处理类似问题的经验,或者查相关资料。可能的原因有哪些呢?通常,软件设置问题、配置文件损坏、驱动不兼容或者固件版本不匹配都可能导致这种情况。 用户提到的是飞行模式选项空白,也就是在下拉菜单中没有可选的模式。这可能是因为QGC未能正确识别飞行控制器支持的飞行模式,或者配置文件中相关数据丢失。我应该先建议用户检查固件版本是否匹配,因为固件和地面站版本不兼容是常见问题。比如,PX4或ArduPilot的最新固件可能需要对应版本的QGC才能正确显示选项。 接下来,用户可能需要检查参数设置。如果关键参数如COM_RCL_*缺失或配置错误,会导致飞行模式无法显示。这时候重新载入默认参数或者手动设置相关参数可能会有帮助。 另外,配置文件损坏也是一个可能性。建议用户重置设置或清除配置文件,让QGC重新生成默认配置。同时,确保没有第三方插件或脚本冲突,这些可能会干扰QGC的正常功能。 如果以上步骤无效,可能需要更新或回滚QGC版本,或者重新刷写飞控固件。最后,检查硬件连接,确保数据链路正常,没有通信问题导致参数无法正确加载。 在回答时,需要按照逻辑顺序分步骤说明,每个解决方案尽量简明,并提醒用户操作前备份数据。同时,生成的相关问题要围绕可能延伸的故障排除步骤,帮助用户进一步排查问题。</think>### QGC地面站飞行模式选项空白解决方案 当QGroundControl(QGC)地面站出现飞行模式选项空白时,可按以下步骤排查: 1. **检查固件兼容性** - 确认飞控固件(PX4/ArduPilot)与QGC版本匹配,较新的固件可能需要升级QGC至最新版[^1] - 示例:PX4 v1.14需要QGC v4.2以上版本支持 - 操作路径:QGC设置 > 关于 > 检查更新 2. **验证参数配置** - 在参数设置界面搜索`COM_RCL_*`系列参数 - 若参数缺失,通过「工具 > 重置为默认值」恢复出厂设置 - 手动设置示例: ```bash COM_RC_IN_MODE = 1 # 启用遥控器输入 COM_FLTMODE1 = 6 # 设置模式1为Position模式 ``` 3. **重置配置文件** - 关闭QGC后删除配置文件: - Windows:`C:\Users\[用户名]\AppData\Roaming\QGroundControl.org` - macOS:`~/Library/Application Support/QGroundControl.org` 4. **检查MAVLink通信** - 通过「分析工具 > MAVLink控制台」输入`param show COM_RCL*` - 确认能正常获取参数响应,若超时需检查物理连接 5. **固件重新烧录** - 对于严重配置错误: ```bash qgc命令行执行:./ardupilot.sh --reinstall-firmware ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值