GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
gkd_sentry_chassis.hpp
1#pragma once
2
3#include <algorithm>
4#include <chrono>
5#include <string>
6
9#include "utils/singleton.hpp"
10
11namespace roboctrl::device {
12
13class gkd_sentry_chassis final : public chassis_base,
14 public utils::singleton_base<gkd_sentry_chassis>,
15 public logable<gkd_sentry_chassis> {
16public:
17 using base_type = chassis_base;
18 using utils::singleton_base<gkd_sentry_chassis>::singleton_base;
19
20 std::string desc() const { return "GKD Sentry chassis"; }
21 awaitable<void> task();
22
23 void set_planar_velocity(vectorf v) override { velocity_ = v; }
24 void set_planar_x(fp32 value) override { velocity_.x = value; }
25 void set_planar_y(fp32 value) override { velocity_.y = value; }
26 vectorf velocity() const override { return velocity_; }
27 void set_rotate_speed(fp32 v) override {
28 rotate_speed_ = std::clamp(v, -max_rotate_speed_, max_rotate_speed_);
29 }
30 fp32 rotate_speed() const override { return rotate_speed_; }
31 void set_enabled(bool enabled) override { enabled_ = enabled; }
32 std::array<motor_base*, 4> wheel_motors() const override {
33 return {left_front_motor_, right_front_motor_, left_rear_motor_, right_rear_motor_};
34 }
35
36 using info_type = chassis_base::info_type;
37
38 bool init(const info_type&);
39
40private:
41 awaitable<void> speed_decomposition();
42
43 vectorf velocity_{};
44 fp32 rotate_speed_{};
45 fp32 max_wheel_speed_{2.5f};
46 fp32 max_rotate_speed_{1.0f};
47 std::array<int, 4> wheel_directions_ {1, -1, 1, -1};
48 std::chrono::steady_clock::duration control_time_{1ms};
49 motor_base* left_front_motor_{nullptr};
50 motor_base* right_front_motor_{nullptr};
51 motor_base* left_rear_motor_{nullptr};
52 motor_base* right_rear_motor_{nullptr};
53 bool enabled_{false};
54};
55
56static_assert(utils::singleton<gkd_sentry_chassis>);
57static_assert(chassis<gkd_sentry_chassis>);
58
59} // namespace roboctrl::device
底盘的统一控制接口。
Definition base.hpp:23
void set_planar_x(fp32 value) override
单独设置平面 x 方向速度。
vectorf velocity() const override
获取当前平面速度目标。
void set_enabled(bool enabled) override
启用或禁用底盘输出。
void set_rotate_speed(fp32 v) override
设置绕 z 轴的旋转速度。
void set_planar_y(fp32 value) override
单独设置平面 y 方向速度。
void set_planar_velocity(vectorf v) override
设置平面速度 (x, y),单位由具体底盘约定为 m/s。
fp32 rotate_speed() const override
获取当前绕 z 轴的旋转速度目标。
std::array< motor_base *, 4 > wheel_motors() const override
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
Definition logger.h:178
提供单例模式的单例基类
Definition singleton.hpp:19
底盘抽象接口与运行时注册表。
电机基础组件。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:46
底盘初始化参数。
Definition base.hpp:26
float fp32
单精度浮点别名。
Definition utils.hpp:22