GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
robot.h
浏览该文件的文档.
1
5#pragma once
6
7#include <string>
8#include <vector>
9#include <optional>
10#include <memory>
11
12#include "core/async.hpp"
13#include "ctrl/control_mapping.hpp"
14#include "ctrl/motion_control.h"
15#include "ctrl/shoot.h"
17#include "device/controlpad.h"
19#include "device/motor/base.hpp"
20#include "utils/singleton.hpp"
21#include "utils/utils.hpp"
22
23namespace roboctrl::ctrl{
24
26enum class robot_state{
27 NoForce,
28 FinishInit,
29 FollowGimbal,
30 Search,
31 Idle,
32 NotFollow
33};
34
35class robot : public utils::singleton_base<robot>,public logable<robot>{
36public:
37 robot() = default;
39 struct info_type{
40 using owner_type = robot;
43 shoot::info_type shoot_info;
44 std::optional<device::gimbal_base::info_type> secondary_gimbal_info;
45 std::optional<device::gimbal_base::info_type> large_yaw_info;
46 std::optional<shoot::info_type> secondary_shoot_info;
47 motion_control::info_type motion_info;
49 std::string chassis_type {"ctrl.standard_mecanum_chassis.v1"};
51 std::string gimbal_type {"ctrl.standard_imu_2axis_gimbal.v1"};
52 std::string control_pad_key {"control_pad"};
53 bool enable_chassis {true};
54 bool enable_gimbal {false};
55 bool enable_shoot {false};
56 };
57
59 bool init(const info_type& info);
60 std::string desc()const{return "robot";}
61
65 device::chassis_base* chassis() noexcept { return chassis_; }
66 const device::chassis_base* chassis() const noexcept { return chassis_; }
67
69 device::gimbal_base* gimbal() noexcept { return gimbal_; }
70 const device::gimbal_base* gimbal() const noexcept { return gimbal_; }
71
72 device::gimbal_base* secondary_gimbal() noexcept { return secondary_gimbal_; }
73 device::gimbal_base* large_yaw() noexcept { return large_yaw_; }
74 shoot* secondary_shoot() noexcept { return secondary_shoot_.get(); }
75 bool gimbals_initialized() const;
76 bool gimbals_online() const;
77
79 robot_state state()const{return state_;}
82private:
83 robot_state state_ {robot_state::NoForce};
84 std::string control_pad_key_;
85 bool enable_chassis_ {false};
86 bool enable_gimbal_ {false};
87 bool enable_shoot_ {false};
88 device::chassis_base* chassis_ {nullptr};
89 device::gimbal_base* gimbal_ {nullptr};
90 device::gimbal_base* secondary_gimbal_ {nullptr};
91 device::gimbal_base* large_yaw_ {nullptr};
92 std::unique_ptr<shoot> secondary_shoot_;
93 std::vector<device::motor_base*> controlled_motors_;
94};
95
96static_assert(utils::singleton<robot>);
97}
异步任务上下文组件。
roboctrl::awaitable< void > task()
运行机器人级状态机任务。
Definition robot.cpp:92
bool init(const info_type &info)
创建具体底盘/云台并初始化控制子系统。
Definition robot.cpp:11
device::chassis_base * chassis() noexcept
Definition robot.h:65
robot_state state() const
获取当前机器人状态。
Definition robot.h:79
device::gimbal_base * gimbal() noexcept
Definition robot.h:69
void set_state(robot_state state)
设置当前机器人状态并更新输出使能。
Definition robot.cpp:73
底盘的统一控制接口。
Definition base.hpp:23
云台的统一姿态目标接口。
Definition base.hpp:22
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
Definition logger.h:178
提供单例模式的单例基类
Definition singleton.hpp:19
遥控器串口设备与稳定输入快照。
底盘抽象接口与运行时注册表。
云台抽象接口与运行时注册表。
电机基础组件。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:46
robot_state
机器人控制状态。
Definition robot.h:26
发射器和拨弹机构控制。
机器人初始化参数及启用的子系统。
Definition robot.h:39
std::string chassis_type
配置选择的具体底盘类;当前仅实现标准麦轮底盘。
Definition robot.h:49
std::string gimbal_type
配置选择的具体云台类;当前仅实现标准双轴 IMU 云台。
Definition robot.h:51
发射器初始化参数。
Definition shoot.h:25
底盘初始化参数。
Definition base.hpp:26
云台初始化参数,包括 IMU、电机和角度限制。
Definition base.hpp:25
常用数值与字节工具集合。