From 0088bc41b9e78897b57f66efff9a2fb9b768c9bd Mon Sep 17 00:00:00 2001 From: Qi Luo Date: Mon, 1 Jan 2018 20:49:35 -0800 Subject: [PATCH] Common & Canbus : Update drive state proto and publish from canbus (#2301) * Common : Update drive state proto * Canbus : publish drive state from canbus --- modules/canbus/proto/BUILD | 1 + modules/canbus/proto/chassis.proto | 5 ++++- .../canbus/vehicle/lincoln/lincoln_controller.cc | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/canbus/proto/BUILD b/modules/canbus/proto/BUILD index c28541faed..aadd709bf1 100644 --- a/modules/canbus/proto/BUILD +++ b/modules/canbus/proto/BUILD @@ -18,6 +18,7 @@ proto_library( deps = [ "//modules/common/proto:common_proto_lib", "//modules/common/proto:header_proto_lib", + "//modules/common/proto:drive_state_proto_lib", "//modules/common/proto:vehicle_signal_proto_lib", "//modules/drivers/canbus/proto:canbus_proto_lib", ], diff --git a/modules/canbus/proto/chassis.proto b/modules/canbus/proto/chassis.proto index c6dd83bf2d..bac5c843c2 100644 --- a/modules/canbus/proto/chassis.proto +++ b/modules/canbus/proto/chassis.proto @@ -4,8 +4,9 @@ package apollo.canbus; import "modules/common/proto/header.proto"; import "modules/common/proto/vehicle_signal.proto"; +import "modules/common/proto/drive_state.proto"; -// next id :28 +// next id :30 message Chassis { enum DrivingMode { COMPLETE_MANUAL = 0; // human drive @@ -91,6 +92,8 @@ message Chassis { // Only available for Lincoln now optional ChassisGPS chassis_gps = 28; + + optional apollo.common.EngageAdvice engage_advice = 29; } message ChassisGPS { diff --git a/modules/canbus/vehicle/lincoln/lincoln_controller.cc b/modules/canbus/vehicle/lincoln/lincoln_controller.cc index 3fa32a4e72..8034d3d9d6 100644 --- a/modules/canbus/vehicle/lincoln/lincoln_controller.cc +++ b/modules/canbus/vehicle/lincoln/lincoln_controller.cc @@ -298,13 +298,26 @@ Chassis LincolnController::chassis() { chassis_.mutable_chassis_gps()->set_gps_valid(false); } - // last vin number will be written into KVDB once. + // vin number will be written into KVDB once. if (chassis_detail.license().has_vin() && !received_vin_) { apollo::common::KVDB::Put("apollo:canbus:vin", chassis_detail.license().vin()); received_vin_ = true; } + // give engage_advice based on error_code and canbus feedback + if (!chassis_error_mask_ && !chassis_.parking_brake() && + (chassis_.steering_percentage() != 0.0) && + (chassis_.throttle_percentage() != 0.0) && + (chassis_.brake_percentage() != 0.0)) { + chassis_.mutable_engage_advice()->set_advice( + apollo::common::EngageAdvice::READY_TO_ENGAGE); + } else { + chassis_.mutable_engage_advice()->set_advice( + apollo::common::EngageAdvice::DISALLOW_ENGAGE); + chassis_.mutable_engage_advice()->set_reason( + "CANBUS not ready, firmware error or emergency button pressed!"); + } return chassis_; } -- GitLab