0

阿木币

2

精华

76 小时

在线时间

老司机

Rank: 2

发表于 2020-8-13 10:02:16 5821 浏览 5 回复

关于EKF2中的yaw角融合

如果使用外部视觉或者GPS的yaw角进行融合,磁力计就不会起作用,具体是noOtherYawAidingThanMag()函数起作用

EKF\mag_control.cpp

void Ekf::controlMagFusion()
{
    // handle undefined behaviour
    if (_params.mag_fusion_type > MAG_FUSE_TYPE_NONE) {
        return;
    }

    // When operating without a magnetometer and no other source of yaw aiding is active,
    // yaw fusion is run selectively to enable yaw gyro bias learning when stationary on
    // ground and to prevent uncontrolled yaw variance growth
    if (_params.mag_fusion_type == MAG_FUSE_TYPE_NONE) {
        if (noOtherYawAidingThanMag())
        {
            _yaw_use_inhibit = true;
            fuseHeading();
        }
        return;
    }

    updateMagFilter();
    checkMagFieldStrength();

    // If we are on ground, reset the flight alignment flag so that the mag fields will be
    // re-initialised next time we achieve flight altitude
    if (!_control_status.flags.in_air) {
        _control_status.flags.mag_aligned_in_flight = false;
        _num_bad_flight_yaw_events = 0;
    }

    if (_control_status.flags.mag_fault || !_control_status.flags.yaw_align) {
        stopMagFusion();
        return;
    }

    if (noOtherYawAidingThanMag() && _mag_data_ready) {
        if (_control_status.flags.in_air) {
            checkHaglYawResetReq();
            runInAirYawReset();
            runVelPosReset();

        } else {
            runOnGroundYawReset();
        }

        // Determine if we should use simple magnetic heading fusion which works better when
        // there are large external disturbances or the more accurate 3-axis fusion
        switch (_params.mag_fusion_type) {
        case MAG_FUSE_TYPE_AUTO:
            selectMagAuto();
            break;

        case MAG_FUSE_TYPE_INDOOR:
        /* fallthrough */
        case MAG_FUSE_TYPE_HEADING:
            startMagHdgFusion();
            break;

        case MAG_FUSE_TYPE_3D:
            startMag3DFusion();
            break;

        default:
            selectMagAuto();
            break;
        }

        checkMagDeclRequired();
        checkMagInhibition();

        runMagAndMagDeclFusions();
    }
}

扫一扫浏览分享
回复

使用道具 举报

202

阿木币

0

精华

373 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7

发表于 2020-8-13 11:47:15
可以学一下我们EKF的课程 EKF的东西 还是太难了  很多功能开发的话根本用不上
回复 点赞

使用道具 举报

0

阿木币

2

精华

76 小时

在线时间

老司机

Rank: 2

 楼主| 发表于 2020-8-13 13:16:04 来自手机
maxiou 发表于 2020-8-13 11:47
可以学一下我们EKF的课程 EKF的东西 还是太难了  很多功能开发的话根本用不上 ...

大致刷了一遍了,有些细节还是要自己看代码
回复 点赞

使用道具 举报

0

阿木币

2

精华

76 小时

在线时间

老司机

Rank: 2

 楼主| 发表于 2020-8-13 13:17:10 来自手机
maxiou 发表于 2020-8-13 11:47
可以学一下我们EKF的课程 EKF的东西 还是太难了  很多功能开发的话根本用不上 ...

我要做底层飞控开发,但是要先了解清楚状态估计
回复 点赞

使用道具 举报

139

阿木币

0

精华

287 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

发表于 2020-8-13 15:26:20
wilsonleong 发表于 2020-8-13 13:17
我要做底层飞控开发,但是要先了解清楚状态估计

厉害哦 你可以关注我们另外一个飞控开发项目
我不为己,谁人为我,但我只为己,那我又是谁?
回复 点赞

使用道具 举报

202

阿木币

0

精华

373 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7

发表于 2020-8-13 15:38:21
wilsonleong 发表于 2020-8-13 13:17
我要做底层飞控开发,但是要先了解清楚状态估计

可以关注下我们这个飞控开发项目:https://github.com/FirmamentPilot/FMT_Firmware 文档地址:https://firmamentpilot.github.io/docs/
回复 点赞

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表