@@ -123,12 +123,35 @@ class TaskControl : public VtdOmniSensor {
123
123
124
124
using VtdOmniSensor::process;
125
125
void process (RDB_DRIVER_CTRL_t* driver_ctrl) override {
126
- steering_wheel_speed_[driver_ctrl->playerId ] = driver_ctrl->steeringSpeed ;
126
+ // Steering speed at the front wheels [rad/s].
127
+ if (driver_ctrl->validityFlags & RDB_DRIVER_INPUT_VALIDITY_STEERING_SPEED) {
128
+ steering_wheel_speed_[driver_ctrl->playerId ] = driver_ctrl->steeringSpeed ;
129
+ } else {
130
+ vtd_logger ()->warn (" {}: steeringSpeed missing in RDB_DRIVER_CTRL_t" , this ->get_name ());
131
+ steering_wheel_speed_[driver_ctrl->playerId ] = 0.0 ;
132
+ }
133
+
134
+ // Longitudinal acceleration request [m/s2].
135
+ if (driver_ctrl->validityFlags & RDB_DRIVER_INPUT_VALIDITY_TGT_ACCEL) {
136
+ driver_request_accel_[driver_ctrl->playerId ] = driver_ctrl->accelTgt ;
137
+ } else {
138
+ vtd_logger ()->warn (" {}: accelTgt missing in RDB_DRIVER_CTRL_t" , this ->get_name ());
139
+ driver_request_accel_[driver_ctrl->playerId ] = 0.0 ;
140
+ }
141
+ // Steering request (angle at wheels) [rad].
142
+ if (driver_ctrl->validityFlags & RDB_DRIVER_INPUT_VALIDITY_TGT_STEERING) {
143
+ driver_request_steering_angle_[driver_ctrl->playerId ] = driver_ctrl->steeringTgt ;
144
+ } else {
145
+ vtd_logger ()->warn (" {}: steeringTgt missing in RDB_DRIVER_CTRL_t" , this ->get_name ());
146
+ driver_request_steering_angle_[driver_ctrl->playerId ] = 0.0 ;
147
+ }
127
148
}
128
149
129
150
void reset () override {
130
151
VtdOmniSensor::reset ();
131
152
steering_wheel_speed_.clear ();
153
+ driver_request_accel_.clear ();
154
+ driver_request_steering_angle_.clear ();
132
155
}
133
156
134
157
/* *
@@ -186,10 +209,36 @@ class TaskControl : public VtdOmniSensor {
186
209
}
187
210
188
211
/* *
189
- * Get steering wheel speed of vehicle with given id.
212
+ * Get steering speed at front wheels of vehicle with given id [rad/s] .
190
213
*/
191
214
double get_steering_wheel_speed (uint64_t id) const { return steering_wheel_speed_.at (id); }
192
215
216
+ /* *
217
+ * Get driver-requested longitudinal acceleration of vehicle with given id [m/s2].
218
+ */
219
+ double get_driver_request_acceleration (uint64_t id) const { return driver_request_accel_.at (id); }
220
+
221
+ /* *
222
+ * Check if driver-requested longitudinal acceleration has been set.
223
+ */
224
+ bool has_driver_request_acceleration (uint64_t id) {
225
+ return driver_request_accel_.find (id) != driver_request_accel_.end ();
226
+ }
227
+
228
+ /* *
229
+ * Get driver-requested steering angle (at wheels) of vehicle with given id [rad].
230
+ */
231
+ double get_driver_request_steering_angle (uint64_t id) const {
232
+ return driver_request_steering_angle_.at (id);
233
+ }
234
+
235
+ /* *
236
+ * Check if driver-requested steering_angle has been set.
237
+ */
238
+ bool has_driver_request_steering_angle (uint64_t id) {
239
+ return driver_request_steering_angle_.find (id) != driver_request_steering_angle_.end ();
240
+ }
241
+
193
242
friend void to_json (cloe::Json& j, const TaskControl& tc) {
194
243
j = cloe::Json{{" rdb_connection" , tc.rdb_ }};
195
244
}
@@ -198,6 +247,8 @@ class TaskControl : public VtdOmniSensor {
198
247
// / RDBHandler helps us conveniently construct RDB messages.
199
248
Framework::RDBHandler handler_;
200
249
std::map<int , double > steering_wheel_speed_;
250
+ std::map<int , double > driver_request_accel_;
251
+ std::map<int , double > driver_request_steering_angle_;
201
252
};
202
253
203
254
} // namespace vtd
0 commit comments