如何添加新的控制算法?

本文做者:Apollo開發者社區git

Apollo中的控制算法由一個或多個控制器組成,能夠輕鬆更改或替換爲不一樣的算法。 每一個控制器將一個或多個控制命令輸出到CANbus。github

 

Apollo中的默認控制算法包含橫向控制器(LatController)和縱向控制器(LonController)。 它們分別負責橫向和縱向的車輛控制。算法

 

新的控制算法沒必要遵循默認模式,例如,一個橫向控制器+一個縱向控制器。 它能夠是單個控制器,也能夠是任意數量控制器的組合。ide

 

添加新的控制算法的步驟:spa

 

  1. 建立一個控制器code

  2. 在文件control_config中添加新控制器的配置信息繼承

  3. 註冊新控制器接口

 

爲了更好的理解,下面對每一個步驟進行詳細的闡述:開發

 

1、建立一個控制器

 

全部控制器都必須繼承基類Controller,它定義了一組接口。 如下是控制器實現的示例:get

 

namespace apollo {
namespace control {

class NewController : public Controller {
 public:
  NewController();
  virtual ~NewController();
  Status Init(const ControlConf* control_conf) override;
  Status ComputeControlCommand(
      const localization::LocalizationEstimate* localization,
      const canbus::Chassis* chassis, const planning::ADCTrajectory* trajectory,
      ControlCommand* cmd) override;
  Status Reset() override;
  void Stop() override;
  std::string Name() const override;
};
}  // namespace control
}  // namespace apollo

 

2、添加新控制器的配置信息

 

按照下面的步驟在文件control_config中添加新控制器的配置信息:

 

一、根據算法要求爲新控制器配置和參數定義proto。做爲示例,能夠參考如下位置的LatController的proto定義:modules/control/proto/ lat_controller_conf.proto

 

二、定義新的控制器proto以後,例如new_controller_conf.proto,輸入如下內容:

 

syntax = "proto2";

package apollo.control;

message NewControllerConf {
    double parameter1 = 1;
    int32 parameter2 = 2;
}

 

三、參考以下內容更新 modules/control/proto/control_conf.proto文件:

 

optional apollo.control.NewControllerConf new_controller_conf = 15;

 

四、參考之內容更新 ControllerType(在modules/control/proto/control_conf.proto 中):

 

enum ControllerType {
    LAT_CONTROLLER = 0;
    LON_CONTROLLER = 1;
    NEW_CONTROLLER = 2;
  };

 

protobuf定義完成後,在modules/control/conf/lincoln.pb.txt中相應更新控制配置文件。

 

注意:上面的"control/conf"文件是Apollo的默認文件。您的項目可能使用不一樣的控制配置文件。

 

3、註冊新控制器

 

要激活Apollo系統中的新控制器,請在以下文件中的「ControllerAgent」中註冊新控制器:modules/control/controller/controller_agent.cc

 

按照以下示例添加註冊信息:

 

void ControllerAgent::RegisterControllers() {
  controller_factory_.Register(
      ControlConf::NEW_CONTROLLER,
      []() -> Controller * { return new NewController(); });
}

 

在完成以上步驟後,您的新控制器即可在Apollo系統中生效。

 

如下是本文章在Github上的Apollo模塊的鏈接。後續咱們還會發布更多的 Github 技術乾貨哦。

 

https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_add_a_new_control_algorithm_cn.md

原文連接地址:https://developer.baidu.com/topic/show/290027

相關文章
相關標籤/搜索