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

#include <transit_controller.h>

类 apollo::canbus::transit::TransitController 继承关系图:
apollo::canbus::transit::TransitController 的协作图:

Public 成员函数

 TransitController ()
 
virtual ~TransitController ()
 
::apollo::common::ErrorCode Init (const VehicleParameter &params, CanSender<::apollo::canbus::Transit > *const can_sender, MessageManager<::apollo::canbus::Transit > *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.
 
 FRIEND_TEST (TransitControllerTest, SetDrivingMode)
 
 FRIEND_TEST (TransitControllerTest, Status)
 
 FRIEND_TEST (TransitControllerTest, UpdateDrivingMode)
 
- Public 成员函数 继承自 apollo::canbus::VehicleController<::apollo::canbus::Transit >
virtual ~VehicleController ()=default
 
virtual common::ErrorCode Init (const VehicleParameter &params, CanSender< ::apollo::canbus::Transit > *const can_sender, MessageManager< ::apollo::canbus::Transit > *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 void AddSendMessage ()
 
virtual ::apollo::canbus::Transit GetNewRecvChassisDetail ()
 
virtual ::apollo::canbus::Transit GetNewSenderChassisDetail ()
 
virtual Chassis::DrivingMode driving_mode ()
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::canbus::VehicleController<::apollo::canbus::Transit >
virtual void set_driving_mode (const Chassis::DrivingMode &driving_mode)
 
- Protected 属性 继承自 apollo::canbus::VehicleController<::apollo::canbus::Transit >
common::VehicleSignal last_chassis_command_
 
common::VehicleSignal last_control_command_
 
canbus::VehicleParameter params_
 
common::VehicleParam vehicle_params_
 
CanSender< ::apollo::canbus::Transit > * can_sender_
 
CanReceiver< ::apollo::canbus::Transit > * can_receiver_
 
MessageManager< ::apollo::canbus::Transit > * 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_
 

详细描述

在文件 transit_controller.h40 行定义.

构造及析构函数说明

◆ TransitController()

apollo::canbus::transit::TransitController::TransitController ( )
inline

在文件 transit_controller.h43 行定义.

43{}

◆ ~TransitController()

apollo::canbus::transit::TransitController::~TransitController ( )
virtual

在文件 transit_controller.cc136 行定义.

136{}

成员函数说明

◆ chassis()

Chassis apollo::canbus::transit::TransitController::chassis ( )
overridevirtual

calculate and return the chassis.

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

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

在文件 transit_controller.cc162 行定义.

162 {
163 chassis_.Clear();
164
165 Transit chassis_detail;
166 message_manager_->GetSensorData(&chassis_detail);
167
168 // 21, 22, previously 1, 2
170 set_chassis_error_code(Chassis::NO_ERROR);
171 }
172
173 chassis_.set_driving_mode(driving_mode());
174 chassis_.set_error_code(chassis_error_code());
175
176 // 3
177 chassis_.set_engine_started(true);
178
179 auto& motion20 = chassis_detail.llc_motionfeedback1_20();
180 if (motion20.has_llc_fbk_throttleposition()) {
181 chassis_.set_throttle_percentage(
182 static_cast<float>(motion20.llc_fbk_throttleposition()));
183 }
184
185 button_pressed_ = (chassis_detail.llc_motionfeedback1_20().llc_fbk_state() ==
187
188 if (motion20.has_llc_fbk_brakepercentrear()) {
189 // TODO(Udelv): fix scaling
190 chassis_.set_brake_percentage(
191 static_cast<float>(motion20.llc_fbk_brakepercentrear()));
192 }
193
194 if (motion20.has_llc_fbk_gear()) {
195 switch (motion20.llc_fbk_gear()) {
197 chassis_.set_gear_location(Chassis::GEAR_PARKING);
198 break;
200 chassis_.set_gear_location(Chassis::GEAR_DRIVE);
201 break;
203 chassis_.set_gear_location(Chassis::GEAR_NEUTRAL);
204 break;
206 chassis_.set_gear_location(Chassis::GEAR_REVERSE);
207 break;
208 default:
209 break;
210 }
211 }
212
213 auto& motion21 = chassis_detail.llc_motionfeedback2_21();
214 if (motion21.has_llc_fbk_vehiclespeed()) {
215 chassis_.set_speed_mps(static_cast<float>(motion21.llc_fbk_vehiclespeed()));
216 }
217
218 if (motion21.has_llc_fbk_steeringangle()) {
219 chassis_.set_steering_percentage(
220 static_cast<float>(-1.0 * motion21.llc_fbk_steeringangle() * M_PI /
221 180 / vehicle_params_.max_steer_angle() * 100));
222 }
223
224 auto& aux = chassis_detail.llc_auxiliaryfeedback_120();
225 if (aux.has_llc_fbk_turnsignal()) {
226 switch (aux.llc_fbk_turnsignal()) {
228 chassis_.mutable_signal()->set_turn_signal(
230 break;
232 chassis_.mutable_signal()->set_turn_signal(
234 break;
236 chassis_.mutable_signal()->set_turn_signal(
238 break;
239 default:
240 break;
241 }
242 }
243
244 return chassis_;
245}
MessageManager< ::apollo::canbus::Transit > * message_manager_

◆ FRIEND_TEST() [1/3]

apollo::canbus::transit::TransitController::FRIEND_TEST ( TransitControllerTest  ,
SetDrivingMode   
)

◆ FRIEND_TEST() [2/3]

apollo::canbus::transit::TransitController::FRIEND_TEST ( TransitControllerTest  ,
Status   
)

◆ FRIEND_TEST() [3/3]

apollo::canbus::transit::TransitController::FRIEND_TEST ( TransitControllerTest  ,
UpdateDrivingMode   
)

◆ Init()

ErrorCode apollo::canbus::transit::TransitController::Init ( const VehicleParameter params,
CanSender<::apollo::canbus::Transit > *const  can_sender,
MessageManager<::apollo::canbus::Transit > *const  message_manager 
)
override

在文件 transit_controller.cc45 行定义.

48 {
49 if (is_initialized_) {
50 AINFO << "TransitController has already been initialized.";
51 return ErrorCode::CANBUS_ERROR;
52 }
53
54 vehicle_params_.CopyFrom(
55 common::VehicleConfigHelper::Instance()->GetConfig().vehicle_param());
56
57 params_.CopyFrom(params);
58 if (!params_.has_driving_mode()) {
59 AERROR << "Vehicle conf pb not set driving_mode.";
60 return ErrorCode::CANBUS_ERROR;
61 }
62
63 if (can_sender == nullptr) {
64 AERROR << "Canbus sender is null.";
65 return ErrorCode::CANBUS_ERROR;
66 }
67 can_sender_ = can_sender;
68
69 if (message_manager == nullptr) {
70 AERROR << "protocol manager is null.";
71 return ErrorCode::CANBUS_ERROR;
72 }
73 message_manager_ = message_manager;
74
75 // sender part
76 adc_auxiliarycontrol_110_ = dynamic_cast<Adcauxiliarycontrol110*>(
77 message_manager_->GetMutableProtocolDataById(Adcauxiliarycontrol110::ID));
78 if (adc_auxiliarycontrol_110_ == nullptr) {
79 AERROR << "Adcauxiliarycontrol110 does not exist in the "
80 "TransitMessageManager!";
81 return ErrorCode::CANBUS_ERROR;
82 }
83
84 adc_motioncontrol1_10_ = dynamic_cast<Adcmotioncontrol110*>(
85 message_manager_->GetMutableProtocolDataById(Adcmotioncontrol110::ID));
86 if (adc_motioncontrol1_10_ == nullptr) {
87 AERROR
88 << "Adcmotioncontrol110 does not exist in the TransitMessageManager!";
89 return ErrorCode::CANBUS_ERROR;
90 }
91
92 adc_motioncontrollimits1_12_ = dynamic_cast<Adcmotioncontrollimits112*>(
93 message_manager_->GetMutableProtocolDataById(
95 if (adc_motioncontrollimits1_12_ == nullptr) {
96 AERROR << "Adcmotioncontrollimits112 does not exist in the "
97 "TransitMessageManager!";
98 return ErrorCode::CANBUS_ERROR;
99 }
100
101 llc_diag_brakecontrol_721_ = dynamic_cast<Llcdiagbrakecontrol721*>(
102 message_manager_->GetMutableProtocolDataById(Llcdiagbrakecontrol721::ID));
103 if (llc_diag_brakecontrol_721_ == nullptr) {
104 AERROR << "Llcdiagbrakecontrol721 does not exist in the "
105 "TransitMessageManager!";
106 return ErrorCode::CANBUS_ERROR;
107 }
108
109 llc_diag_steeringcontrol_722_ = dynamic_cast<Llcdiagsteeringcontrol722*>(
110 message_manager_->GetMutableProtocolDataById(
112 if (llc_diag_steeringcontrol_722_ == nullptr) {
113 AERROR << "Llcdiagsteeringcontrol722 does not exist in the "
114 "TransitMessageManager!";
115 return ErrorCode::CANBUS_ERROR;
116 }
117
118 can_sender_->AddMessage(Adcauxiliarycontrol110::ID, adc_auxiliarycontrol_110_,
119 false);
120 can_sender_->AddMessage(Adcmotioncontrol110::ID, adc_motioncontrol1_10_,
121 false);
123 adc_motioncontrollimits1_12_, false);
125 llc_diag_brakecontrol_721_, false);
127 llc_diag_steeringcontrol_722_, false);
128
129 // need sleep to ensure all messages received
130 AINFO << "TransitController is initialized.";
131
132 is_initialized_ = true;
133 return ErrorCode::OK;
134}
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42

◆ Start()

bool apollo::canbus::transit::TransitController::Start ( )
overridevirtual

start the vehicle controller.

返回
true if successfully started.

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

在文件 transit_controller.cc138 行定义.

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

◆ Stop()

void apollo::canbus::transit::TransitController::Stop ( )
overridevirtual

stop the vehicle controller.

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

在文件 transit_controller.cc149 行定义.

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

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