Apollo 10.0
自动驾驶开放平台
|
在lincoln车型实现中,有3个独立的线程需要关注:
(1) CanSender发送控制报文线程:Apollo发送至车辆底盘的CAN数据称为控制报文,由CanSender创建独立线程,按照协议报文周期进行发送,而所发送的报文数据则由CanSender::Update方法进行更新;
(2) CANReceiver接收底盘控制报文线程:车辆发出的底盘信息CAN数据称为反馈报文,由CanReceiver创建独立线程进行接收(接收方式有阻塞或非阻塞,取决于使用的是哪种CanClient,MessageManager调用ProtocolData的Prase方法,解析收到的底盘数据,并更新Lincoln.proto数据;
(3) 底盘状态实时监控线控:在LincolnController中,会创建一个单独的看门狗线程,SecurityDogThreadFunc()方法实现对底盘的驾驶模式、底盘故障进行实时监控,如果底盘被监控到退出自动驾驶(被接管)或底盘存在故障,会执行Emergency()方法,将所有控制报文初始化,并将Chassis::DrivingMode置为Emergency或Chassis_Error。
方法 | 说明 | 控制报文 | 反馈报文 |
---|---|---|---|
GetPeriod | 定义报文周期 | √ | × |
Reset | 定义报文的默认数据 | √ | × |
UpdateData | 定义报文的更新数据 | √ | × |
UpdateData_Heartbeat | 定义心跳信号的更新内容 | √ | × |
Prase | 定义报文的协议数据解析 | × 或 √ | √ |
如Brake60
是控制报文协议解析,Brake61
是反馈报文协议解析。
/apollo/chassis
channel是通过VehicleController中Chassis方法,将必要的ProtocolData协议的Parse数据写入到apollo::Chassis中进行发布;/apollo/chassis_detail
channel是调用ProtocolData的Parse后,写入到对应车型Proto数据中,查看对应车型的Proto文件进行查询,并进行发布该车型proto类型的数据。drivers/canbus/can_client
的文件夹中实现新的CAN卡驱动。因为每一类车型的文件组织结构相同,这里以lincoln车型为例进行说明,其它车型的目录结构可以自行查看。
Channel名称 | 类型 | 描述 |
---|---|---|
/apollo/control | apollo::control::ControlCommand | canbus模块订阅该消息,LincolnVehicleFactory继承AbstractVehicleFactory基类方法UpdateCommand(ControlCommand)传入该参数,作为lincoln车型插件的输入 |
/apollo/chassis_control | apollo::ChassisCommand | canbus模块订阅该消息,LincolnVehicleFactory继承AbstractVehicleFactory基类方法UpdateCommand(ChassisCommand)传入该参数,作为lincoln车型插件的输入 |
Channel名称 | 类型 | 描述 |
---|---|---|
/apollo/chassis_detail | apollo::lincoln::Lincoln | lincoln车辆底盘详细信息,展示底盘总线报文解析数据 |
| 文件路径 | 类型/结构 | 说明 | | -— | -— | -— |
| modules/canbus/conf/canbus.conf
| command line flags
| 命令行参数配置 |
flagfile | 类型 | 描述 |
---|---|---|
canbus_gflags.cc | flags | Canbus组件flags定义文件 |
canbus_gflags.h | declare | Canbus组件flags声明文件 |
在modules/canbus/conf/canbus.conf
中,修改--load_vehicle_library
和--load_vehicle_class_name
参数,加载Lincoln车型包,在包管理和源码下配置参数不同:
如果您在使用文档的过程中,遇到任何问题,请到我们在【开发者社区】建立的 反馈意见收集问答页面,反馈相关的问题。我们会根据反馈意见对文档进行迭代优化。