GKD.RoboCtrl
载入中...
搜索中...
未找到
dji.h
浏览该文件的文档.
1
6#pragma once
7
8#include <chrono>
9#include <cstdint>
10#include <string_view>
11
12#include "base.hpp"
13#include "core/logger.h"
14#include "core/async.hpp"
15#include "utils/pid.h"
16
17namespace roboctrl::device{
18
19class dji_motor_group;
20
24class dji_motor : public motor_base,public logable<dji_motor>{
25public:
26 enum type{
27 M2006 = 2006,
28 M3508 = 3508,
29 M6020 = 6020
30 };
31
35 struct info_type{
36 using key_type = std::string_view;
37 using owner_type = dji_motor;
38
39 type type_;
40 int id;
41 std::string_view name;
42 std::string_view can_name;
43 fp32 radius;
45 std::chrono::steady_clock::duration control_time;
46 inline std::string_view key()const{return name;}
47 };
48
52 inline std::string desc() const{
53 return std::format("Dji motor {}",info_.name);
54 }
55
56 dji_motor(info_type info);
57
62 awaitable<void> task();
63 awaitable<void> enable(){co_return ;}
64
65 inline int16_t current()const{return current_;}
66private:
67 std::pair<uint16_t,uint16_t> can_pkg_id() const;
68private:
69 friend dji_motor_group;
70 info_type info_;
71 int16_t current_;
72 fp32 reduction_ratio_;
74};
75
77static_assert(motor<dji_motor>);
78
82class dji_motor_group : public logable<dji_motor_group>{
83public:
87 struct info_type{
88 using key_type = std::string_view;
90
91 std::string_view can_name;
92
93 inline std::string_view key()const{return can_name;}
94
95 static inline info_type make(std::string_view can_name){
96 return{.can_name = can_name};
97 }
98 };
99
104
109
114 inline std::string desc()const{return std::format("Dji motor group on can({})",info_.can_name);}
115
116private:
117 awaitable<void> send_command(uint16_t can_id_);
118private:
119
120 struct motor_info{
122 int id;
123 dji_motor::type type;
124 };
125
126 std::vector<dji_motor*> motors_;
127 info_type info_;
128};
129
131static_assert(owner<dji_motor_group>);
132
133}
异步任务上下文组件。
将同一 CAN 总线上的电机编组,一次性发送报文。
Definition dji.h:82
awaitable< void > task()
与调度器协同的任务,负责读取反馈等。
Definition dji.cpp:113
void register_motor(dji_motor *motor)
注册单个电机到分组内。
Definition dji.cpp:52
DJI 系列电机。
Definition dji.h:24
awaitable< void > set(fp32 speed)
设置目标电流或速度(取决于电调模式)。
Definition dji.cpp:175
std::string desc() const
描述信息,用于日志输出。
Definition dji.h:52
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
Definition logger.h:178
IO的基础组件。
用于日志输出的组件。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42
设备模块
Definition base.hpp:25
pid_base< fp32, details::linear_error > linear_pid
线性 PID 控制器。
Definition pid.h:125
通用 PID 控制器实现。
电机初始化参数。
Definition dji.h:35
分组初始化参数。
Definition dji.h:87
统一的参数封装,方便序列化。
Definition pid.h:35
float fp32
单精度浮点别名。
Definition utils.hpp:22