21
21
22
22
TEST (TestSmoothStop, calculate_stopping_acceleration)
23
23
{
24
+ using ::autoware::motion::control::pid_longitudinal_controller::DebugValues;
24
25
using ::autoware::motion::control::pid_longitudinal_controller::SmoothStop;
25
26
using rclcpp::Duration ;
26
27
using rclcpp::Time;
@@ -40,9 +41,10 @@ TEST(TestSmoothStop, calculate_stopping_acceleration)
40
41
const double delay_time = 0.17 ;
41
42
42
43
SmoothStop ss;
44
+ DebugValues debug_values;
43
45
44
46
// Cannot calculate before setting parameters
45
- EXPECT_THROW (ss.calculate (0.0 , 0.0 , 0.0 , {}, delay_time), std::runtime_error);
47
+ EXPECT_THROW (ss.calculate (0.0 , 0.0 , 0.0 , {}, delay_time, debug_values ), std::runtime_error);
46
48
47
49
ss.setParams (
48
50
max_strong_acc, min_strong_acc, weak_acc, weak_stop_acc, strong_stop_acc, max_fast_vel,
@@ -62,54 +64,68 @@ TEST(TestSmoothStop, calculate_stopping_acceleration)
62
64
stop_dist = strong_stop_dist - 0.1 ;
63
65
current_vel = 2.0 ;
64
66
ss.init (vel_in_target, stop_dist);
65
- accel = ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time);
67
+ accel =
68
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
66
69
EXPECT_EQ (accel, strong_stop_acc);
70
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 3 );
67
71
68
72
// weak stop when the stop distance is below the threshold (but not bellow the strong_stop_dist)
69
73
stop_dist = weak_stop_dist - 0.1 ;
70
74
current_vel = 2.0 ;
71
75
ss.init (vel_in_target, stop_dist);
72
- accel = ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time);
76
+ accel =
77
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
73
78
EXPECT_EQ (accel, weak_stop_acc);
79
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 2 );
74
80
75
81
// if not running, weak accel for 0.5 seconds after the previous init or previous weak_acc
76
82
rclcpp::Rate rate_quart (1.0 / 0.25 );
77
83
rclcpp::Rate rate_half (1.0 / 0.5 );
78
84
stop_dist = 0.0 ;
79
85
current_vel = 0.0 ;
80
- EXPECT_EQ (
81
- ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time), weak_acc);
86
+ accel =
87
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
88
+ EXPECT_EQ (accel, weak_acc);
89
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 1 );
82
90
rate_quart.sleep ();
83
- EXPECT_EQ (
84
- ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time), weak_acc);
91
+ accel =
92
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
93
+ EXPECT_EQ (accel, weak_acc);
94
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 1 );
85
95
rate_half.sleep ();
86
- EXPECT_NE (
87
- ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time), weak_acc);
96
+ accel =
97
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
98
+ EXPECT_NE (accel, weak_acc);
99
+ EXPECT_NE (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 1 );
88
100
89
101
// strong stop when the car is not running (and is at least 0.5seconds after initialization)
90
- EXPECT_EQ (
91
- ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time),
92
- strong_stop_acc);
102
+ accel =
103
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
104
+ EXPECT_EQ (accel, strong_stop_acc);
105
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 3 );
93
106
94
107
// accel between min/max_strong_acc when the car is running:
95
108
// not predicted to exceed the stop line and is predicted to stop after weak_stop_time + delay
96
109
stop_dist = 1.0 ;
97
110
current_vel = 1.0 ;
98
111
vel_in_target = 1.0 ;
99
112
ss.init (vel_in_target, stop_dist);
100
- EXPECT_EQ (
101
- ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time),
102
- max_strong_acc);
113
+ accel =
114
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
115
+ EXPECT_EQ (accel, max_strong_acc);
116
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 0 );
103
117
104
118
vel_in_target = std::sqrt (2.0 );
105
119
ss.init (vel_in_target, stop_dist);
106
- EXPECT_EQ (
107
- ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time),
108
- min_strong_acc);
120
+ accel =
121
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
122
+ EXPECT_EQ (accel, min_strong_acc);
123
+ EXPECT_EQ (debug_values.getValue (DebugValues::TYPE::SMOOTH_STOP_MODE), 0 );
109
124
110
125
for (double vel_in_target = 1.1 ; vel_in_target < std::sqrt (2.0 ); vel_in_target += 0.1 ) {
111
126
ss.init (vel_in_target, stop_dist);
112
- accel = ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time);
127
+ accel =
128
+ ss.calculate (stop_dist, current_vel, current_acc, velocity_history, delay_time, debug_values);
113
129
EXPECT_GT (accel, min_strong_acc);
114
130
EXPECT_LT (accel, max_strong_acc);
115
131
}
0 commit comments