怎么在Apollo中添加新的车辆

71次阅读
没有评论

共计 3268 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要介绍了怎么在 Apollo 中添加新的车辆,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

简介

我们通过本文将向开发者阐述如何向 Apollo 中添加新的车辆。

注意: Apollo 控制算法将林肯 MKZ 配置为默认车辆

添加新的车辆时,如果您的车辆需要不同于 Apollo 控制算法提供的属性,请参考:

使用适合您的车辆的其它控制算法。

修改现有算法的参数以获得更好的结果。

添加新车辆的步骤

按照以下步骤以实现新车辆的添加:

实现新的车辆控制器

实现新的消息管理器

实现新的车辆工厂

注册新的车辆

更新配置文件

 

一、实现新的车辆控制器

新的车辆控制器是从  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
 ...
};

二、实现新的消息管理器

新的消息管理器是从  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.
 ...
};

三、实施新的车辆工厂

新的车辆工厂是从  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;};

一个.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());
}

Apollo 提供可以用于实现新车辆协议的基类  ProtocolData。

四、注册新的车辆

在 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();
 });
}

五、更新配置文件

在  modules/canbus/conf/canbus_conf.pb.txt  中更新配置,在 Apollo 系统中激活车辆。

vehicle_parameter {
 brand: NEW_VEHICLE_BRAND
 // put other parameters below
 ...
}

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“怎么在 Apollo 中添加新的车辆”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3268字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)