GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
gkd_sentry_chassis.cpp
1#include "device/chassis/gkd_sentry_chassis.hpp"
2#include "core/async.hpp"
3#include "utils/kinematics/mecanum.hpp"
5#include "device/motor/dji.h"
6#include "utils/utils.hpp"
7
8using namespace roboctrl::device;
9
10ROBOCTRL_REGISTER_CHASSIS("device.gkd_sentry_chassis.v1", roboctrl::device::gkd_sentry_chassis);
11ROBOCTRL_REGISTER_CHASSIS("device.standard_mecanum_chassis.v1", roboctrl::device::gkd_sentry_chassis);
12ROBOCTRL_REGISTER_CHASSIS("ctrl.standard_mecanum_chassis.v1", roboctrl::device::gkd_sentry_chassis);
13
14roboctrl::awaitable<void> gkd_sentry_chassis::task()
15{
16 while(true){
17 co_await speed_decomposition();
18 co_await roboctrl::wait_for(control_time_);
19 }
20}
21
22bool gkd_sentry_chassis::init(const gkd_sentry_chassis::info_type& info){
23 left_front_motor_ = &roboctrl::get<dji_motor>(info.left_front_motor);
24 right_front_motor_ = &roboctrl::get<dji_motor>(info.right_front_motor);
25 left_rear_motor_ = &roboctrl::get<dji_motor>(info.left_rear_motor);
26 right_rear_motor_ = &roboctrl::get<dji_motor>(info.right_rear_motor);
27 control_time_ = info.control_time;
28 max_rotate_speed_ = info.max_rotate_speed;
29 wheel_directions_ = info.wheel_directions;
30 log_info("Chassis initiated");
31 roboctrl::spawn(task());
32 return true;
33}
34
35roboctrl::awaitable<void> gkd_sentry_chassis::speed_decomposition(){
36 if (!enabled_) {
37 co_await left_front_motor_->set(0.0f);
38 co_await right_front_motor_->set(0.0f);
39 co_await left_rear_motor_->set(0.0f);
40 co_await right_rear_motor_->set(0.0f);
41 co_return;
42 }
43
44 const auto wheels = utils::kinematics::mecanum_motor_targets(
45 velocity_, rotate_speed_, max_wheel_speed_, wheel_directions_);
46
47 log_debug("left_front_motor : {}",wheels[0]);
48 log_debug("right_front_motor : {}",wheels[1]);
49 log_debug("left_rear_motor : {}",wheels[2]);
50 log_debug("right_rear_motor : {}",wheels[3]);
51
52 co_await left_front_motor_->set(wheels[0]);
53 co_await right_front_motor_->set(wheels[1]);
54 co_await left_rear_motor_->set(wheels[2]);
55 co_await right_rear_motor_->set(wheels[3]);
56}
异步任务上下文组件。
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:262
auto spawn(task_context::task_type &&task)
添加一个协程任务到全局任务上下文中执行。
Definition async.hpp:191
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:46
底盘初始化参数。
Definition base.hpp:26
virtual awaitable< void > set(fp32 target)=0
常用数值与字节工具集合。