8#ifndef PEDALS_SYSTEM_TEST
9#define PEDALS_SYSTEM_TEST
10#include <gtest/gtest.h>
18 float scale = 1.0f / (max - min);
19 return ((data - min) * scale);
28 params.min_sensor_pedal_1 = 90;
29 params.min_sensor_pedal_2 = 90;
30 params.max_sensor_pedal_1 = 4000;
31 params.max_sensor_pedal_2 = 4000;
32 params.activation_percentage = 0.25;
33 params.mechanical_activation_percentage = 0.4;
34 params.deadzone_margin = .03;
86 params.activation_percentage = 0.1;
87 params.mechanical_activation_percentage = 0.4;
110 AnalogConversion_s test_accel_good_val = {1010, 0.01, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
111 AnalogConversion_s test_brake_good_val = {1010, 0.01, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
112 auto data = pedals.
evaluate_pedals(test_accel_good_val, test_accel_good_val, test_brake_good_val, 1000);
113 data = pedals.
evaluate_pedals(test_accel_good_val, test_accel_good_val, test_brake_good_val, 1110);
114 return (!data.implausibilityExceededMaxDuration);
118TEST(PedalsSystemTesting, test_accel_and_brake_limits_plausibility)
123 AnalogConversion_s test_pedal_bad_val_min = {0, 0.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
124 AnalogConversion_s test_pedal_bad_val_max = {4000, 2.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
125 AnalogConversion_s test_pedal_good_val = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
127 std::vector<std::tuple<AnalogConversion_s, AnalogConversion_s>> pedal_pairs;
130 pedal_pairs.push_back({test_pedal_bad_val_min, test_pedal_bad_val_min});
131 pedal_pairs.push_back({test_pedal_bad_val_min, test_pedal_bad_val_max});
132 pedal_pairs.push_back({test_pedal_bad_val_max, test_pedal_bad_val_min});
133 pedal_pairs.push_back({test_pedal_bad_val_max, test_pedal_bad_val_max});
136 for (
auto pair : pedal_pairs)
138 auto p1 = std::get<0>(pair);
139 auto p2 = std::get<1>(pair);
141 EXPECT_TRUE(t_4_2_7);
145 EXPECT_TRUE(t_4_2_7);
151 EXPECT_FALSE(t_4_2_7);
155 EXPECT_FALSE(t_4_2_7);
159 for (
auto pair : pedal_pairs)
161 auto p1 = std::get<0>(pair);
162 auto p2 = std::get<1>(pair);
164 EXPECT_TRUE(t_4_3_4);
168 EXPECT_TRUE(t_4_3_4);
174TEST(PedalsSystemTesting, test_accel_and_brake_percentages_implausibility)
177 AnalogConversion_s test_pedal_pos_slope_val_not_pressed = {1000, 0.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
178 AnalogConversion_s test_pedal_neg_slope_val_not_pressed = {2000, 0.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
179 AnalogConversion_s test_pedal_val_half_pressed = {1500, 0.4, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
186 std::vector<std::tuple<AnalogConversion_s, AnalogConversion_s, bool>> pedal_pairs_w_expected_val;
189 pedal_pairs_w_expected_val.push_back({test_pedal_neg_slope_val_not_pressed, test_pedal_val_half_pressed,
true});
190 pedal_pairs_w_expected_val.push_back({test_pedal_val_half_pressed, test_pedal_pos_slope_val_not_pressed,
true});
191 pedal_pairs_w_expected_val.push_back({test_pedal_neg_slope_val_not_pressed, test_pedal_pos_slope_val_not_pressed,
false});
192 pedal_pairs_w_expected_val.push_back({test_pedal_val_half_pressed, test_pedal_val_half_pressed,
false});
194 for (
auto set : pedal_pairs_w_expected_val)
196 auto p1 = std::get<0>(set);
197 auto p2 = std::get<1>(set);
200 EXPECT_EQ(res, std::get<2>(set));
206 EXPECT_EQ(res, std::get<2>(set));
212TEST(PedalsSystemTesting, test_accel_and_brake_pressed_at_same_time_and_activation)
215 AnalogConversion_s test_pedal_val_half_pressed = {1500, 0.5, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
222 EXPECT_TRUE(
get_result_of_double_brake_test(pedals, test_pedal_val_half_pressed, test_pedal_val_half_pressed, test_pedal_val_half_pressed, test_pedal_val_half_pressed));
265 std::cout << conv1 <<
" " << conv2 <<
" " << convb << std::endl;
266 AnalogConversion_s accel1_data = {accel1, conv1, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
267 AnalogConversion_s accel2_data = {accel1, conv2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
268 AnalogConversion_s brake_data = {brake, convb, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
273TEST(PedalsSystemTesting, test_implausibility_duration)
275 AnalogConversion_s test_accel1_val = {2583, 0.37, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
276 AnalogConversion_s test_accel2_val = {1068, 1.00, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
281 auto data = pedals.
evaluate_pedals(test_accel1_val, test_accel1_val, test_brake_val, test_brake_val, 1000);
284 std::cout << data.brakePressed <<std::endl;
285 EXPECT_TRUE(data.brakeAndAccelPressedImplausibility);
286 EXPECT_TRUE(data.brakePressed);
287 EXPECT_FALSE(data.implausibilityExceededMaxDuration);
289 data = pedals.
evaluate_pedals(test_accel1_val, test_accel1_val, test_brake_val, test_brake_val, 1110);
290 EXPECT_TRUE(data.implausibilityExceededMaxDuration);
293 auto data2 = pedals.
evaluate_pedals(test_accel1_val, test_accel1_val, test_brake_val, 1000);
294 EXPECT_TRUE(data2.brakeAndAccelPressedImplausibility);
295 EXPECT_TRUE(data2.brakePressed);
296 EXPECT_FALSE(data2.implausibilityExceededMaxDuration);
298 data2 = pedals.
evaluate_pedals(test_accel1_val, test_accel1_val, test_brake_val, 1110);
299 EXPECT_TRUE(data2.implausibilityExceededMaxDuration);
303TEST(PedalsSystemTesting, implausibility_latching_until_accel_released_double_brake)
305 AnalogConversion_s test_accel1_val = {2583, 0.37, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
306 AnalogConversion_s test_accel2_val = {1068, 0.37, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
316 test_brake1_val.conversion = 0.0;
318 test_brake2_val.conversion = 0.0;
319 auto data = pedals.
evaluate_pedals(test_accel1_val, test_accel2_val, test_brake1_val, test_brake2_val, 1600);
321 EXPECT_TRUE(data.implausibilityExceededMaxDuration);
326 test_accel1_val.conversion = 0.0;
327 test_accel2_val.conversion = 0.0;
328 data = pedals.
evaluate_pedals(test_accel1_val, test_accel2_val, test_brake1_val, test_brake2_val, 1650);
330 std::cout << data.
accelImplausible <<
" " << data.brakeImplausible <<
" "<<std::endl;
331 EXPECT_FALSE(data.implausibilityExceededMaxDuration);
334TEST(PedalsSystemTesting, implausibility_latching_until_accel_released_single_brake)
339 AnalogConversion_s test_accel1_val = {2583, 0.37, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
340 AnalogConversion_s test_accel2_val = {1068, 0.37, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
349 test_brake_val.conversion = 0.0;
350 auto data2 = pedals2.
evaluate_pedals(test_accel1_val, test_accel2_val, test_brake_val, 1600);
352 EXPECT_TRUE(data2.implausibilityExceededMaxDuration);
357 test_accel1_val.conversion = 0.01;
358 test_accel2_val.conversion = 0.05;
359 data2 = pedals2.
evaluate_pedals(test_accel1_val, test_accel2_val, test_brake_val, 1710);
360 EXPECT_FALSE(data2.implausibilityExceededMaxDuration);
363TEST(PedalsSystemTesting, deadzone_removal_calc_double_brake_ped)
366 AnalogConversion_s test_pedal_good_val = {1010, 0.03, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
368 auto data = pedals.
evaluate_pedals(test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, 1000);
369 EXPECT_NEAR(data.accelPercent, 0, .001);
370 test_pedal_good_val.raw = 200;
371 test_pedal_good_val.conversion = 1.03;
372 data = pedals.
evaluate_pedals(test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, 1100);
373 EXPECT_NEAR(data.accelPercent, 1, .001);
374 test_pedal_good_val.raw = 1500;
375 test_pedal_good_val.conversion = 0.5;
376 data = pedals.
evaluate_pedals(test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, 1200);
377 EXPECT_NEAR(data.accelPercent, 0.5, .001);
380 AnalogConversion_s test_pedal_good_val_accel = {1050, 0.03, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
381 AnalogConversion_s test_pedal_good_val_brake = {1050, 0.03, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
382 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
383 EXPECT_NEAR(data.brakePercent, 0, .001);
384 test_pedal_good_val_brake.raw = 2059;
385 test_pedal_good_val_brake.conversion = 1.05;
386 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1400);
387 EXPECT_NEAR(data.brakePercent, 1, .001);
388 test_pedal_good_val_brake.raw = 1500;
389 test_pedal_good_val_brake.conversion = 0.5;
390 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1500);
391 EXPECT_NEAR(data.brakePercent, 0.5, .001);
394TEST(PedalsSystemTesting, deadzone_removal_calc_single_brake_ped)
397 AnalogConversion_s test_pedal_good_val = {1010, 0.03, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
399 auto data = pedals.
evaluate_pedals(test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, 1000);
400 EXPECT_NEAR(data.accelPercent, 0, .001);
401 test_pedal_good_val.raw = 2009;
402 test_pedal_good_val.conversion = 1.03;
403 data = pedals.
evaluate_pedals(test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, 1100);
404 EXPECT_NEAR(data.accelPercent, 1, .001);
405 test_pedal_good_val.raw = 1500;
406 test_pedal_good_val.conversion = 0.5;
407 data = pedals.
evaluate_pedals(test_pedal_good_val, test_pedal_good_val, test_pedal_good_val, 1200);
408 EXPECT_NEAR(data.accelPercent, 0.5, .001);
411 AnalogConversion_s test_pedal_good_val_accel = {1010, 0.03, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
412 AnalogConversion_s test_pedal_good_val_brake = {1010, 0.03, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
413 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1300);
414 EXPECT_NEAR(data.brakePercent, 0, .01);
415 test_pedal_good_val_brake.raw = 2059;
416 test_pedal_good_val_brake.conversion = 1.05;
417 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1400);
418 EXPECT_NEAR(data.brakePercent, 1, .001);
419 test_pedal_good_val_brake.raw = 1500;
420 test_pedal_good_val_brake.conversion = 0.5;
421 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1500);
422 EXPECT_NEAR(data.brakePercent, 0.5, .001);
426TEST(PedalsSystemTesting, brake_value_testing_double)
428 AnalogConversion_s test_pedal_good_val_accel = {1050, 0.05, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
429 AnalogConversion_s test_pedal_good_val_brake = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
432 params.deadzone_margin = 0;
434 auto data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
435 EXPECT_NEAR(data.brakePercent, 0.2, .02);
436 EXPECT_NEAR(data.regenPercent, 0.5, .02);
438 EXPECT_TRUE(data.brakePressed);
439 EXPECT_FALSE(data.mechBrakeActive);
441 test_pedal_good_val_brake.raw = 1400;
442 test_pedal_good_val_brake.conversion = .4;
443 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1500);
444 EXPECT_NEAR(data.brakePercent, 0.4, .03);
445 EXPECT_TRUE(data.brakePressed);
446 EXPECT_TRUE(data.mechBrakeActive);
447 EXPECT_NEAR(data.regenPercent, 1, .03);
452TEST(PedalsSystemTesting, brake_value_testing_single)
454 AnalogConversion_s test_pedal_good_val_accel = {1050, 0.05, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
455 AnalogConversion_s test_pedal_good_val_brake = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
458 params.deadzone_margin = 0;
460 auto data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1300);
461 EXPECT_NEAR(data.brakePercent, 0.2, .02);
462 EXPECT_NEAR(data.regenPercent, 0.5, .02);
464 EXPECT_TRUE(data.brakePressed);
465 EXPECT_FALSE(data.mechBrakeActive);
467 test_pedal_good_val_brake.raw = 1400;
468 test_pedal_good_val_brake.conversion = .4;
469 data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1500);
470 EXPECT_NEAR(data.brakePercent, 0.4, .03);
471 EXPECT_TRUE(data.brakePressed);
472 EXPECT_TRUE(data.mechBrakeActive);
473 EXPECT_NEAR(data.regenPercent, 1, .03);
476TEST(PedalsSystemTesting, check_accel_never_negative_single)
478 AnalogConversion_s test_pedal_good_val_accel = {930, -0.05, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
479 AnalogConversion_s test_pedal_good_val_brake = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
482 params.deadzone_margin = 0;
484 auto data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1300);
485 EXPECT_FALSE(data.accelImplausible);
486 EXPECT_EQ(data.accelPercent, 0);
490TEST(PedalsSystemTesting, check_accel_never_negative_double)
492 AnalogConversion_s test_pedal_good_val_accel = {930, -0.05, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
493 AnalogConversion_s test_pedal_good_val_brake = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
496 params.deadzone_margin = 0;
498 auto data = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
499 EXPECT_FALSE(data.accelImplausible);
500 EXPECT_EQ(data.accelPercent, 0);
504TEST(PedalsSystemTesting, check_accel_pressed)
506 AnalogConversion_s test_pedal_good_val_accel = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
507 AnalogConversion_s test_pedal_good_val_brake = {1001, 0.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
512 auto data_double = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
513 EXPECT_TRUE(data_double.accelPressed);
514 auto data_single = pedals_single.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_good_val_accel, test_pedal_good_val_brake, 1300);
515 EXPECT_TRUE(data_single.accelPressed);
518TEST(PedalsSystemTesting, check_accel_oor)
520 AnalogConversion_s test_pedal_oor_hi_val_accel = {40, 0.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
521 AnalogConversion_s test_pedal_oor_lo_val_accel = {4095, 1.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
522 AnalogConversion_s test_pedal_good_val_accel = {1200, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
523 AnalogConversion_s test_pedal_good_val_brake = {1001, 0.0, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
528 auto data_double_oor_hi = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_oor_hi_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
529 EXPECT_NEAR(data_double_oor_hi.accelPercent, 0, .001);
530 auto data_single_oor_hi = pedals_single.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_oor_hi_val_accel, test_pedal_good_val_brake, 1300);
531 EXPECT_NEAR(data_single_oor_hi.accelPercent, 0, .001);
532 auto data_double_oor_lo = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_oor_lo_val_accel, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
533 EXPECT_NEAR(data_double_oor_lo.accelPercent, 0, .001);
534 auto data_single_oor_lo = pedals_single.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_oor_lo_val_accel, test_pedal_good_val_brake, 1300);
535 EXPECT_NEAR(data_single_oor_lo.accelPercent, 0, .001);
538TEST(PedalsSystemTesting, check_accel1_implaus_fix)
541 AnalogConversion_s test_pedal_good_val_accel = {2152, 0.05, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
542 AnalogConversion_s test_pedal_implaus_1 = {1250, 0.2, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
543 AnalogConversion_s test_pedal_implaus_2 = {600, 0.5, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
544 AnalogConversion_s test_pedal_good_val_brake = {900, 0.02, AnalogSensorStatus_e::ANALOG_SENSOR_GOOD};
549 auto data_double_implause_1 = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_implaus_1, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
550 EXPECT_NEAR(data_double_implause_1.accelPercent, 0, .001);
551 auto data_single_implause_1 = pedals_single.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_implaus_1, test_pedal_good_val_brake, 1300);
552 EXPECT_NEAR(data_single_implause_1.accelPercent, 0, .001);
553 auto data_double_implause_2 = pedals.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_implaus_2, test_pedal_good_val_brake, test_pedal_good_val_brake, 1300);
554 EXPECT_NEAR(data_double_implause_2.accelPercent, 0, .001);
555 auto data_single_implause_2 = pedals_single.
evaluate_pedals(test_pedal_good_val_accel, test_pedal_implaus_2, test_pedal_good_val_brake, 1300);
556 EXPECT_NEAR(data_single_implause_2.accelPercent, 0, .001);
const int BRAKE2_PEDAL_OOR_MIN
const int ACCEL1_PEDAL_MIN
const int BRAKE1_PEDAL_MAX
const int BRAKE2_PEDAL_MIN
const float DEFAULT_PEDAL_IMPLAUSIBILITY_MARGIN
const int BRAKE1_PEDAL_MIN
const int ACCEL1_PEDAL_MAX
const float BRAKE_ACTIVATION_PERCENTAGE
const int ACCEL2_PEDAL_OOR_MIN
const int ACCEL2_PEDAL_MIN
const int BRAKE1_PEDAL_OOR_MIN
const int ACCEL2_PEDAL_MAX
const int ACCEL1_PEDAL_OOR_MAX
const float DEFAULT_PEDAL_DEADZONE
const float APPS_ACTIVATION_PERCENTAGE
const int ACCEL2_PEDAL_OOR_MAX
const int ACCEL1_PEDAL_OOR_MIN
const float BRAKE_MECH_THRESH
const int BRAKE2_PEDAL_MAX
const int BRAKE2_PEDAL_OOR_MAX
const int BRAKE1_PEDAL_OOR_MAX
PedalsSystemData_s evaluate_pedals(const AnalogConversion_s &accel1, const AnalogConversion_s &accel2, const AnalogConversion_s &brake1, const AnalogConversion_s &brake2, unsigned long curr_time)
void setParams(const PedalsParams &accelParams, const PedalsParams &brakeParams)
ParameterInterface params
TEST(PedalsSystemTesting, test_accel_and_brake_limits_plausibility)
PedalsParams get_real_accel_pedal_params()
bool get_result_of_single_brake_test(PedalsSystem &pedals, const AnalogConversion_s &a1, const AnalogConversion_s &a2, const AnalogConversion_s &b1)
PedalsParams get_real_brake_pedal_params()
bool reset_pedals_system_implaus_time(PedalsSystem &pedals)
PedalsParams gen_positive_and_negative_slope_params()
PedalsParams gen_positive_slope_only_params()
bool get_result_of_double_brake_test(PedalsSystem &pedals, const AnalogConversion_s &a1, const AnalogConversion_s &a2, const AnalogConversion_s &b1, const AnalogConversion_s &b2)
float get_pedal_conversion_val(float min, float max, float data)
const PedalsParams accel_params
const PedalsParams brake_params
system interface struct that contains the data from the pedal system
bool implausibilityExceededMaxDuration