怎么在Apollo中添加新的车辆

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

站在用户的角度思考问题,与客户深入沟通,找到卫东网站设计与卫东网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站设计、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册网站空间、企业邮箱。业务覆盖卫东地区。

简介

我们通过本文将向开发者阐述如何向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
  ...
}

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

名称栏目:怎么在Apollo中添加新的车辆
转载来于:https://www.cdcxhl.com/article10/jiesdo.html

成都网站建设公司_创新互联,为您提供移动网站建设用户体验品牌网站建设建站公司静态网站云服务器

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营