固定翼飞机在规划航线时,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默认是使用下滑坡度计算的。
计算过如下:
- 确定降落点的经纬高(在地图上点击,高度默认为0);
- 根据盘旋点默认高度40、滑行坡度6、即可计算出滑行距离。
- 再根据滑行距离、滑行航向、和降落点位置,可以计算得到滑行线和盘旋圆的切点坐标。
- 根据切点坐标、盘旋半径、盘旋点与着陆点的方向角即可计算出盘旋点的经纬度坐标。在此处计算QGC的程序写的比较繁琐,找了一个切点和盘旋点作为中间计算点来计算,着陆点和盘旋点的距离和航向,写的过于复杂。此处对程序进行修改后测试是ok的。
- 至此整个计算过程就结束了。在地图上修改着陆点和盘旋点位置或更改位置点高度、盘旋半径、滑行距离、滑行坡度、滑行航向后,根据信号触发不同的槽函数进行数据更新即可。
mission item 参数使用情况
- 开始着陆点
- missionRequestSeq n-3
- frame 2
- command 189
- param1 0
- param2 0
- param3 0
- param4 0
- param5 0
- param6 0
- param7 0
- 盘旋点
- 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 高度(相对高)
- 着陆点
- missionRequestSeq n-1
- frame 3
- command 21
- param1 0
- param2 0
- param3 0
- param4 0
- param5 纬度
- param6 经度
- param7 高度(相对高或海拔高)