Back to Apollo

canbus

modules/canbus/README_cn.md

11.0.06.5 KB
Original Source

canbus

介绍

  • CANBUS组件主要目的是解析底盘CAN总线数据,获取车辆的信息(如车辆速度、档位、方向盘转角、运行状态、安全等信息);接收控制模块指令,将控制指令解析成底盘CAN总线数据,发送至车辆进行运动控制;执行底盘交互逻辑,使能或退出自动驾驶;进行底盘安全监控,对底盘故障或接管等情况进行监控。

  • Canbus组件主要实现流程创建基于车型的工厂对象,通过调用车型工厂的接口方法,实现初始化,实现处理控制指令 apollo::control::ControlCommand ,实现解析底盘数据并将底盘数据写入到 modules/common_msgs/chassis_msgs/chassis.proto。在车型工厂类 apollo::canbus::AbstractVehicleFactory 内,定义了初始化,启动和关闭,解析控制指令,解析底盘命令,发布底盘消息,发布底盘报文解析数据,更新心跳等方法, 这些方法调用了车辆控制器的对象进行实现。车辆控制器 apollo::canbus::VehicleController 定义了初始化,启动和关闭, 通过底盘反馈报文更新 chassis 数据,处理控制指令方法,处理底盘命令方法,车辆使能方法,实现油门、刹车、转向,档位、驻车、 灯光等车辆的控制逻辑。

  • 每一类车型,继承车型工厂类 apollo::canbus::AbstractVehicleFactory 和车辆控制器类 apollo::canbus::VehicleController ,创建 CanClient 客户端,创建 CanSenderCanReceiver 对象,实现相应的初始化、更新chassis、处理控制指令等方 法。,创建消息管理器 apollo::drivers::canbus::MessageManager 对象,对该车型的发送/接收报文进行管理。车型的每一条报文 数据格式定义继承 apollo::drivers::canbus::ProtocolData ,并实现报文协议解析。每一类车型代码通过包管理的方式进行组 织,具体车型实现可移动到 modules/canbus_vehicle 进行查看。

  • CanClient 客户端是CAN卡硬件驱动的实例,它是被不同的使用CAN总线协议的传感器共享的。如果现有的CAN卡驱动不满足使用,可以通过继承 apollo::drivers::canbus::CanClient 类在 modules/drivers/canbus/can_client 的文件夹中实现新的CAN卡驱动。 CanClient 客户端可以移动到 modules/drivers/canbus/can_client/ 进行查看。

文件组织结构及说明

shell
modules/canbus
├── common                  // 模块全局gflag定义
├── conf                    // 模块配置文件,参数文件目录
├── dag                     // 模块启动文件(mainboard)
├── launch                  // 模块启动文件(cyber_launch)
├── proto                   // 组件定义的配置文件
├── testdata                // 单元测试的数据文件
├── tools                   // 调试工具teleop等
├── vehicle                 // 车辆底盘(canbus_vehicle)组件的基类代码文件
├── BUILD                   // 构建规则文件
├── canbus_component.cc     // 组件实现的代码文件
├── canbus_component.h      // 组件实现的代码文件
├── canbus_test.cc          // 组件单元测试文件
├── cyberfile.xml           // 包管理配置文件
├── README_cn.md            // 说明文档
└── README.md               // 说明文档

模块输入输出与配置

CanbusComponent 组件

apollo::canbus::CanbusComponent

输入

Channel名称类型描述
/apollo/controlapollo::control::ControlCommand控制指令
/apollo/guardianapollo::guardian::GuardianCommand安全指令
/apollo/chassis_controlapollo::external_command::ChassisCommand外部底盘命令

输出

Channel名称类型描述
/apollo/chassisapollo::canbus::Chassis车辆底盘信息接口数据,包括车辆速度、方向盘转角、档位、底盘状态等信息
/apollo/chassis_detailapollo::${Vehicle_Type}车辆底盘详细信息,展示发送和接收底盘报文解析数据

配置文件

文件路径类型/结构说明
modules/canbus/conf/canbus_conf.pb.txtapollo::canbus::CanbusConfapollo::canbus::CanbusComponent 的配置文件
modules/canbus/conf/canbus.confgflags命令行参数配置

Flags

flagfile类型描述
modules/canbus/common/canbus_gflags.ccccCanbus组件flags变量定义文件
modules/canbus/common/canbus_gflags.hhCanbus组件flags声明文件

使用方式

修改modules/canbus/conf/canbus.conf配置文件
  • 打开chassis_detail,启动canbus后会输出/apollo/chassis_detail消息,建议调试底盘数据时打开
--enable_chassis_detail_pub
  • 关闭chassis_detail,非底盘调试时可以不打开
--noenable_chassis_detail_pub
  • 关闭guardian控制指令,默认不打开,不打开则接收/apollo/control数据。注意:如果打开,则接收/apollo/guardian数据,且需要启动guardian模块
--noreceive_guardian
修改modules/canbus/conf/canbus_conf.pb.txt配置文件

配置can_card_parameter,使用哪个can卡,配置哪个,下图示例是使用HERMES_CAN设备,PCI类型,端口号0,最大端口数8。

can_card_parameter {
  brand: HERMES_CAN
  type: PCI_CARD
  channel_id: CHANNEL_ID_ZERO
  num_ports: 8
  interface: NATIVE
}
使用 mainboard 启动
shell
mainboard -d modules/canbus/dag/canbus.dag
使用 cyber_launch 启动
shell
cyber_launch start modules/canbus/launch/canbus.launch