中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Apollo中添加新的車輛

發布時間:2021-12-18 16:06:48 來源:億速云 閱讀:276 作者:小新 欄目:云計算

這篇文章主要介紹了怎么在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中添加新的車輛”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林周县| 霞浦县| 招远市| 安阳县| 武陟县| 都兰县| 渝北区| 常熟市| 资阳市| 朝阳市| 靖州| 南阳市| 保定市| 丰台区| 天等县| 岳阳市| 高雄市| 新干县| 阿勒泰市| 康乐县| 景泰县| 遂溪县| 河津市| 阳谷县| 伊宁市| 类乌齐县| 大港区| 城市| 西城区| 剑河县| 成都市| 依安县| 富平县| 米易县| 闻喜县| 赤水市| 江源县| 新邵县| 广平县| 大余县| 灵寿县|