Apollo 10.0
自动驾驶开放平台
apollo::canbus::demo::DemoController类 参考final

#include <demo_controller.h>

类 apollo::canbus::demo::DemoController 继承关系图:
apollo::canbus::demo::DemoController 的协作图:

Public 成员函数

 DemoController ()
 
virtual ~DemoController ()
 
::apollo::common::ErrorCode Init (const VehicleParameter &params, CanSender<::apollo::canbus::Demo > *const can_sender, MessageManager<::apollo::canbus::Demo > *const message_manager) override
 
bool Start () override
 start the vehicle controller.
 
void Stop () override
 stop the vehicle controller.
 
Chassis chassis () override
 calculate and return the chassis.
 
void AddSendMessage () override
 add the sender message.
 
- Public 成员函数 继承自 apollo::canbus::VehicleController<::apollo::canbus::Demo >
virtual ~VehicleController ()=default
 
virtual common::ErrorCode Init (const VehicleParameter &params, CanSender< ::apollo::canbus::Demo > *const can_sender, MessageManager< ::apollo::canbus::Demo > *const message_manager)=0
 initialize the vehicle controller.
 
virtual common::ErrorCode Update (const control::ControlCommand &command)
 update the vehicle controller.
 
virtual common::ErrorCode Update (const external_command::ChassisCommand &command)
 
virtual common::ErrorCode SetDrivingMode (const Chassis::DrivingMode &driving_mode)
 set vehicle to appointed driving mode.
 
virtual bool CheckChassisCommunicationError ()
 
virtual ::apollo::canbus::Demo GetNewRecvChassisDetail ()
 
virtual ::apollo::canbus::Demo GetNewSenderChassisDetail ()
 
virtual Chassis::DrivingMode driving_mode ()
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::canbus::VehicleController<::apollo::canbus::Demo >
virtual void set_driving_mode (const Chassis::DrivingMode &driving_mode)
 
- Protected 属性 继承自 apollo::canbus::VehicleController<::apollo::canbus::Demo >
common::VehicleSignal last_chassis_command_
 
common::VehicleSignal last_control_command_
 
canbus::VehicleParameter params_
 
common::VehicleParam vehicle_params_
 
CanSender< ::apollo::canbus::Demo > * can_sender_
 
CanReceiver< ::apollo::canbus::Demo > * can_receiver_
 
MessageManager< ::apollo::canbus::Demo > * message_manager_
 
bool is_initialized_
 
Chassis::DrivingMode driving_mode_
 
bool is_reset_
 
std::mutex mode_mutex_
 
uint32_t lost_chassis_reveive_detail_count_
 
bool is_need_count_
 
size_t sender_data_size_previous_
 
int64_t start_time_
 
bool is_chassis_communication_error_
 

详细描述

在文件 demo_controller.h40 行定义.

构造及析构函数说明

◆ DemoController()

apollo::canbus::demo::DemoController::DemoController ( )
inline

在文件 demo_controller.h42 行定义.

42{}

◆ ~DemoController()

apollo::canbus::demo::DemoController::~DemoController ( )
virtual

在文件 demo_controller.cc135 行定义.

135{}

成员函数说明

◆ AddSendMessage()

void apollo::canbus::demo::DemoController::AddSendMessage ( )
overridevirtual

add the sender message.

重载 apollo::canbus::VehicleController<::apollo::canbus::Demo > .

在文件 demo_controller.cc45 行定义.

45 {
46 can_sender_->AddMessage(Brakecommand101::ID, brake_command_101_, false);
47 can_sender_->AddMessage(Gearcommand103::ID, gear_command_103_, false);
48 can_sender_->AddMessage(Parkcommand104::ID, park_command_104_, false);
49 can_sender_->AddMessage(Steeringcommand102::ID, steering_command_102_, false);
50 can_sender_->AddMessage(Throttlecommand100::ID, throttle_command_100_, false);
51 can_sender_->AddMessage(Vehiclemodecommand105::ID, vehicle_mode_command_105_,
52 false);
53}

◆ chassis()

Chassis apollo::canbus::demo::DemoController::chassis ( )
overridevirtual

calculate and return the chassis.

返回
a copy of chassis. Use copy here to avoid multi-thread issues.

实现了 apollo::canbus::VehicleController<::apollo::canbus::Demo >.

在文件 demo_controller.cc161 行定义.

161 {
162 chassis_.Clear();
163 Demo chassis_detail = GetNewRecvChassisDetail();
164
165 // 1, 2
166 // if (driving_mode() == Chassis::EMERGENCY_MODE) {
167 // set_chassis_error_code(Chassis::NO_ERROR);
168 // }
169 chassis_.set_driving_mode(driving_mode());
170 chassis_.set_error_code(chassis_error_code());
171
172 // 3
173 chassis_.set_engine_started(true);
174
175 // 4 chassis spd
176 if (chassis_detail.has_vcu_report_505() &&
177 chassis_detail.vcu_report_505().has_speed()) {
178 chassis_.set_speed_mps(
179 static_cast<float>(chassis_detail.vcu_report_505().speed()));
180 } else {
181 chassis_.set_speed_mps(0);
182 }
183
184 // 5 throttle
185 if (chassis_detail.has_throttle_report_500() &&
186 chassis_detail.throttle_report_500().has_throttle_pedal_actual()) {
187 chassis_.set_throttle_percentage(static_cast<float>(
188 chassis_detail.throttle_report_500().throttle_pedal_actual()));
189 } else {
190 chassis_.set_throttle_percentage(0);
191 }
192
193 // 6 brake
194 if (chassis_detail.has_brake_report_501() &&
195 chassis_detail.brake_report_501().has_brake_pedal_actual()) {
196 chassis_.set_brake_percentage(static_cast<float>(
197 chassis_detail.brake_report_501().brake_pedal_actual()));
198 } else {
199 chassis_.set_brake_percentage(0);
200 }
201
202 // 7 gear
203 if (chassis_detail.has_gear_report_503() &&
204 chassis_detail.gear_report_503().has_gear_actual()) {
206
207 if (chassis_detail.gear_report_503().gear_actual() ==
209 gear_pos = Chassis::GEAR_NEUTRAL;
210 }
211 if (chassis_detail.gear_report_503().gear_actual() ==
213 gear_pos = Chassis::GEAR_REVERSE;
214 }
215 if (chassis_detail.gear_report_503().gear_actual() ==
217 gear_pos = Chassis::GEAR_DRIVE;
218 }
219 if (chassis_detail.gear_report_503().gear_actual() ==
221 gear_pos = Chassis::GEAR_PARKING;
222 }
223
224 chassis_.set_gear_location(gear_pos);
225 } else {
226 chassis_.set_gear_location(Chassis::GEAR_NONE);
227 }
228
229 // 8 steer
230 if (chassis_detail.has_steering_report_502() &&
231 chassis_detail.steering_report_502().has_steer_angle_actual()) {
232 chassis_.set_steering_percentage(static_cast<float>(
233 chassis_detail.steering_report_502().steer_angle_actual() * 100.0 /
235 } else {
236 chassis_.set_steering_percentage(0);
237 }
238
239 // 9 checkresponse signal
240 // 9 checkresponse signal
241 // 9 checkresponse signal
242 if (chassis_detail.has_brake_report_501() &&
243 chassis_detail.brake_report_501().has_brake_en_state()) {
244 chassis_.mutable_check_response()->set_is_esp_online(
245 chassis_detail.brake_report_501().brake_en_state() == 1);
246 }
247
248 if (chassis_detail.has_steering_report_502() &&
249 chassis_detail.steering_report_502().has_steer_en_state()) {
250 chassis_.mutable_check_response()->set_is_eps_online(
251 chassis_detail.steering_report_502().steer_en_state() == 1);
252 }
253
254 if (chassis_detail.has_throttle_report_500() &&
255 chassis_detail.throttle_report_500().has_throttle_en_state()) {
256 chassis_.mutable_check_response()->set_is_vcu_online(
257 chassis_detail.throttle_report_500().throttle_en_state() == 1);
258 }
259
260 // check chassis error
261 if (CheckChassisError()) {
262 chassis_.mutable_engage_advice()->set_advice(
264 chassis_.mutable_engage_advice()->set_reason(
265 "Chassis has some fault, please check the chassis_detail.");
266 }
267
268 // check the chassis detail lost
270 chassis_.mutable_engage_advice()->set_advice(
272 chassis_.mutable_engage_advice()->set_reason(
273 "demo chassis detail is lost! Please check the communication error.");
274 set_chassis_error_code(Chassis::CHASSIS_CAN_LOST);
276 }
277
278 /* ADD YOUR OWN CAR CHASSIS OPERATION
279 // 14 battery soc
280 // 16 sonor list
281 // 17 set vin
282 // 18,19 bumper event
283 // 20 add checkresponse signal
284 */
285
286 return chassis_;
287}
virtual void set_driving_mode(const Chassis::DrivingMode &driving_mode)

◆ Init()

ErrorCode apollo::canbus::demo::DemoController::Init ( const VehicleParameter params,
CanSender<::apollo::canbus::Demo > *const  can_sender,
MessageManager<::apollo::canbus::Demo > *const  message_manager 
)
override

在文件 demo_controller.cc55 行定义.

58 {
59 if (is_initialized_) {
60 AINFO << "DemoController has already been initiated.";
61 return ErrorCode::CANBUS_ERROR;
62 }
63
64 vehicle_params_.CopyFrom(
65 common::VehicleConfigHelper::Instance()->GetConfig().vehicle_param());
66 params_.CopyFrom(params);
67 if (!params_.has_driving_mode()) {
68 AERROR << "Vehicle conf pb not set driving_mode.";
69 return ErrorCode::CANBUS_ERROR;
70 }
71
72 if (can_sender == nullptr) {
73 AERROR << "Canbus sender is null.";
74 return ErrorCode::CANBUS_ERROR;
75 }
76 can_sender_ = can_sender;
77
78 if (message_manager == nullptr) {
79 AERROR << "protocol manager is null.";
80 return ErrorCode::CANBUS_ERROR;
81 }
82 message_manager_ = message_manager;
83
84 // sender part
85 brake_command_101_ = dynamic_cast<Brakecommand101*>(
86 message_manager_->GetMutableProtocolDataById(Brakecommand101::ID));
87 if (brake_command_101_ == nullptr) {
88 AERROR << "Brakecommand101 does not exist in the DemoMessageManager!";
89 return ErrorCode::CANBUS_ERROR;
90 }
91
92 gear_command_103_ = dynamic_cast<Gearcommand103*>(
93 message_manager_->GetMutableProtocolDataById(Gearcommand103::ID));
94 if (gear_command_103_ == nullptr) {
95 AERROR << "Gearcommand103 does not exist in the DemoMessageManager!";
96 return ErrorCode::CANBUS_ERROR;
97 }
98
99 park_command_104_ = dynamic_cast<Parkcommand104*>(
100 message_manager_->GetMutableProtocolDataById(Parkcommand104::ID));
101 if (park_command_104_ == nullptr) {
102 AERROR << "Parkcommand104 does not exist in the DemoMessageManager!";
103 return ErrorCode::CANBUS_ERROR;
104 }
105
106 steering_command_102_ = dynamic_cast<Steeringcommand102*>(
107 message_manager_->GetMutableProtocolDataById(Steeringcommand102::ID));
108 if (steering_command_102_ == nullptr) {
109 AERROR << "Steeringcommand102 does not exist in the DemoMessageManager!";
110 return ErrorCode::CANBUS_ERROR;
111 }
112
113 throttle_command_100_ = dynamic_cast<Throttlecommand100*>(
114 message_manager_->GetMutableProtocolDataById(Throttlecommand100::ID));
115 if (throttle_command_100_ == nullptr) {
116 AERROR << "Throttlecommand100 does not exist in the DemoMessageManager!";
117 return ErrorCode::CANBUS_ERROR;
118 }
119
120 vehicle_mode_command_105_ = dynamic_cast<Vehiclemodecommand105*>(
121 message_manager_->GetMutableProtocolDataById(Vehiclemodecommand105::ID));
122 if (vehicle_mode_command_105_ == nullptr) {
123 AERROR << "Vehiclemodecommand105 does not exist in the DemoMessageManager!";
124 return ErrorCode::CANBUS_ERROR;
125 }
126
128
129 AINFO << "DemoController is initialized.";
130
131 is_initialized_ = true;
132 return ErrorCode::OK;
133}
MessageManager< ::apollo::canbus::Demo > * message_manager_
void AddSendMessage() override
add the sender message.
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42

◆ Start()

bool apollo::canbus::demo::DemoController::Start ( )
overridevirtual

start the vehicle controller.

返回
true if successfully started.

实现了 apollo::canbus::VehicleController<::apollo::canbus::Demo >.

在文件 demo_controller.cc137 行定义.

137 {
138 if (!is_initialized_) {
139 AERROR << "DemoController has NOT been initiated.";
140 return false;
141 }
142 const auto& update_func = [this] { SecurityDogThreadFunc(); };
143 thread_.reset(new std::thread(update_func));
144
145 return true;
146}

◆ Stop()

void apollo::canbus::demo::DemoController::Stop ( )
overridevirtual

stop the vehicle controller.

实现了 apollo::canbus::VehicleController<::apollo::canbus::Demo >.

在文件 demo_controller.cc148 行定义.

148 {
149 if (!is_initialized_) {
150 AERROR << "DemoController stops or starts improperly!";
151 return;
152 }
153
154 if (thread_ != nullptr && thread_->joinable()) {
155 thread_->join();
156 thread_.reset();
157 AINFO << "DemoController stopped.";
158 }
159}

该类的文档由以下文件生成: