#ifndef __CONTROL_THROTTLE_H #define __CONTROL_THROTTLE_H #include #include #include "control_rate.h" #define HOVER_THR 1300 // 解锁限制条状枚举类 enum { // 允许解锁 UNLOCK_ALLOW = 0, // 不允许解锁,IMU 通讯错包 UNLOCK_DMAERR = 1, // 不允许解锁,速度超 0.4m/s UNLOCK_VELERR = 2, // 不允许解锁,遥控器拨杆位置错误 UNLOCK_RCERR = 3, // 不允许解锁,未收到IMU数据 UNLOCK_NOIMU = 4, // 不允许解锁,GPS状态标志错误 UNLOCK_GPSERR = 5, // 不允许解锁,陀螺加速度计状态标志错误, 或加速度超 0.8m/s^2 UNLOCK_ACCERR = 6, // 不允许解锁,未INS定位 UNLOCK_NOINSGPS = 7, // 不允许解锁,无RTK UNLOCK_NORTK = 8, // 不允许解锁,磁状态标志错误 UNLOCK_MAGERROR = 9, // 不允许解锁,陀螺超10deg/s UNLOCK_GYROERROR = 10, // 不允许解锁,温度超过80度 UNLOCK_OVER_TEMPRATURE = 11, // 不允许解锁,imu版本不匹配 UNLOCK_IMU_VERSION_ERR = 12, // 不允许解锁,在禁飞区内 UNLOCK_IN_NO_FLY_ZONE = 13, // 不允许解锁, 电压低 UNLOCK_VOLT_LOW = 14, // 不允许解锁, 智能电池 BMS 电量低 UNLOCK_BMS_LOW_CAPACITY = 15, // 不允许解锁, 智能电池 BMS 故障 UNLOCK_BMS_FAULT = 16, // 不允许解锁, 智能电池 BMS 通讯异常 UNLOCK_BMS_LINK_LOST = 17, // 不允许解锁, 有断桨故障 UNLOCK_SERVO_FAILSAFE = 18, // 不允许解锁, 姿态倾斜超 30 度 UNLOCK_LEAN_ANGLE = 19, // 不允许解锁, SD 卡故障 UNLOCK_SD_FAIL = 20, }; // 油门上锁原因枚举类 enum { //初始状态 DEFLOCK = 0, //遥控器主动上锁 RCLOCK = 1, //遥控器自动上锁 RCAUTOLOCK = 2, //摇杆主动上锁 ROCKLOCK = 3, //摇杆自动上锁 ROCKAUTOLOCK = 4, //摇杆弹起上锁 ROCKUPLOCK = 5, //返航上锁 RTHLOCK = 6, //角度上锁 ANGLELOCK = 7, //电台丢失上锁 LINKLOSTLOCK = 8, //自动起飞超时上锁 LAUNCHOTLOCK = 9, //丢失IMU上锁 NOIMULOCK = 10, //一键上锁 ONKEYLOCK = 11, //降落上锁 LANDLOCK = 12, //丢星姿态降落上锁 GPSFAILLOCK = 13, //遥控器错误上锁 RCBADLOCK = 14, // 车载降落上锁 VEHICLELAND_LOCK = 15, // 地面站强制上锁 GCSFORCELOCK = 16, // 开伞上锁 PARACHUTELOCK = 17, }; // 解锁原因枚举类 enum { // 初始状态 DEFUNLOCK = 0, // 遥控器解锁 RCUNLOCK = 1, // 摇杆解锁 ROCKUNLOCK = 2, // 自动起飞解锁 LAUNCHUNLOCK = 3, // 车载起飞解锁 VEHICLELAUNCH_UNLOCK = 4, }; // 油门锁状态枚举类 enum { //上锁状态 LOCKED = 1, //解锁状态 UNLOCKED = 2, //起飞状态-给IMU发送指令使用 TAKEOFF = 3 }; // 离地状态枚举类 enum { //在地上 ON_GROUND = 1, //在空中 IN_AIR = 2, }; // 油门控制状态 typedef enum { THROTTLE_OFF = 0, THROTTLE_ONGROUND_IDLE = 1, THROTTLE_INAIR_RUNNING = 2 } ThrCtrolStatusType; extern ThrCtrolStatusType throttle_pidctrl_status; // 定高状态标志 enum { ALT_HOLD = 1, NO_ALT_HOLD = 2 }; extern char althold_state; extern bool unlock_fail; extern char thr_lock_flag; extern char thr_unlock_flag; extern char thr_lock_status; extern char ground_air_status; void pilot_unlock_decide(void); void pilot_takeoff_decide(void); void pilot_lock_decide(void); void get_pilot_desired_climb_rate_fromrc(short thr_in); void Calculate_Target_Az(float dt); void rate_pid_acctothrottle_alt(float dt); extern float base_thr, temp_basethr; void set_thr_lock_status(uint8_t lock_status, uint8_t reason); int judge_pilot_gsunlock_allow(void); int judge_pilot_rcunlock_allow(void); void throttle_enable_unlock_tune(void); bool throttle_get_enable_unlock_tune(void); void clear_poshold_i_item(struct pid_method_ap *method); #endif