@@ -15,6 +15,9 @@ void update_sample(struct sample_t *sample, int sample_new);
15
15
int max_limit_check (int val , const int MAX );
16
16
int dist_to_meas_check (int val , int val_last , struct sample_t * val_meas ,
17
17
const int MAX_RATE_UP , const int MAX_RATE_DOWN , const int MAX_ERROR );
18
+ int driver_limit_check (int val , int val_last , struct sample_t * val_driver ,
19
+ const int MAX , const int MAX_RATE_UP , const int MAX_RATE_DOWN ,
20
+ const int MAX_ALLOWANCE , const int DRIVER_FACTOR );
18
21
int rt_rate_limit_check (int val , int val_last , const int MAX_RT_DELTA );
19
22
20
23
typedef void (* safety_hook_init )(int16_t param );
@@ -166,6 +169,28 @@ int dist_to_meas_check(int val, int val_last, struct sample_t *val_meas,
166
169
return (val < lowest_allowed_val ) || (val > highest_allowed_val );
167
170
}
168
171
172
+ // check that commanded value isn't fighting against driver
173
+ int driver_limit_check (int val , int val_last , struct sample_t * val_driver ,
174
+ const int MAX , const int MAX_RATE_UP , const int MAX_RATE_DOWN ,
175
+ const int MAX_ALLOWANCE , const int DRIVER_FACTOR ) {
176
+
177
+ int highest_allowed = max (val_last , 0 ) + MAX_RATE_UP ;
178
+ int lowest_allowed = min (val_last , 0 ) - MAX_RATE_UP ;
179
+
180
+ int driver_max_limit = MAX + (MAX_ALLOWANCE + val_driver -> max ) * DRIVER_FACTOR ;
181
+ int driver_min_limit = - MAX + (- MAX_ALLOWANCE + val_driver -> min ) * DRIVER_FACTOR ;
182
+
183
+ // if we've exceeded the applied torque, we must start moving toward 0
184
+ highest_allowed = min (highest_allowed , max (val_last - MAX_RATE_DOWN ,
185
+ max (driver_max_limit , 0 )));
186
+ lowest_allowed = max (lowest_allowed , min (val_last + MAX_RATE_DOWN ,
187
+ min (driver_min_limit , 0 )));
188
+
189
+ // check for violation
190
+ return (val < lowest_allowed ) || (val > highest_allowed );
191
+ }
192
+
193
+
169
194
// real time check, mainly used for steer torque rate limiter
170
195
int rt_rate_limit_check (int val , int val_last , const int MAX_RT_DELTA ) {
171
196
0 commit comments