GKD.RoboCtrl
载入中...
搜索中...
未找到
ramp.hpp
1#pragma once
2#include <cmath>
3#include <concepts>
4#include <chrono>
5
7
8namespace roboctrl::utils{
9
10
37template<std::floating_point T>
38class ramp {
39public:
44 struct params_type {
45 T acc;
46 };
47
48 using input_type = T;
49 using state_type = T;
50
51public:
52 ramp() = default;
53
60 explicit ramp(const params_type& params)
61 : acc_{params.acc}, last_update_{std::chrono::steady_clock::now()} {}
62
76 inline void update(T target) noexcept {
77 using namespace std::chrono;
78 const auto now = steady_clock::now();
79 const std::chrono::duration<T> dur = now - last_update_;
80 last_update_ = now;
81
82 const T dt = dur.count();
83 const T diff = target - out_;
84 const T max_step = acc_ * dt;
85
86 if (std::fabs(diff) <= max_step)
87 out_ = target;
88 else
89 out_ += std::copysign(max_step, diff);
90 }
91
96 inline void set_acc(T new_acc) noexcept { acc_ = new_acc; }
97
102 inline void reset() noexcept { out_ = T{0}; }
103
108 inline void reset(T value) noexcept { out_ = value; }
109
114 inline state_type state() const noexcept { return out_; }
115
116private:
117 T out_ = T{0};
118 T acc_ = T{0};
119 std::chrono::steady_clock::time_point last_update_{};
120};
121
126
131
135static_assert(utils::controller<ramp_f>);
136static_assert(utils::controller<ramp_d>);
137
138} // namespace control
一阶斜坡控制器 (Ramp)
Definition ramp.hpp:38
void reset(T value) noexcept
设置输出初值
Definition ramp.hpp:108
ramp(const params_type &params)
构造函数
Definition ramp.hpp:60
state_type state() const noexcept
获取当前输出状态
Definition ramp.hpp:114
void update(T target) noexcept
更新输出值
Definition ramp.hpp:76
T input_type
输入类型:目标值
Definition ramp.hpp:48
void reset() noexcept
清零输出值
Definition ramp.hpp:102
T state_type
状态类型:当前输出值
Definition ramp.hpp:49
void set_acc(T new_acc) noexcept
修改最大变化速率
Definition ramp.hpp:96
控制器概念,约束 update/state/构造能力。
控制器概念与串联控制链。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42
用于存放工具函数的命名空间。
Definition concepts.hpp:13
ramp< double > ramp_d
double 精度的 Ramp 控制器别名。
Definition ramp.hpp:130
auto now()
记录程序启动后的纳秒级时间戳。
Definition utils.hpp:147
T acc
最大速度变化率 (单位/秒)
Definition ramp.hpp:45