• 关于QGC Landing Pattern规划的计算过程


            固定翼飞机在规划航线时,QGC提供了自动生成降落阶段航线功能。在地图上选择降落点之后,根据默认的下滑坡度或下滑距离、盘旋点半径,自动生成航线。最后的降落航向实际由三个点组成,开始降落点(MAV_CMD_DO_LAND_START)、盘旋点(MAV_CMD_NAV_LOITER_TO_ALT)、着陆点(MAV_CMD_NAV_LAND)。开始降落点在航线规划页面不显示;盘旋点默认高度40,盘旋半径75,顺时针方向盘旋;降落滑行航向默认270deg,滑行坡度默认6deg或者滑行长度300m,QGC根据以上数据生成降落阶段航线。

            降落点和盘旋点是可以随鼠标拖动进行联动,所以降落点的经纬高和盘旋点的经纬高、盘旋半径和盘旋方向,以及滑行航向、滑行坡度、滑行距离之间是有固定的计算公式,本文对几个数据间的计算关系进行整理。

            上边提到的计算过程均在QGC的FixedWingLandingComplexItem.cc中运行,几个数据之间是使用信号和槽函数进行联动的,如下图所示。

    在FixedWingLandingComplexItem类初始化程序中可以看到,根据滑行距离计算和滑行坡度计算是2选1的,QGC默认是使用下滑坡度计算的。

    计算过如下:

    1. 确定降落点的经纬高(在地图上点击,高度默认为0);
    2. 根据盘旋点默认高度40、滑行坡度6、即可计算出滑行距离。
    3. 再根据滑行距离、滑行航向、和降落点位置,可以计算得到滑行线和盘旋圆的切点坐标。
    4. 根据切点坐标、盘旋半径、盘旋点与着陆点的方向角即可计算出盘旋点的经纬度坐标。在此处计算QGC的程序写的比较繁琐,找了一个切点和盘旋点作为中间计算点来计算,着陆点和盘旋点的距离和航向,写的过于复杂。此处对程序进行修改后测试是ok的。
    5. 至此整个计算过程就结束了。在地图上修改着陆点和盘旋点位置或更改位置点高度、盘旋半径、滑行距离、滑行坡度、滑行航向后,根据信号触发不同的槽函数进行数据更新即可。

    mission item 参数使用情况

    1. 开始着陆点
    • missionRequestSeq n-3
    • frame 2
    • command 189
    • param1 0
    • param2 0
    • param3 0
    • param4 0
    • param5 0
    • param6 0
    • param7 0
    1. 盘旋点
    • missionRequestSeq n-2
    • frame 3
    • command 31
    • param1 1    Heading wait False(0)/True(1)
    • param2 75  盘旋半径,正值顺时针,负值逆时针
    • param3 0
    • param4 1      Exit loiter form center(0)/Tangent(1)
    • param5  纬度
    • param6  经度
    • param7  高度(相对高)
    1. 着陆点
    • missionRequestSeq  n-1
    • frame 3
    • command 21
    • param1 0
    • param2 0
    • param3 0
    • param4 0
    • param5  纬度
    • param6  经度
    • param7  高度(相对高或海拔高)
  • 相关阅读:
    kafka集群与redis集群的概念对应关系
    温故知新(十三)——CAN
    用 Python 自动化处理无聊的事情
    LeetCode简单题之第一个出现两次的字母
    第十四章第三节2:Java集合框架之队列Queue
    OFDM系统各种QAM调制阶数在多径信道下的误码性能仿真(暂存版本)
    Spring配置那些事
    Linux下apache日志(按日期存放)分析与状态查看方法
    考生都难哭了,用 Python 分析了一下,这里才是高考地狱级难度
    如何在Node.js中使用环境变量或命令行参数来设置HTTP爬虫ip?
  • 原文地址:https://blog.csdn.net/nieji3057/article/details/132941027