GKD.RoboCtrl
RoboMaster Linux 电控:异步 IO、设备驱动与机器人控制
载入中...
搜索中...
未找到
power_feedback.cpp
1#include "ctrl/power_manager.h"
2
3#include <algorithm>
4#include <cmath>
5
6#include "device/referee/referee.h"
7#include "device/super_cap.h"
8
9namespace roboctrl::ctrl {
10
12 bool output_allowed, float dt_seconds) {
13 power_feedback feedback;
14 auto& cap = roboctrl::get<device::super_cap>();
15 if (cap.configured() && !cap.offline() && cap.error_code() == 0) {
16 feedback.cap_online = true;
17 feedback.cap_power_limit = cap.chassis_power_limit();
18 feedback.cap_energy = cap.energy();
19 feedback.measured_power = cap.chassis_power();
20 feedback.measurement_sequence = cap.sample_sequence();
21 }
22 auto& referee = roboctrl::get<device::referee>();
23 if (referee.configured() && !referee.offline()) {
24 const auto now = device::referee_protocol::clock::now();
25 const auto& data = referee.data();
26 feedback.referee_online = data.robot.fresh(now, referee.timeout());
27 if (feedback.referee_online) {
28 feedback.referee_power_limit = data.robot.value.chassis_power_limit;
29 output_allowed = output_allowed && data.robot.value.chassis_power;
30 }
31 feedback.buffer_online = data.power.fresh(now, referee.timeout());
32 if (feedback.buffer_online) feedback.buffer_energy = data.power.value.buffer_energy;
33 }
34 update(chassis, feedback, output_allowed, dt_seconds);
35 if (cap.configured()) {
36 // The cap's input limit follows the referee limit; chassis boost is a
37 // separate discharge budget and must never raise the charging limit.
38 const float source_limit = feedback.referee_online && feedback.referee_power_limit >= 0.0f
39 ? feedback.referee_power_limit : info_.offline_power_limit;
40 const auto limit = static_cast<std::uint16_t>(std::clamp(source_limit, 0.0f, 65535.0f));
41 co_await cap.set(enabled() && output_allowed && !status_.motor_fault, limit);
42 }
43}
44
45} // namespace roboctrl::ctrl
void update(device::chassis_base &chassis, const power_feedback &feedback, bool output_allowed, float dt_seconds)
底盘的统一控制接口。
Definition base.hpp:23
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:46