GKD.RoboCtrl
载入中...
搜索中...
未找到
shoot.cpp
1#include "ctrl/shoot.h"
2#include "core/async.hpp"
3#include "ctrl/robot.h"
5#include "device/motor/dji.h"
6#include "utils/ramp.hpp"
7
8using namespace roboctrl::ctrl;
9
10bool shoot::init(const shoot::info_type& info)
11{
12 info_ = info;
13 friction_ramp_ = utils::ramp_f{info_.friction_params};
14 log_info("Shoot initiated");
15
16 roboctrl::spawn(task());
17
18 return true;
19}
20
21void shoot::set_firing(bool state)
22{
23 firing_ = state;
24 log_info("set firing to {}",state);
25}
26
27roboctrl::awaitable<void> shoot::task()
28{
29 while(true){
30 if(roboctrl::get<robot>().state() == robot_state::NoForce){
31 co_await device::set_motor<device::dji_motor>("left_friction", 0);
32 co_await device::set_motor<device::dji_motor>("right_friction", 0);
33 co_await device::set_motor<device::dji_motor>("trigger", 0);
34 }
35
36 friction_ramp_.update(firing_ ? info_.friction_max_speed : .0f);
37
38 co_await device::set_motor<device::dji_motor>("left_friction", -friction_ramp_.state());
39 co_await device::set_motor<device::dji_motor>("right_friction", friction_ramp_.state());
40
41 co_await roboctrl::wait_for(1ms);
42 }
43}
异步任务上下文组件。
void log_info(std::format_string< Args... > fmt, Args &&...args) const
输出info日志
Definition logger.h:214
一阶斜坡控制器 (Ramp)
Definition ramp.hpp:38
state_type state() const noexcept
获取当前输出状态
Definition ramp.hpp:114
void update(T target) noexcept
更新输出值
Definition ramp.hpp:76
电机基础组件。
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