diff --git a/modules/prediction/common/BUILD b/modules/prediction/common/BUILD index c1635e54cfb90fa94caeb1d09e5e6b91e2645508..93876cac8117620c45ce986031ac8762016a0b50 100644 --- a/modules/prediction/common/BUILD +++ b/modules/prediction/common/BUILD @@ -74,8 +74,10 @@ cc_library( deps = [ "//modules/prediction/proto:feature_proto", "//modules/prediction/proto:offline_features_proto", + "//modules/prediction/common:prediction_gflags", "//modules/common:log", "//modules/common:macro", + "//modules/common/util:util", ] ) diff --git a/modules/prediction/common/feature_output.cc b/modules/prediction/common/feature_output.cc index 7506fdd0ae1235f3965dfccb300de95d1d3f82a7..199ce2bcd08072c3f931009a69a3f0d9a7bbb27f 100644 --- a/modules/prediction/common/feature_output.cc +++ b/modules/prediction/common/feature_output.cc @@ -16,24 +16,41 @@ #include "modules/prediction/common/feature_output.h" +#include + #include "modules/common/log.h" +#include "modules/common/util/file.h" +#include "modules/prediction/common/prediction_gflags.h" namespace apollo { namespace prediction { FeatureOutput::FeatureOutput() {} -FeatureOutput::~FeatureOutput() {} - bool FeatureOutput::Open() { return true; } -void FeatureOutput::Close() { ADEBUG << "Close feature output"; } +FeatureOutput::~FeatureOutput() { + count_ = 0; +} -bool FeatureOutput::Ready() { return Open(); } +void FeatureOutput::Close() { + ADEBUG << "Close feature output"; + Write(); +} -void FeatureOutput::Insert(const Feature& feature) {} +bool FeatureOutput::Ready() { return Open(); } -void FeatureOutput::Write() {} +void FeatureOutput::Insert(const Feature& feature) { + features_.add_feature()->CopyFrom(feature); +} + +void FeatureOutput::Write() { + std::string file_name = FLAGS_prediction_data_file_prefix + + std::to_string(count_) + ".bin"; + apollo::common::util::SetProtoToBinaryFile(features_, file_name); + features_.Clear(); + ++count_; +} } // namespace prediction } // namespace apollo diff --git a/modules/prediction/common/feature_output.h b/modules/prediction/common/feature_output.h index e0c6805aa1e962b5d77e8a636a4a02c792acb2eb..83c91405b49810756db3bfac09981a2d98a81318 100644 --- a/modules/prediction/common/feature_output.h +++ b/modules/prediction/common/feature_output.h @@ -61,7 +61,7 @@ class FeatureOutput { private: Features features_; - size_t count = 0; + size_t count_ = 0; DECLARE_SINGLETON(FeatureOutput); }; diff --git a/modules/prediction/common/prediction_gflags.cc b/modules/prediction/common/prediction_gflags.cc index fe89fc7aa36ff5b170042c36f9784335652f20ca..1c745da1194f21dcde6730e749a1ed09379cf26d 100644 --- a/modules/prediction/common/prediction_gflags.cc +++ b/modules/prediction/common/prediction_gflags.cc @@ -27,6 +27,9 @@ DEFINE_string(prediction_conf_file, DEFINE_string(prediction_adapter_config_filename, "modules/prediction/conf/adapter.conf", "Default conf file for prediction"); +DEFINE_string(prediction_data_file_prefix, + "data/prediction_data/feature_", + "Prefix of files to store feature data"); DEFINE_bool(prediction_test_mode, false, "Set prediction to test mode"); DEFINE_double( prediction_test_duration, -1.0, diff --git a/modules/prediction/common/prediction_gflags.h b/modules/prediction/common/prediction_gflags.h index e7862aa8535b7a51b572cf05efa08ec5ac016ca6..b635fd53009da0b28af2edfe0a3a115104765447 100644 --- a/modules/prediction/common/prediction_gflags.h +++ b/modules/prediction/common/prediction_gflags.h @@ -23,6 +23,7 @@ DECLARE_string(prediction_module_name); DECLARE_string(prediction_conf_file); DECLARE_string(prediction_adapter_config_filename); +DECLARE_string(prediction_data_file_prefix); DECLARE_bool(prediction_test_mode); DECLARE_double(prediction_test_duration); diff --git a/modules/prediction/conf/prediction.conf b/modules/prediction/conf/prediction.conf index 1ec80e70bcf701fd93fa3d8227331a514ac5072e..8187ea7860200ebcd2dd49426499784f587f4f4f 100644 --- a/modules/prediction/conf/prediction.conf +++ b/modules/prediction/conf/prediction.conf @@ -3,6 +3,7 @@ --enable_adjust_velocity_heading --noenable_kf_tracking +--prediction_offline_mode --enable_trim_prediction_trajectory --lane_change_dist=50.0 diff --git a/modules/prediction/evaluator/vehicle/mlp_evaluator.cc b/modules/prediction/evaluator/vehicle/mlp_evaluator.cc index 3631ac66eaacd8b183c73274bde5fe6f444a8f57..dd0e97673f62e2ca7bc3b16bfe21274817ce34ca 100644 --- a/modules/prediction/evaluator/vehicle/mlp_evaluator.cc +++ b/modules/prediction/evaluator/vehicle/mlp_evaluator.cc @@ -84,6 +84,10 @@ void MLPEvaluator::Evaluate(Obstacle* obstacle_ptr) { double probability = ComputeProbability(feature_values); lane_sequence_ptr->set_probability(probability); } + + if (FLAGS_prediction_offline_mode) { + FeatureOutput::instance()->Insert(*latest_feature_ptr); + } } void MLPEvaluator::ExtractFeatureValues(Obstacle* obstacle_ptr, diff --git a/modules/prediction/proto/offline_features.proto b/modules/prediction/proto/offline_features.proto index 51922bc52b28bd7a26d8937ff9cab971dbc3e2f6..d4856c5600fb44388fd2f735dbeb73c17405b2e1 100644 --- a/modules/prediction/proto/offline_features.proto +++ b/modules/prediction/proto/offline_features.proto @@ -5,5 +5,5 @@ package apollo.prediction; import "modules/prediction/proto/feature.proto"; message Features { - repeated Feature features = 1; + repeated Feature feature = 1; }