GKD.RoboCtrl
载入中...
搜索中...
未找到
chassis.cpp
1#include "ctrl/chassis.h"
2#include "core/async.hpp"
3#include "ctrl/gimbal.h"
5#include "device/motor/dji.h"
6#include "utils/utils.hpp"
7
8using namespace roboctrl::ctrl;
9using namespace roboctrl::device;
10
11roboctrl::awaitable<void> chassis::task()
12{
13 while(true){
14 co_await speed_decomposition();
15 co_await roboctrl::wait_for(1ms);
16 }
17}
18
19bool chassis::init(const chassis::info_type& info){
20 log_info("Chassis initiated");
21 roboctrl::spawn(task());
22 return true;
23}
24
25roboctrl::awaitable<void> chassis::speed_decomposition(){
28
29 fp32 vx = cos_yaw * velocity_.x + sin_yaw * velocity_.y;
30 fp32 vy = -sin_yaw * velocity_.x + cos_yaw * velocity_.y;
31 fp32 wz = rotate_speed_;
32
33 fp32 w_lf = vx - vy - wz;
34 fp32 w_rf = vx + vy + wz;
35 fp32 w_lr = vx + vy - wz;
36 fp32 w_rr = vx - vy + wz;
37
38 float max_w = std::max({w_lf,w_rf,w_lr,w_rr});
39 max_w = std::max(max_w,-std::min({w_lf,w_rf,w_lr,w_rr}));
40
41 fp32 factor = 1.0;
42
43 if(max_w > max_wheel_speed_) // 超速时按比例缩放
44 fp32 factor = max_wheel_speed_ / max_w;
45
46 log_debug("left_front_motor : {}",w_lf * factor);
47 log_debug("right_front_motor : {}",-w_rf * factor);
48 log_debug("left_rear_motor : {}",w_lr * factor);
49 log_debug("right_rear_motor : {}",-w_rr * factor);
50
51 co_await set_motor<dji_motor>("left_front_motor", w_lf * factor);
52 co_await set_motor<dji_motor>("right_front_motor", -w_rf * factor);
53 co_await set_motor<dji_motor>("left_rear_motor", w_lr * factor);
54 co_await set_motor<dji_motor>("right_rear_motor", -w_rr * factor);
55}
异步任务上下文组件。
void log_debug(std::format_string< Args... > fmt, Args &&...args) const
输出debug日志
Definition logger.h:202
void log_info(std::format_string< Args... > fmt, Args &&...args) const
输出info日志
Definition logger.h:214
电机基础组件。
DJI 电机及分组抽象。
云台控制器。
awaitable< void > wait_for(const duration &duration)
协程任务等待。
Definition async.hpp:202
auto spawn(task_context::task_type &&task)
添加一个协程任务到全局任务上下文中执行。
Definition async.hpp:151
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42
设备模块
Definition base.hpp:25
常用数值与字节工具集合。
float fp32
单精度浮点别名。
Definition utils.hpp:22