PX4输出限制状态机output_limit

1. 参数

__EXPORT void output_limit_calc(const bool armed, const bool pre_armed, const unsigned num_channels,
                                const uint16_t reverse_mask, const uint16_t *disarmed_output,
                                const uint16_t *min_output, const uint16_t *max_output,
                                const float *output, uint16_t *effective_output, output_limit_t *limit);
                                
// armed 			系统是否解锁
// prearmed 		安全开关是否打开
// num_channels 	通道数
// reverse_mask 	通道反向
// disarmed_output 	加锁状态的输出
// min_output    	最小输出
// max_output    	最大输出
// output        	原始输出
// effective_output    经过限制计算后的输出
// limit        		限制状态机状态,此函数向外输出的内容

2. 用处

  • src/lib/mixer_module/mixer_module.cpp中的bool MixingOutput::update()使用了
    其中参数pre_armed = armNoThrottl()在两种情况下为真

    1. prearmed而且没有armed
    2. 在电调校准状态
  • src/lib/mixer_module/mixer_module.cpp中的bool MixingOutput::update()使用了

3 状态

    OUTPUT_LIMIT_STATE_OFF = 0,
    OUTPUT_LIMIT_STATE_INIT,
    OUTPUT_LIMIT_STATE_RAMP,
    OUTPUT_LIMIT_STATE_ON

4 状态转移图

如果系统pre-armd,则将limit_state临时设置为ON。
在外部,pre-armd状态下一些输出被设置为有效的,无效的输出被设置为NAN。
这情况没存储在状态机里,因为油门通道需要ramp ( need to go through the ramp at regular arming time)。
在这里插入图片描述

5 每个状态里都干了啥

在这里插入图片描述
可见,其从disarm到min是h文件定义的RAMP_TIME_US
也就是0.5s
对于直升机无人机或者油动发动机等设备,可能需要更长时间的暖机或者慢车时间,或者更多状态,可以在此基础上做改动。

6 完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值