自动起飞过程中经常出现往一边偏的问题,无法很好的到达takeoff点。
参考代码:
src/modules/fw_pos_control_l1/FixedwingPostionControl.cpp 中 control_takeoff 函数
结合航点到达判定函数
src/modules/navigator/mission_block.cpp
可能还需要结合自动起飞代码
src/modules/fw_pos_control_l1/runway_takeoff (起飞被划分为好几个阶段,加油门,滑跑,离地,爬升,航点飞行)
问题分析:
滑跑起飞后流程如下:
1 加油门
按照代码设定时间,线性增加油门到最大值,时间为2s
2 滑跑
加速直到FW_AIRSPD_MIN(10)*RWTO_AIRSPD_SCL(1.29)
在2.1 和 2.2 流程中没有航线控制,不管方向,极有可能会出现往一边偏的问题。
3 起飞
空速达到之后,一直飞行,直到离地高度大于RWTO_NAV_ALT(5m)
4 爬升
爬升过程中,判定航线模式,如果RWTO_HDG为1,则会朝向航点飞行,否则先爬高。
参数中RWTO_HDG为0,爬升过程中没有航向保持
5 航点飞行
爬升完成进入航点飞行,从这里开始进行航点到达判断,如果起飞点容易太近,容易飞过头,会绕大弯到起飞点
弹射起飞如下:
弹射起飞识别:
弹射起飞是Runway Takeoff禁用的模式下才会使用,RWTO_TKOFF设置成disable。
若弹射起飞未使能,LAUN_ALL_ON为enable,直接标志为弹射起飞完成,加油起飞。否则进入下面流程
1 等待强且长的x轴加速度
加速度阈值超过LAUN_CAT_A,开始计时,时间超过LAUN_CAT_T,认为检测弹射,进入2
2 判断是否启动主电机(油门)
判断电机延时(油门延时)状态,如果电机延时时间为0,直接加油起飞,否则进入3
3 等待时间到
电机延时到,开启电机,在等待过程中会开启姿态控制,电机开启后启动航点控制(包含高度控制)
问题解决:
1、地面站自动起飞的状态只到runway,即上面的2,甚至最小空速都没有达到。这是因为在Runway takeoff的判断逻辑里面,起飞的状态和流程需要使用到airspeed,然而我们的飞行器上面没有airspeed,并且没有设置FW_ARSP_MODE为禁用模式,以至于空速一直为0,无法进去下一阶段,一直停留在runway状态,更没有L1控制,所以往一边偏。
2、使用滑跑起飞,需要计算出airspeed,可以的话能否使用对地速度作为airspeed,帮助完成整个滑跑起飞的判断流程。同时设置这些参数,更加合理的实现滑跑起飞。缩小加油门时间(代码设置),空速检测阈值FW_AIRSPD_MIN,起飞高度RWTO_NAV_ALT,航线保持RWTO_HDG。
3、使用弹射起飞。禁用滑跑起飞,RWTO_TKOFF设置为disable,开启弹射起飞LAUN_ALL_ON(不开启也可实现起飞,不太好),设置合理加速度阈值及时间,LAUN_CAT_A,LAUN_CAT_T。看情况设置油门延时LAUN_CAT_MDE。