如何在apollo中添加新车辆
参考:https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_add_a_new_vehicle.md
apollo 默认支持的车辆是lincoln mkz
添加新车辆时,如果您的车辆需要与阿波罗控制算法提供的属性不同,请考虑:
1.使用合适你的载具的算法
2.修正现存算法的参数去实现更好的结果
具体添加过程:
(1)应用新车的控制器
新的控制器是从VehicleController类继承的,示例头文件如下:
/**
* @class NewVehicleController
*
* @brief this class implements the vehicle controller for a new vehicle.
*/
class NewVehicleController final : public VehicleController {
public:
/**
* @brief initialize the new vehicle controller.
* @return init error_code
*/
::apollo::common::ErrorCode Init(
const VehicleParameter& params, CanSender* const can_sender,
MessageManager* const message_manager) override;/**
* @brief start the new vehicle controller.
* @return true if successfully started.
*/
bool Start() override;/**
* @brief stop the new vehicle controller.
*/
void Stop() override;/**
* @brief calculate and return the chassis.
* @returns a copy of chassis. Use copy here to avoid multi-thread issues.
*/
Chassis chassis() override;// more functions implemented here
...};
(2)应用新的消息管理器
新的消息管理器是从MessageManager类继承的,示例头文件如下:
/** * @class NewVehicleMessageManager * * @brief implementation of MessageManager for the new vehicle */ class NewVehicleMessageManager : public MessageManager { public: /** * @brief construct a lincoln message manager. protocol data for send and * receive are added in the construction. */ NewVehicleMessageManager(); virtual ~NewVehicleMessageManager(); // define more functions here. ... };
(3)应用新的车辆factory
新的消息管理器是从AbstractVehicleFactory类继承的,示例头文件如下:
/** * @class NewVehicleFactory * * @brief this class is inherited from AbstractVehicleFactory. It can be used to * create controller and message manager for lincoln vehicle. */ class NewVehicleFactory : public AbstractVehicleFactory { public: /** * @brief destructor */ virtual ~NewVehicleFactory() = default; /** * @brief create lincoln vehicle controller * @returns a unique_ptr that points to the created controller */ std::unique_ptr<VehicleController> CreateVehicleController() override; /** * @brief create lincoln message manager * @returns a unique_ptr that points to the created message manager */ std::unique_ptr<MessageManager> CreateMessageManager() override; };
有一个example.cc文件
std::unique_ptr<VehicleController> NewVehicleFactory::CreateVehicleController() { return std::unique_ptr<VehicleController>(new lincoln::LincolnController()); } std::unique_ptr<MessageManager> NewVehicleFactory::CreateMessageManager() { return std::unique_ptr<MessageManager>(new lincoln::LincolnMessageManager()); }
(4)注册新载具
注册新载具的路径为 modules/canbus/vehicle/vehicle_factory.cc
. 以下为示例头文件
void VehicleFactory::RegisterVehicleFactory() { Register(VehicleParameter::LINCOLN_MKZ, []() -> AbstractVehicleFactory* { return new LincolnVehicleFactory(); }); // register the new vehicle here. Register(VehicleParameter::NEW_VEHICLE_BRAND, []() -> AbstractVehicleFactory* { return new NewVehicleFactory(); }); }
(5)更新配置文件
更新配置文件modules/canbus/conf/canbus_conf.pb.txt去在阿波罗中**新载具
vehicle_parameter { brand: NEW_VEHICLE_BRAND // put other parameters below ... }
上一篇: Apollo 中添加Radar
下一篇: postman:汇总最近使用到断言