GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
motion_control.h
1#pragma once
2
3#include <chrono>
4#include <string>
5
6#include "core/async.hpp"
7#include "ctrl/control_mapping.hpp"
8#include "ctrl/motion_logic.hpp"
10#include "device/controlpad.h"
12#include "utils/singleton.hpp"
13
14namespace roboctrl::device { class aim_link; class navigation_link; class remote_logger; }
15namespace roboctrl::ctrl {
16using namespace std::chrono_literals;
17
18class motion_control : public utils::singleton_base<motion_control>, public logable<motion_control> {
19public:
20 struct info_type {
22 std::string control_pad_key {"control_pad"};
23 std::chrono::steady_clock::duration control_time {2ms};
24 bool enable_shoot {false};
25 utils::rad_pid::params_type follow_pid {};
26 fp32 follow_direction {1.0f}, spin_recenter_speed {1.0f}, follow_tolerance {0.005f};
27 bool enable_follow {true};
28 std::string primary_aim_key, secondary_aim_key, navigation_key;
29 bool enable_navigation {false}, search_when_vision_stale {false};
30 fp32 search_yaw_speed {0.8f}, search_pitch_speed {5.0f};
31 fp32 search_pitch_amplitude {0.2f}, search_pitch_center {0.165f};
32 fp32 large_yaw_follow_direction {1.0f};
33 std::string remote_logger_key;
34 std::chrono::steady_clock::duration telemetry_period {50ms};
35 bool red_team {true}; // Fallback only when no fresh referee identity exists.
36 };
37 bool init(const info_type& info);
38 awaitable<void> task();
39 std::string desc() const { return "motion control"; }
40private:
41 void dispatch(const control_command& command, fp32 dt);
42 void stop_outputs();
43 awaitable<void> send_telemetry();
44 awaitable<void> send_debug_telemetry();
45 info_type info_;
47 control_command command_ {};
48 device::chassis_base* chassis_ {nullptr};
49 device::gimbal_base* gimbal_ {nullptr};
50 device::gimbal_base* secondary_gimbal_ {nullptr};
51 device::gimbal_base* large_yaw_ {nullptr};
52 device::aim_link* primary_aim_ {nullptr};
53 device::aim_link* secondary_aim_ {nullptr};
54 device::navigation_link* navigation_ {nullptr};
55 device::remote_logger* remote_logger_ {nullptr};
56 control_mapper mapper_ {};
57 chassis_follow follow_;
58 fp32 search_elapsed_ {};
59 bool auto_aim_last_ {false};
60 bool input_pending_ {false};
61};
62static_assert(utils::singleton<motion_control>);
63}
异步任务上下文组件。
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
Definition logger.h:178
提供单例模式的单例基类
Definition singleton.hpp:19
遥控器串口设备与稳定输入快照。
底盘抽象接口与运行时注册表。
云台抽象接口与运行时注册表。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:46
已完成单位转换和解锁逻辑的控制层命令。
串口遥控输入的稳定内存表示。
Definition controlpad.h:22
统一的参数封装,方便序列化。
Definition pid.h:36
float fp32
单精度浮点别名。
Definition utils.hpp:22