MCU
Loading...
Searching...
No Matches
drivebrain_controller_test.h
Go to the documentation of this file.
1#ifndef DRIVEBRAIN_CONTROLLER_TEST
2#define DRIVEBRAIN_CONTROLLER_TEST
4#include <DrivebrainData.h>
5#include <gtest/gtest.h>
6
8 float last_DB_receive_time_millis, float last_receive_time_millis,
9 ControllerMode_e current_control_mode,
10 unsigned long systick_millis, float brakePercent,
11 float accelPercent) {
13 data.last_receive_time_millis = last_receive_time_millis;
14 data.DB_prev_MCU_recv_millis = last_DB_receive_time_millis;
15 data.torque_limits_nm = {1, 1, 1, 1};
16 data.speed_setpoints_rpm = {1, 1, 1, 1};
17
18 SysTick_s systick;
19 systick.millis = systick_millis;
20 systick.micros = 1000;
21
22 TorqueControllerMuxStatus status = {};
23 status.active_controller_mode = current_control_mode;
24 PedalsSystemData_s pedals_data = {};
25 pedals_data.regenPercent = brakePercent;
26 pedals_data.accelPercent = accelPercent;
27 SharedCarState_s state(systick, {/*steering data*/}, {/*drivetrain_data*/},
28 {/*loadcell_data*/}, {/*raw_loadcell_data*/},
29 pedals_data, {}, data, status, {});
30 return controller->evaluate(state);
31}
32
33TEST(DrivebrainControllerTesting, signals_sent_within_range) {
34 DrivebrainController controller(10);
35 auto torque_controller_output_s =
36 runTick(&controller, 998, 1001, ControllerMode_e::MODE_4, 1002, 0.0f, 0.0f);
37 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 1);
38}
39
40TEST(DrivebrainControllerTesting, setpoint_too_latent_still_in_control) {
41 DrivebrainController controller(5);
42 auto torque_controller_output_s = runTick(
43 &controller, 800, 1006, ControllerMode_e::MODE_4, 1012, 1.0f, 0.0f);
44 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
45 EXPECT_FLOAT_EQ(torque_controller_output_s.command.inverter_torque_limit[0], PhysicalParameters::MAX_REGEN_TORQUE);
46}
47
48TEST(DrivebrainControllerTesting, failing_stay_failing) {
49 DrivebrainController controller(10);
50 auto torque_controller_output_s = runTick(
51 &controller, 200, 1011, ControllerMode_e::MODE_4, 1032, 0.01f, 0.0f);
52 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
53
54 torque_controller_output_s = runTick(
55 &controller, 200, 1033, ControllerMode_e::MODE_4, 1033, 0.01f, 0.0f);
56 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
57
58 torque_controller_output_s = runTick(
59 &controller, 400, 1034, ControllerMode_e::MODE_4, 1034, 0.01f, 0.0f);
60 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
61}
62
63TEST(DrivebrainControllerTesting, failing_in_control) {
64 DrivebrainController controller(10);
65 auto torque_controller_output_s = runTick(
66 &controller, 200, 1011, ControllerMode_e::MODE_4, 1032, 0.01f, 0.0f);
67 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
68
69 torque_controller_output_s = runTick(
70 &controller, 200, 1033, ControllerMode_e::MODE_4, 1033, 0.01f, 0.0f);
71 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
72
73 torque_controller_output_s = runTick(
74 &controller, 400, 1034, ControllerMode_e::MODE_4, 1034, 0.01f, 0.0f);
75 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
76
77 torque_controller_output_s = runTick(
78 &controller, 400, 1034, ControllerMode_e::MODE_4, 1034, 0.0f, 1.0f);
79 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 20000);
80 EXPECT_FLOAT_EQ(torque_controller_output_s.command.inverter_torque_limit[0], PhysicalParameters::AMK_MAX_TORQUE);
81}
82
83TEST(DrivebrainControllerTesting, failing_reset_success) {
84 DrivebrainController controller(10);
85 auto torque_controller_output_s =
86 runTick(&controller, 300, 1011, ControllerMode_e::MODE_4, 1022, 0.01f, 0.0f);
87 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 0);
88
89 torque_controller_output_s =
90 runTick(&controller, 1020, 1021, ControllerMode_e::MODE_3, 1023, 0.01f, 0);
91 torque_controller_output_s =
92 runTick(&controller, 1022, 1022, ControllerMode_e::MODE_4, 1024, 0.01f, 0);
93 EXPECT_FLOAT_EQ(torque_controller_output_s.command.speeds_rpm[0], 1);
94}
95
96#endif
ControllerMode_e
Drivebrain Controller for fail-safe pass-through control of the car RESPONSIBILITIES AND DOCUMENTATIO...
TorqueControllerOutput_s evaluate(const SharedCarState_s &state)
evaluate function for running the business logic
TEST(DrivebrainControllerTesting, signals_sent_within_range)
auto runTick(DrivebrainController *controller, float last_DB_receive_time_millis, float last_receive_time_millis, ControllerMode_e current_control_mode, unsigned long systick_millis, float brakePercent, float accelPercent)
const float AMK_MAX_TORQUE
const float MAX_REGEN_TORQUE
int64_t last_receive_time_millis
the latest time that the MCU received a message w.r.t the current tick's millis
Definition: DrivebrainData.h:9
int64_t DB_prev_MCU_recv_millis
the latest MCU last_receive_time_millis that the drivebrain received
veh_vec< float > speed_setpoints_rpm
veh_vec< float > torque_limits_nm
car state struct that contains state of everything about the car including
packages TC Mux indicators: errors, mode, torque limit, bypass
ControllerMode_e active_controller_mode