8#include "device/gimbal/feedback.hpp"
25 void start()
override;
26 std::string desc()
const {
return "GKD IMU gimbal " + info_.yaw_motor_key; }
28 fp32 yaw()
const override {
return measured_yaw_; }
29 fp32 pitch()
const override {
return measured_pitch_; }
30 fp32 yaw_rate()
const override {
return yaw_rate_; }
31 fp32 target_yaw()
const override {
return yaw_target_; }
32 fp32 target_pitch()
const override {
return pitch_target_; }
34 bool relative_yaw_valid()
const override {
return online_ && info_.yaw_zero_calibrated; }
35 bool online()
const override {
return online_; }
36 bool initialized()
const override {
return initialized_ && online_; }
40 if (std::isfinite(v)) pitch_target_ = std::clamp(v, info_.pitch_min, info_.pitch_max);
48 void reset_controllers();
50 fp32 yaw_target_{}, pitch_target_{}, measured_yaw_{}, measured_pitch_{};
51 fp32 relative_yaw_{}, yaw_rate_{};
52 bool targets_initialized_{
false}, initialized_{
false}, enabled_{
false};
53 bool recentering_{
false}, online_{
false}, started_{
false};
54 bool drive_fault_latched_{
false};
55 gimbal_settle settle_;
56 utils::rad_pid yaw_angle_pid_{}, pitch_angle_pid_{}, yaw_relative_pid_{};
58 imu_base* imu_{
nullptr};
59 motor_base* yaw_motor_{
nullptr};
60 motor_base* pitch_motor_{
nullptr};
63static_assert(gimbal<gkd_sentry_gimbal>);
void add_pitch(fp32 v) override
增加 pitch 目标量,单位 rad。
awaitable< void > update(fp32 dt)
void set_enabled(bool v) override
启用或禁用云台输出。
void set_recentering(bool v) override
void set_target_yaw(fp32 v) override
设置 yaw 绝对目标,单位 rad。
fp32 pitch() const override
获取当前 pitch 姿态,单位 rad。
void set_target_pitch(fp32 v) override
设置 pitch 绝对目标,单位 rad。
fp32 yaw() const override
获取当前 yaw 姿态,单位 rad。
fp32 relative_yaw() const override
void add_yaw(fp32 v) override
增加 yaw 目标量,单位 rad。
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
asio::awaitable< T > awaitable
协程任务类型。
auto init(const info_type &info) -> bool
初始化多例实例或单例实例
constexpr fp32 rad_format(fp32 ang)
将角度限制到[-Pi,Pi]范围内
pid_base< fp32, details::linear_error > linear_pid
线性 PID 控制器。
pid_base< fp32, details::rad_error > rad_pid
角度 PID 控制器。