• PX4模块设计之三十:Hysteresis类


    1. Hysteresis类简介

    根据当前状态、期望状态、状态之间迁徙时间,通过迁徙时间和期望状态更新的迟滞算法来计算当前状态的类,能够过滤及稳定状态输出,同时带来一定的时间上的迟滞。

    class Hysteresis

    49 class Hysteresis
    50 {
    51 public:
    52 	explicit Hysteresis(bool init_state) :
    53 		_state(init_state),
    54 		_requested_state(init_state)
    55 	{}
    56 	Hysteresis() = delete; // no default constructor
    57 
    58 	~Hysteresis() = default;
    59 
    60 	bool get_state() const { return _state; }
    61 
    62 	void set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us);
    63 
    64 	void set_state_and_update(const bool new_state, const hrt_abstime &now_us);
    65 
    66 	void update(const hrt_abstime &now_us);
    67 
    68 private:
    69 
    70 	hrt_abstime _last_time_to_change_state{0};
    71 
    72 	hrt_abstime _time_from_true_us{0};
    73 	hrt_abstime _time_from_false_us{0};
    74 
    75 	bool _state;
    76 	bool _requested_state;
    77 };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2. Hysteresis类成员变量介绍

    1. hrt_abstime _last_time_to_change_state: 上一次状态变更时间
    2. hrt_abstime _time_from_true_us: true --> false 状态变更迟滞时间
    3. hrt_abstime _time_from_false_us:false --> true 状态变更迟滞时间
    4. bool _state: 当前状态
    5. bool _requested_state: 期望状态

    3. Hysteresis类迟滞逻辑

    1. 期望状态与当前状态一致,则继续维持该状态
    2. 期望状态与当前状态不一致:若期望状态与上次期望状态一致,则表示期望状态稳定,维持当前期望状态,等待超时状态变更
    3. 期望状态与当前状态不一致:若期望状态与上次期望状态不一致,则表示期望状态不稳定,更新最新的期望状态,并更新期望状态更新时间,等待状态稳定,超时变更

    4. Hysteresis类重要方法

    4.1 Hysteresis(bool init_state)

    将状态初始化为设置的init_state(当前状态+期望状态)

    Hysteresis(bool init_state) 
     ├──> _state = init_state
     └──> _requested_state = init_state
    
    • 1
    • 2
    • 3

    4.2 void set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us)

    设置状态迁徙需要的时间,单位us

    set_hysteresis_time_from(const bool from_state, const hrt_abstime new_hysteresis_time_us)
     ├──> 
     │   └──> _time_from_true_us = new_hysteresis_time_us  // true -> false 状态迁徙需要的时间
     └──> 
         └──> _time_from_false_us = new_hysteresis_time_us  // false -> true 状态迁徙需要的时间
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.3 void set_state_and_update(const bool new_state, const hrt_abstime &now_us)

    设置期望状态,并根据状态迁徙时间进行更新。

    set_state_and_update(const bool new_state, const hrt_abstime &now_us)
     ├──> 
     │   ├──> _requested_state = new_state
     │   └──> _last_time_to_change_state = now_us
     ├──> 
     │   └──> _requested_state = _state
     └──> update(now_us)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.4 void update(const hrt_abstime &now_us)

    根据迁徙时间及期望状态,更新当前状态。

    update(const hrt_abstime &now_us)
     └──> <_requested_state != _state>
         ├──> const hrt_abstime elapsed = now_us - _last_time_to_change_state
         ├──> <_state && !_requested_state>= _time_from_true_us>  // true -> false
         │   └──> _state = false;
         └──> = _time_from_false_us> // false -> true
             └──> _state = true;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5. 总结

    Hysteresis类,通过不同状态迁徙时间设置,期望状态调整,过滤了不稳定二值状态,同时带来了一定时间上的迟滞。

  • 相关阅读:
    Python基础set集合定义与函数
    【Java基础】23.接口
    第二章计算机网络参考模型
    k8s--基础--18.3--存储卷--类型--hostPath
    第7章 模式匹配与正则表达式
    ChatGPT OpenAI 行政HR会计财务办公自动化操作
    【docker】修改Docker默认存储位置修改配置文件方式
    SoildNet: Soiling Degradation Detection inAutonomous Driving 个人理解
    java-net-php-python-jsp音像店租赁录像计算机毕业设计程序
    在autodl搭建stable-diffusion-webui+sadTalker
  • 原文地址:https://blog.csdn.net/lida2003/article/details/126716816