Skip to content

Commit ae64cf9

Browse files
authored
Merge pull request #72 from xrobot-org/dev
Dev
2 parents 1886926 + 34db46b commit ae64cf9

File tree

16 files changed

+728
-1259
lines changed

16 files changed

+728
-1259
lines changed

hw/bsp/rm-c/config/engineer.config

-109
This file was deleted.

src/module/engineer_chassis/mod_engineer_chassis.cpp

+6-96
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
*
1010
*/
1111

12+
#include "mod_engineer_chassis.hpp"
13+
1214
#include <random>
1315

1416
#include "bsp_time.h"
15-
#include "mod_chassis.hpp"
1617

1718
#define ROTOR_WZ_MIN 0.6f /* 小陀螺旋转位移下界 */
1819
#define ROTOR_WZ_MAX 0.8f /* 小陀螺旋转位移上界 */
@@ -21,31 +22,13 @@
2122

2223
#define MOTOR_MAX_ROTATIONAL_SPEED 7000.0f /* 电机的最大转速 */
2324

24-
#if POWER_LIMIT_WITH_CAP
25-
/* 保证电容电量宏定义在正确范围内 */
26-
#if ((CAP_PERCENT_NO_LIM < 0) || (CAP_PERCENT_NO_LIM > 100) || \
27-
(CAP_PERCENT_WORK < 0) || (CAP_PERCENT_WORK > 100))
28-
#error "Cap percentage should be in the range from 0 to 100."
29-
#endif
30-
31-
/* 保证电容功率宏定义在正确范围内 */
32-
#if ((CAP_MAX_LOAD < 60) || (CAP_MAX_LOAD > 200))
33-
#error "The capacitor power should be in in the range from 60 to 200."
34-
#endif
35-
36-
static const float kCAP_PERCENTAGE_NO_LIM = (float)CAP_PERCENT_NO_LIM / 100.0f;
37-
static const float kCAP_PERCENTAGE_WORK = (float)CAP_PERCENT_WORK / 100.0f;
38-
39-
#endif
40-
4125
using namespace Module;
4226

4327
template <typename Motor, typename MotorParam>
4428
Chassis<Motor, MotorParam>::Chassis(Param& param, float control_freq)
4529
: param_(param),
4630
mode_(Chassis::RELAX),
4731
mixer_(param.type),
48-
follow_pid_(param.follow_pid_param, control_freq),
4932
ctrl_lock_(true) {
5033
memset(&(this->cmd_), 0, sizeof(this->cmd_));
5134

@@ -70,12 +53,6 @@ Chassis<Motor, MotorParam>::Chassis(Param& param, float control_freq)
7053
case SET_MODE_RELAX:
7154
chassis->SetMode(RELAX);
7255
break;
73-
case SET_MODE_FOLLOW:
74-
chassis->SetMode(FOLLOW_GIMBAL);
75-
break;
76-
case SET_MODE_ROTOR:
77-
chassis->SetMode(ROTOR);
78-
break;
7956
case SET_MODE_INDENPENDENT:
8057
chassis->SetMode(INDENPENDENT);
8158
break;
@@ -95,26 +72,24 @@ Chassis<Motor, MotorParam>::Chassis(Param& param, float control_freq)
9572
auto chassis_thread = [](Chassis* chassis) {
9673
auto cmd_sub =
9774
Message::Subscriber<Component::CMD::ChassisCMD>("cmd_chassis");
98-
75+
uint32_t last_online_time = bsp_time_get_ms();
9976
while (1) {
10077
/* 读取控制指令、电容、裁判系统、电机反馈 */
10178
cmd_sub.DumpData(chassis->cmd_);
10279

10380
/* 更新反馈值 */
104-
chassis->PraseRef();
105-
10681
chassis->ctrl_lock_.Wait(UINT32_MAX);
10782
chassis->UpdateFeedback();
10883
chassis->Control();
10984
chassis->ctrl_lock_.Post();
11085

11186
/* 运行结束,等待下一次唤醒 */
112-
chassis->thread_.SleepUntil(2);
87+
chassis->thread_.SleepUntil(2, last_online_time);
11388
}
11489
};
11590

116-
this->thread_.Create(chassis_thread, this, "chassis_thread",
117-
MODULE_CHASSIS_TASK_STACK_DEPTH, System::Thread::MEDIUM);
91+
this->thread_.Create(chassis_thread, this, "chassis_thread", 512,
92+
System::Thread::MEDIUM);
11893

11994
System::Timer::Create(this->DrawUIStatic, this, 2100);
12095

@@ -152,16 +127,6 @@ void Chassis<Motor, MotorParam>::Control() {
152127
break;
153128

154129
case Chassis::RELAX:
155-
case Chassis::FOLLOW_GIMBAL: /* 按照云台方向换算运动向量
156-
*/
157-
case Chassis::ROTOR: {
158-
float beta = this->yaw_;
159-
float cos_beta = cosf(beta);
160-
float sin_beta = sinf(beta);
161-
this->move_vec_.vx = cos_beta * this->cmd_.x - sin_beta * this->cmd_.y;
162-
this->move_vec_.vy = sin_beta * this->cmd_.x + cos_beta * this->cmd_.y;
163-
break;
164-
}
165130
case Chassis::REVERSE: {
166131
this->move_vec_.vx = -this->cmd_.x;
167132
this->move_vec_.vy = -this->cmd_.y;
@@ -177,19 +142,6 @@ void Chassis<Motor, MotorParam>::Control() {
177142
case Chassis::INDENPENDENT: /* 独立模式wz为0 */
178143
this->move_vec_.wz = this->cmd_.z;
179144
break;
180-
181-
case Chassis::FOLLOW_GIMBAL: /* 跟随模式通过PID控制使车头跟随云台
182-
*/
183-
this->move_vec_.wz =
184-
this->follow_pid_.Calculate(0.0f, this->yaw_, this->dt_);
185-
break;
186-
187-
case Chassis::ROTOR: { /* 小陀螺模式使底盘以一定速度旋转
188-
*/
189-
this->move_vec_.wz =
190-
this->wz_dir_mult_ * CalcWz(ROTOR_WZ_MIN, ROTOR_WZ_MAX);
191-
break;
192-
}
193145
case Chassis::REVERSE: {
194146
this->move_vec_.wz = this->cmd_.z;
195147
break;
@@ -207,21 +159,8 @@ void Chassis<Motor, MotorParam>::Control() {
207159
/* 根据底盘模式计算输出值 */
208160
switch (this->mode_) {
209161
case Chassis::BREAK:
210-
case Chassis::FOLLOW_GIMBAL:
211-
case Chassis::ROTOR:
212162
case Chassis::REVERSE:
213163
case Chassis::INDENPENDENT: /* 独立模式,受PID控制 */ {
214-
float percentage = 0.0f;
215-
if (cap_.online_) {
216-
percentage = cap_.percentage_;
217-
} else if (ref_.status == Device::Referee::RUNNING) {
218-
percentage = this->ref_.chassis_pwr_buff / 30.0f;
219-
} else {
220-
percentage = 1.0f;
221-
}
222-
223-
clampf(&percentage, 0.0f, 1.0f);
224-
225164
for (unsigned i = 0; i < this->mixer_.len_; i++) {
226165
float out = this->actuator_[i]->Calculate(
227166
this->setpoint_.motor_rotational_speed[i] *
@@ -243,15 +182,6 @@ void Chassis<Motor, MotorParam>::Control() {
243182
}
244183
}
245184

246-
template <typename Motor, typename MotorParam>
247-
void Chassis<Motor, MotorParam>::PraseRef() {
248-
this->ref_.chassis_power_limit =
249-
this->raw_ref_.robot_status.chassis_power_limit;
250-
this->ref_.chassis_pwr_buff = this->raw_ref_.power_heat.chassis_pwr_buff;
251-
this->ref_.chassis_watt = this->raw_ref_.power_heat.chassis_watt;
252-
this->ref_.status = this->raw_ref_.status;
253-
}
254-
255185
template <typename Motor, typename MotorParam>
256186
float Chassis<Motor, MotorParam>::CalcWz(const float LO, const float HI) {
257187
float wz_vary = fabsf(0.2f * sinf(ROTOR_OMEGA * this->now_)) + LO;
@@ -265,10 +195,6 @@ void Chassis<Motor, MotorParam>::SetMode(Chassis::Mode mode) {
265195
return; /* 模式未改变直接返回 */
266196
}
267197

268-
if (mode == Chassis::ROTOR && this->mode_ != Chassis::ROTOR) {
269-
std::srand(this->now_);
270-
this->wz_dir_mult_ = (std::rand() % 2) ? -1 : 1;
271-
}
272198
/* 切换模式后重置PID和滤波器 */
273199
for (size_t i = 0; i < this->mixer_.len_; i++) {
274200
this->actuator_[i]->Reset();
@@ -294,14 +220,6 @@ void Chassis<Motor, MotorParam>::DrawUIStatic(
294220

295221
/* 更新底盘模式选择框 */
296222
switch (chassis->mode_) {
297-
case FOLLOW_GIMBAL:
298-
box_pos_left = REF_UI_MODE_OFFSET_2_LEFT;
299-
box_pos_right = REF_UI_MODE_OFFSET_2_RIGHT;
300-
break;
301-
case ROTOR:
302-
box_pos_left = REF_UI_MODE_OFFSET_4_LEFT;
303-
box_pos_right = REF_UI_MODE_OFFSET_4_RIGHT;
304-
break;
305223
case INDENPENDENT:
306224
box_pos_left = REF_UI_MODE_OFFSET_3_LEFT;
307225
box_pos_right = REF_UI_MODE_OFFSET_3_RIGHT;
@@ -342,14 +260,6 @@ void Chassis<Motor, MotorParam>::DrawUIDynamic(
342260

343261
/* 更新底盘模式选择框 */
344262
switch (chassis->mode_) {
345-
case FOLLOW_GIMBAL:
346-
box_pos_left = REF_UI_MODE_OFFSET_2_LEFT;
347-
box_pos_right = REF_UI_MODE_OFFSET_2_RIGHT;
348-
break;
349-
case ROTOR:
350-
box_pos_left = REF_UI_MODE_OFFSET_4_LEFT;
351-
box_pos_right = REF_UI_MODE_OFFSET_4_RIGHT;
352-
break;
353263
case RELAX:
354264

355265
case BREAK:

0 commit comments

Comments
 (0)