模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

3322查看 | 11回复

让 MWC 飞控支持在 Baro 定高模式下起飞的思路。

[复制链接]
发表于 2016-5-8 16:35:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
已知 MWC 飞控在 Baro 定高模式下起飞,有这样的问题:

对于不同的机架,或同一机架搭载不同重量电池、设备。在不知道悬停时油门位置的情况下,可能 Baro 定高功能很不好用,甚至根本定不住高度(定高需要一个很大的 I,使得油门可以以一个能接受的变化速度,找到悬停油门;但是 I 过大,使得 PID 很难调)。


解决思路:

一 先看 MWC 的定高算法
MWC 的定高算法,首先在源码里定义了宏:
ALT_HOLD_THROTTLE_MIDPOINT
    #define ALT_HOLD_THROTTLE_MIDPOINT        1500  // in us    - if uncommented, this value is used in ALT_HOLD for throttle stick middle point instead of initialThrottleHold parameter.

而定高时油门的计算是:
rcCommand[THROTTLE] = initialThrottleHold + BaroPID;

其中 initialThrottleHold 来自于宏 ALT_HOLD_THROTTLE_MIDPOINT :
        #if defined(ALT_HOLD_THROTTLE_MIDPOINT)
          initialThrottleHold = ALT_HOLD_THROTTLE_MIDPOINT;
        #else
          initialThrottleHold = rcCommand[THROTTLE];
        #endif
        BaroPID = 0;

二 再看 ArduCopter 定高算法的处理
(感谢 flyzero 同学的文章:APM源码分析之 油门跟踪)
最终姿态油门输出=p+i+d + _throttle_hover(悬停值,这个值时刻在计算修正)

AP_PosControl.h 文件中的相关代码:

#define POSCONTROL_THROTTLE_HOVER               450.0f  // default throttle required to maintain hover
    // parameters
    AP_Float    _throttle_hover;        // estimated throttle required to maintain a level hover
    /// set_throttle_hover - update estimated throttle required to maintain hover
    void set_throttle_hover(float throttle) { _throttle_hover = throttle; }

AP_PosControl.cpp 文件中的相关代码:

    // To-Do: we had a contraint here but it's now removed, is this ok?  with the motors library handle it ok?
    _attitude_control.set_throttle_out((int16_t)p+i+d+_throttle_hover, true);

Attitude.pde 文件中的相关代码:
// update_thr_cruise - update throttle cruise if necessary
//  should be called at 100hz
static void update_thr_cruise()
{
    // ensure throttle_avg has been initialised
    if( throttle_avg == 0 ) {
        throttle_avg = g.throttle_cruise;
        // update position controller
        pos_control.set_throttle_hover(throttle_avg);        // 如果遥控器油门持续最低,则设置为怠速。
    }

    // if not armed or landed exit
    if (!motors.armed() || ap.land_complete) {
        return;
    }

    // get throttle output
    int16_t throttle = g.rc_3.servo_out;

    // calc average throttle if we are in a level hover
    // 悬停时计算油门输出平均值, 即悬停值。
    if (throttle > g.throttle_min && abs(climb_rate) < 60 && labs(ahrs.roll_sensor) < 500 && labs(ahrs.pitch_sensor) < 500) {
        throttle_avg = throttle_avg * 0.99f + (float)throttle * 0.01f;
        g.throttle_cruise = throttle_avg;
        // update position controller
        pos_control.set_throttle_hover(throttle_avg);
    }
}

三 解决思路

MWC 中的 rcData[THROTTLE] 是遥控器原始数据。

MWC 中的 alt.vario 与 APM 的 climb_rate 相似。

MWC 中的 att.angle[ROLL] 与 APM 的 ahrs.roll_sensor 相似。

MWC 中的 att.angle[PITCH] 与 APM 的 ahrs.pitch_sensor 相似。

如果在 MWC 中 initialThrottleHold 的值,是动态变化的,与 ArduCopter 程序里面的 _throttle_hover 变量的算法相似。
是否就能明显改善 MWC 在定高模式起飞下的体验呢?



在 moz8 发布,请勿转载至 5imx 等无共享精神的论坛。











 楼主| 发表于 2016-5-8 16:40:54 | 显示全部楼层
修改的代码主要在 MultiWii.cpp

    // 悬停油门刷新
    if ((throttle > MINCHECK) && (abs(alt.vario) < 15) && abs(att.angle[ROLL]) < 500 && abs(att.angle[PITCH]) < 500)
    {
      throttle_avg = throttle_avg - (throttle_avg >> 7) + ((uint32_t)(throttle) << 3);
      set_throttle_hover((uint16_t)(throttle_avg >> 10));
      initialThrottleHold = _throttle_hover;
    }

    rcCommand[THROTTLE] = initialThrottleHold + BaroPID;
   
    #ifdef ALT_HOLD_THROTTLE_MIDPOINT
      if (lLockBaroTakeoff) // 定高模式起飞,当油门未超过一半时,油门输出最小值。
      {
        rcCommand[THROTTLE] = MINTHROTTLE;
      }
    #endif

    throttle = rcCommand[THROTTLE];

发表于 2016-5-9 06:51:02 | 显示全部楼层
高手,我完全看不懂,帮顶了
发表于 2016-5-9 10:02:24 | 显示全部楼层
让 MWC 飞控支持在 Baro 定高模式下起飞的思路。 电池,飞控,遥控器,APM,机架 作者:GIMAN 1254 让 MWC 飞控支持在 Baro 定高模式下起飞的思路。 电池,飞控,遥控器,APM,机架 作者:GIMAN 8125 让 MWC 飞控支持在 Baro 定高模式下起飞的思路。 电池,飞控,遥控器,APM,机架 作者:GIMAN 7912
发表于 2016-5-10 20:44:28 | 显示全部楼层
不懂  帮顶个
发表于 2017-8-21 15:20:08 | 显示全部楼层
帮顶
发表于 2017-8-27 16:58:42 | 显示全部楼层
楼主辛苦了,感谢楼主
发表于 2018-11-16 09:00:10 | 显示全部楼层
不知道现在还有没有人跟我一样还在看这个
回复 支持 反对

使用道具 举报

发表于 2019-6-18 10:09:11 | 显示全部楼层
学习啦赞,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2020-3-5 09:16:52 | 显示全部楼层
让 MWC 飞控支持在 Baro 定高模式下起飞的思路。 电池,飞控,遥控器,APM,机架 作者:大同江 3207 让 MWC 飞控支持在 Baro 定高模式下起飞的思路。 电池,飞控,遥控器,APM,机架 作者:大同江 8051 让 MWC 飞控支持在 Baro 定高模式下起飞的思路。 电池,飞控,遥控器,APM,机架 作者:大同江 8443
回复 支持 反对

使用道具 举报

发表于 2024-4-3 20:28:48 | 显示全部楼层
感谢分享,慢慢学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!