calculate and return the chassis.
164 {
165 chassis_.Clear();
166
168
169
170
171
172
173
175 chassis_.set_error_code(chassis_error_code());
176
177
178 chassis_.set_engine_started(true);
179
180
181
182 if (chassis_detail.has_wheelspeed_report_506()) {
183 if (chassis_detail.wheelspeed_report_506().has_rr()) {
184 chassis_.mutable_wheel_speed()->set_wheel_spd_rr(
185 chassis_detail.wheelspeed_report_506().rr());
186 }
187 if (chassis_detail.wheelspeed_report_506().has_rl()) {
188 chassis_.mutable_wheel_speed()->set_wheel_spd_rl(
189 chassis_detail.wheelspeed_report_506().rl());
190 }
191 if (chassis_detail.wheelspeed_report_506().has_fr()) {
192 chassis_.mutable_wheel_speed()->set_wheel_spd_fr(
193 chassis_detail.wheelspeed_report_506().fr());
194 }
195 if (chassis_detail.wheelspeed_report_506().has_fl()) {
196 chassis_.mutable_wheel_speed()->set_wheel_spd_fl(
197 chassis_detail.wheelspeed_report_506().fl());
198 }
199 }
200
201 if (chassis_detail.has_vcu_report_505() &&
202 chassis_detail.vcu_report_505().has_speed()) {
203 chassis_.set_speed_mps(
204 std::abs(static_cast<float>(chassis_detail.vcu_report_505().speed())));
205 } else {
206 chassis_.set_speed_mps(0);
207 }
208
209
210
211
212
213 if (chassis_detail.has_throttle_report_500() &&
214 chassis_detail.throttle_report_500().has_throttle_pedal_actual()) {
215 chassis_.set_throttle_percentage(static_cast<float>(
216 chassis_detail.throttle_report_500().throttle_pedal_actual()));
217 } else {
218 chassis_.set_throttle_percentage(0);
219 }
220
221 if (chassis_detail.has_throttle_command_100() &&
222 chassis_detail.throttle_command_100().has_throttle_pedal_target()) {
223 chassis_.set_throttle_percentage_cmd(static_cast<float>(
224 chassis_detail.throttle_command_100().throttle_pedal_target()));
225 } else {
226 chassis_.set_throttle_percentage_cmd(0);
227 }
228
229 if (chassis_detail.has_brake_report_501() &&
230 chassis_detail.brake_report_501().has_brake_pedal_actual()) {
231 chassis_.set_brake_percentage(static_cast<float>(
232 chassis_detail.brake_report_501().brake_pedal_actual()));
233 } else {
234 chassis_.set_brake_percentage(0);
235 }
236
237 if (chassis_detail.has_brake_command_101() &&
238 chassis_detail.brake_command_101().has_brake_pedal_target()) {
239 chassis_.set_brake_percentage_cmd(static_cast<float>(
240 chassis_detail.brake_command_101().brake_pedal_target()));
241 } else {
242 chassis_.set_brake_percentage_cmd(0);
243 }
244
245 if (chassis_detail.has_gear_report_503() &&
246 chassis_detail.gear_report_503().has_gear_actual()) {
248
249 if (chassis_detail.gear_report_503().gear_actual() ==
252 }
253 if (chassis_detail.gear_report_503().gear_actual() ==
256 }
257 if (chassis_detail.gear_report_503().gear_actual() ==
260 }
261 if (chassis_detail.gear_report_503().gear_actual() ==
264 }
265 if (chassis_detail.gear_report_503().gear_actual() ==
268 }
269 chassis_.set_gear_location(gear_pos);
270 } else {
272 }
273
274 if (chassis_detail.has_steering_report_502() &&
275 chassis_detail.steering_report_502().has_steer_angle_actual()) {
276 chassis_.set_steering_percentage(static_cast<float>(
277 chassis_detail.steering_report_502().steer_angle_actual() * 100.0 /
279 } else {
280 chassis_.set_steering_percentage(0);
281 }
282
283 if (chassis_detail.has_steering_command_102() &&
284 chassis_detail.steering_command_102().has_steer_angle_target()) {
285 chassis_.set_steering_percentage_cmd(static_cast<float>(
286 chassis_detail.steering_command_102().steer_angle_target()));
287 } else {
288 chassis_.set_steering_percentage_cmd(0);
289 }
290
291 if (chassis_detail.has_park_report_504() &&
292 chassis_detail.park_report_504().has_parking_actual()) {
293 if (chassis_detail.park_report_504().parking_actual() ==
295 chassis_.set_parking_brake(true);
296 } else {
297 chassis_.set_parking_brake(false);
298 }
299 } else {
300 chassis_.set_parking_brake(false);
301 }
302
303 if (chassis_detail.has_bms_report_512() &&
304 chassis_detail.bms_report_512().has_battery_soc_percentage()) {
305 chassis_.set_battery_soc_percentage(
306 chassis_detail.bms_report_512().battery_soc_percentage());
307
308 if (chassis_detail.bms_report_512().is_battery_soc_low()) {
309 chassis_.mutable_engage_advice()->set_advice(
311 chassis_.mutable_engage_advice()->set_reason(
312 "Battery soc percentage is lower than 15%, please charge it "
313 "quickly!");
314 }
315 } else {
316 chassis_.set_battery_soc_percentage(0);
317 }
318
319
320
321
322 if (chassis_detail.has_ultr_sensor_1_507()) {
323 chassis_.mutable_surround()->set_sonar08(
324 chassis_detail.ultr_sensor_1_507().uiuss8_tof_direct());
325 chassis_.mutable_surround()->set_sonar09(
326 chassis_detail.ultr_sensor_1_507().uiuss9_tof_direct());
327 chassis_.mutable_surround()->set_sonar10(
328 chassis_detail.ultr_sensor_1_507().uiuss10_tof_direct());
329 chassis_.mutable_surround()->set_sonar11(
330 chassis_detail.ultr_sensor_1_507().uiuss11_tof_direct());
331 } else {
332 chassis_.mutable_surround()->set_sonar08(0);
333 chassis_.mutable_surround()->set_sonar09(0);
334 chassis_.mutable_surround()->set_sonar10(0);
335 chassis_.mutable_surround()->set_sonar11(0);
336 }
337
338 if (chassis_detail.has_ultr_sensor_3_509()) {
339 chassis_.mutable_surround()->set_sonar02(
340 chassis_detail.ultr_sensor_3_509().uiuss2_tof_direct());
341 chassis_.mutable_surround()->set_sonar03(
342 chassis_detail.ultr_sensor_3_509().uiuss3_tof_direct());
343 chassis_.mutable_surround()->set_sonar04(
344 chassis_detail.ultr_sensor_3_509().uiuss4_tof_direct());
345 chassis_.mutable_surround()->set_sonar05(
346 chassis_detail.ultr_sensor_3_509().uiuss5_tof_direct());
347 } else {
348 chassis_.mutable_surround()->set_sonar02(0);
349 chassis_.mutable_surround()->set_sonar03(0);
350 chassis_.mutable_surround()->set_sonar04(0);
351 chassis_.mutable_surround()->set_sonar05(0);
352 }
353
354 if (chassis_detail.has_ultr_sensor_5_511()) {
355 chassis_.mutable_surround()->set_sonar00(
356 chassis_detail.ultr_sensor_5_511().uiuss0_tof_direct());
357 chassis_.mutable_surround()->set_sonar01(
358 chassis_detail.ultr_sensor_5_511().uiuss1_tof_direct());
359 chassis_.mutable_surround()->set_sonar06(
360 chassis_detail.ultr_sensor_5_511().uiuss6_tof_direct());
361 chassis_.mutable_surround()->set_sonar07(
362 chassis_detail.ultr_sensor_5_511().uiuss7_tof_direct());
363 } else {
364 chassis_.mutable_surround()->set_sonar00(0);
365 chassis_.mutable_surround()->set_sonar01(0);
366 chassis_.mutable_surround()->set_sonar06(0);
367 chassis_.mutable_surround()->set_sonar07(0);
368 }
369
370
371
372 std::string vin = "";
373 if (chassis_detail.has_vin_resp1_514()) {
374 Vin_resp1_514 vin_resp1_514 = chassis_detail.vin_resp1_514();
375 vin += vin_resp1_514.vin00();
376 vin += vin_resp1_514.vin01();
377 vin += vin_resp1_514.vin02();
378 vin += vin_resp1_514.vin03();
379 vin += vin_resp1_514.vin04();
380 vin += vin_resp1_514.vin05();
381 vin += vin_resp1_514.vin06();
382 vin += vin_resp1_514.vin07();
383 }
384 if (chassis_detail.has_vin_resp2_515()) {
385 Vin_resp2_515 vin_resp2_515 = chassis_detail.vin_resp2_515();
386 vin += vin_resp2_515.vin08();
387 vin += vin_resp2_515.vin09();
388 vin += vin_resp2_515.vin10();
389 vin += vin_resp2_515.vin11();
390 vin += vin_resp2_515.vin12();
391 vin += vin_resp2_515.vin13();
392 vin += vin_resp2_515.vin14();
393 vin += vin_resp2_515.vin15();
394 }
395 if (chassis_detail.has_vin_resp3_516()) {
396 Vin_resp3_516 vin_resp3_516 = chassis_detail.vin_resp3_516();
397 vin += vin_resp3_516.vin16();
398 }
399 std::reverse(vin.begin(), vin.end());
400 chassis_.mutable_vehicle_id()->set_vin(vin);
401
402 if (chassis_detail.has_vcu_report_505() &&
403 chassis_detail.vcu_report_505().has_frontcrash_state()) {
404 if (chassis_detail.vcu_report_505().frontcrash_state() ==
407 } else {
409 }
410 } else {
412 }
413
414 if (chassis_detail.has_vcu_report_505() &&
415 chassis_detail.vcu_report_505().has_backcrash_state()) {
416 if (chassis_detail.vcu_report_505().backcrash_state() ==
419 } else {
421 }
422 } else {
424 }
425
426
427 if (chassis_detail.has_brake_report_501() &&
428 chassis_detail.brake_report_501().has_brake_en_state()) {
429 chassis_.mutable_check_response()->set_is_esp_online(
430 chassis_detail.brake_report_501().brake_en_state() == 1);
431 }
432 if (chassis_detail.has_steering_report_502() &&
433 chassis_detail.steering_report_502().has_steer_en_state()) {
434 chassis_.mutable_check_response()->set_is_eps_online(
435 chassis_detail.steering_report_502().steer_en_state() == 1);
436 }
437 if (chassis_detail.has_throttle_report_500() &&
438 chassis_detail.throttle_report_500().has_throttle_en_state()) {
439 chassis_.mutable_check_response()->set_is_vcu_online(
440 chassis_detail.throttle_report_500().throttle_en_state() == 1);
441 }
442
443 if (CheckChassisError()) {
444 chassis_.mutable_engage_advice()->set_advice(
446 chassis_.mutable_engage_advice()->set_reason(
447 "Chassis has some fault, please check the chassis_detail.");
448 }
449
450
452 chassis_.mutable_engage_advice()->set_advice(
454 chassis_.mutable_engage_advice()->set_reason(
455 "devkit chassis detail is lost! Please check the communication error.");
458 }
459
460 return chassis_;
461}
common::VehicleParam vehicle_params_
virtual void set_driving_mode(const Chassis::DrivingMode &driving_mode)
bool is_chassis_communication_error_
virtual ::apollo::canbus::Devkit GetNewRecvChassisDetail()
virtual Chassis::DrivingMode driving_mode()
@ PARKING_ACTUAL_PARKING_TRIGGER
@ BACKCRASH_STATE_CRASH_EVENT
@ FRONTCRASH_STATE_CRASH_EVENT
optional double max_steer_angle