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

this class is inherited from AbstractVehicleFactory. 更多...

#include <lincoln_vehicle_factory.h>

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

Public 成员函数

virtual ~LincolnVehicleFactory ()=default
 destructor
 
bool Init (const CanbusConf *canbus_conf) override
 init vehicle factory
 
bool Start () override
 start canclient, cansender, canreceiver, vehicle controller
 
void Stop () override
 stop canclient, cansender, canreceiver, vehicle controller
 
void UpdateCommand (const apollo::control::ControlCommand *control_command) override
 update control command
 
void UpdateCommand (const apollo::external_command::ChassisCommand *chassis_command) override
 update chassis command
 
Chassis publish_chassis () override
 publish chassis messages
 
void PublishChassisDetail () override
 publish chassis for vehicle messages
 
- Public 成员函数 继承自 apollo::canbus::AbstractVehicleFactory
virtual ~AbstractVehicleFactory ()=default
 destructor
 
void SetVehicleParameter (const VehicleParameter &vehicle_paramter)
 set VehicleParameter.
 
virtual void PublishChassisDetailSender ()
 publish chassis for vehicle messages
 
virtual void UpdateHeartbeat ()
 create cansender heartbeat
 
virtual bool CheckChassisCommunicationFault ()
 check chassis detail communication fault
 
virtual void AddSendProtocol ()
 add send protocol message
 
virtual void ClearSendProtocol ()
 clear send protocol message, make a sender can error
 
virtual bool IsSendProtocolClear ()
 check send protocol message whether is clear or not
 
virtual Chassis::DrivingMode Driving_Mode ()
 get chassis driving mode
 

详细描述

this class is inherited from AbstractVehicleFactory.

It can be used to create controller and message manager for lincoln vehicle.

在文件 lincoln_vehicle_factory.h51 行定义.

构造及析构函数说明

◆ ~LincolnVehicleFactory()

virtual apollo::canbus::LincolnVehicleFactory::~LincolnVehicleFactory ( )
virtualdefault

destructor

成员函数说明

◆ Init()

bool apollo::canbus::LincolnVehicleFactory::Init ( const CanbusConf canbus_conf)
overridevirtual

init vehicle factory

返回
true if successfully initialized

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc34 行定义.

34 {
35 // Init can client
36 auto can_factory = CanClientFactory::Instance();
37 can_factory->RegisterCanClients();
38 can_client_ = can_factory->CreateCANClient(canbus_conf->can_card_parameter());
39 if (!can_client_) {
40 AERROR << "Failed to create can client.";
41 return false;
42 }
43 AINFO << "Can client is successfully created.";
44
45 message_manager_ = this->CreateMessageManager();
46 if (message_manager_ == nullptr) {
47 AERROR << "Failed to create message manager.";
48 return false;
49 }
50 AINFO << "Message manager is successfully created.";
51
52 if (can_receiver_.Init(can_client_.get(), message_manager_.get(),
53 canbus_conf->enable_receiver_log()) != ErrorCode::OK) {
54 AERROR << "Failed to init can receiver.";
55 return false;
56 }
57 AINFO << "The can receiver is successfully initialized.";
58
59 if (can_sender_.Init(can_client_.get(), message_manager_.get(),
60 canbus_conf->enable_sender_log()) != ErrorCode::OK) {
61 AERROR << "Failed to init can sender.";
62 return false;
63 }
64 AINFO << "The can sender is successfully initialized.";
65
66 vehicle_controller_ = CreateVehicleController();
67 if (vehicle_controller_ == nullptr) {
68 AERROR << "Failed to create vehicle controller.";
69 return false;
70 }
71 AINFO << "The vehicle controller is successfully created.";
72
73 if (vehicle_controller_->Init(canbus_conf->vehicle_parameter(), &can_sender_,
74 message_manager_.get()) != ErrorCode::OK) {
75 AERROR << "Failed to init vehicle controller.";
76 return false;
77 }
78
79 AINFO << "The vehicle controller is successfully"
80 << " initialized with canbus conf as : "
81 << canbus_conf->vehicle_parameter().ShortDebugString();
82
83 node_ = ::apollo::cyber::CreateNode("chassis_detail");
84
85 chassis_detail_writer_ = node_->CreateWriter<::apollo::canbus::Lincoln>(
86 FLAGS_chassis_detail_topic);
87
88 return true;
89}
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42
std::unique_ptr< Node > CreateNode(const std::string &node_name, const std::string &name_space)
Definition cyber.cc:33

◆ publish_chassis()

Chassis apollo::canbus::LincolnVehicleFactory::publish_chassis ( )
overridevirtual

publish chassis messages

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc149 行定义.

149 {
150 Chassis chassis = vehicle_controller_->chassis();
151 ADEBUG << chassis.ShortDebugString();
152 return chassis;
153}
#define ADEBUG
Definition log.h:41

◆ PublishChassisDetail()

void apollo::canbus::LincolnVehicleFactory::PublishChassisDetail ( )
overridevirtual

publish chassis for vehicle messages

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc155 行定义.

155 {
156 Lincoln chassis_detail;
157 message_manager_->GetSensorData(&chassis_detail);
158 ADEBUG << chassis_detail.ShortDebugString();
159 chassis_detail_writer_->Write(chassis_detail);
160}

◆ Start()

bool apollo::canbus::LincolnVehicleFactory::Start ( )
overridevirtual

start canclient, cansender, canreceiver, vehicle controller

返回
true if successfully started

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc91 行定义.

91 {
92 // 1. init and start the can card hardware
93 if (can_client_->Start() != ErrorCode::OK) {
94 AERROR << "Failed to start can client";
95 return false;
96 }
97 AINFO << "Can client is started.";
98
99 // 2. start receive first then send
100 if (can_receiver_.Start() != ErrorCode::OK) {
101 AERROR << "Failed to start can receiver.";
102 return false;
103 }
104 AINFO << "Can receiver is started.";
105
106 // 3. start send
107 if (can_sender_.Start() != ErrorCode::OK) {
108 AERROR << "Failed to start can sender.";
109 return false;
110 }
111
112 // 4. start controller
113 if (!vehicle_controller_->Start()) {
114 AERROR << "Failed to start vehicle controller.";
115 return false;
116 }
117
118 return true;
119}

◆ Stop()

void apollo::canbus::LincolnVehicleFactory::Stop ( )
overridevirtual

stop canclient, cansender, canreceiver, vehicle controller

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc121 行定义.

121 {
122 can_sender_.Stop();
123 can_receiver_.Stop();
124 can_client_->Stop();
125 vehicle_controller_->Stop();
126 AINFO << "Cleanup cansender, canreceiver, canclient, vehicle controller.";
127}

◆ UpdateCommand() [1/2]

void apollo::canbus::LincolnVehicleFactory::UpdateCommand ( const apollo::control::ControlCommand control_command)
overridevirtual

update control command

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc129 行定义.

130 {
131 if (vehicle_controller_->Update(*control_command) != ErrorCode::OK) {
132 AERROR << "Failed to process callback function OnControlCommand because "
133 "vehicle_controller_->Update error.";
134 return;
135 }
136 can_sender_.Update();
137}

◆ UpdateCommand() [2/2]

void apollo::canbus::LincolnVehicleFactory::UpdateCommand ( const apollo::external_command::ChassisCommand chassis_command)
overridevirtual

update chassis command

实现了 apollo::canbus::AbstractVehicleFactory.

在文件 lincoln_vehicle_factory.cc139 行定义.

140 {
141 if (vehicle_controller_->Update(*chassis_command) != ErrorCode::OK) {
142 AERROR << "Failed to process callback function OnControlCommand because "
143 "vehicle_controller_->Update error.";
144 return;
145 }
146 can_sender_.Update();
147}

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