本文做者:Apollo開發者社區javascript
預測模塊是不可或缺的一個板塊,其做用很大程度上決定了試驗可否成功。預測模塊綜合各個模塊的數據信息和評價結果,具有信息融合功能,能夠評估各個子系統及系統總體將來的狀態,開發者可根據預測模塊的評估結果進行調整。而加入新的Evaluator,更是能自定義評估方向,增長評估結果準確度。java
如下,ENJOY app
評估器使用預訓練的深度學習模型生成特徵(來自障礙物和自車的原始信息)以得到模型輸出。ide
請參照如下步驟新增一個名爲NewEvaluator的評估器:函數
在proto中新增一個文件學習
以繼承Evaluator類的方式定義一個新類NewEvaluatorlua
實現NewEvaluator類spa
更新預測配置文件code
更新評估管理器繼承
在modules/prediction/evaluator/vehicle文件夾下建立文件new_evaluator.h
文件內容以下:
#include "modules/prediction/evaluator/evaluator.h" namespace apollo { namespace prediction { class NewEvaluator : public Evaluator { public: NewEvaluator(); virtual ~NewEvaluator(); void Evaluate(Obstacle* obstacle_ptr) override; // Other useful functions and fields. }; } // namespace prediction } // namespace apollo
在相同文件夾下建立一個名爲new_evaluator.cc的文件,實現新定義的類。新類的實現方法以下所示:
#include "modules/prediction/evaluator/vehicle/new_evaluator.h" namespace apollo { namespace prediction { NewEvaluator::NewEvaluator() { // Implement } NewEvaluator::~NewEvaluator() { // Implement } NewEvaluator::Evaluate(Obstacle* obstacle_ptr)() { // Extract features // Compute new_output by applying pre-trained model } // Other functions } // namespace prediction } // namespace apollo
在文件prediction_conf.proto中增長一個類型來表示新增的評估器,以下所示:
enum EvaluatorType { MLP_EVALUATOR = 0; NEW_EVALUATOR = 1; }
在配置文件modules/prediction/conf/prediction_conf.pb.txt中,更新evaluator_typ域,具體以下所示:
obstacle_conf { obstacle_type: VEHICLE obstacle_status: ON_LANE evaluator_type: NEW_EVALUATOR predictor_type: NEW_PREDICTOR }
按照下面的代碼示例更新函數CreateEvluator( ... ):
case ObstacleConf::NEW_EVALUATOR: { evaluator_ptr.reset(new NewEvaluator()); break; }
按照下面的代碼示例更新函數RegisterEvaluators():
RegisterEvaluator(ObstacleConf::NEW_EVALUATOR);
完成上述步驟以後,即表示建立了新的評估器。
若是您想增長新的屬性,請參照如下說明:
假設新的評估輸出結果爲new_output而且其類型爲int32。
若是輸出直接與障礙物相關,請參考如下代碼在modules/prediction/proto/feature.proto文件中增長新的域:
message Feature { // Other existing features optional int32 new_output = 1000; }
若是輸出與車道序列相關,請參考如下代碼在modules/prediction/proto/lane_graph.proto文件中增長新的域:
message LaneSequence { // Other existing features optional int32 new_output = 1000; }