From f21188672b321055fd2f9733758655e8fe5d3d84 Mon Sep 17 00:00:00 2001 From: hwinkel Date: Mon, 3 Jul 2023 17:03:59 +0200 Subject: [PATCH] ADD: added update of simtrack --- include/SimCore/Messages/Emission.hpp | 1 + include/SimCore/Messages/SimTrack.hpp | 63 +++++++++++++--------- src/SimCore/Messages/Emission.cpp | 1 - src/SimCore/Messages/GroundThruthTrack.cpp | 1 + src/SimCore/Messages/SimTrack.cpp | 49 +++++++++++++++-- tests/test_SimTrack.cpp | 10 +++- 6 files changed, 94 insertions(+), 31 deletions(-) diff --git a/include/SimCore/Messages/Emission.hpp b/include/SimCore/Messages/Emission.hpp index 88fd181..b034a34 100644 --- a/include/SimCore/Messages/Emission.hpp +++ b/include/SimCore/Messages/Emission.hpp @@ -35,6 +35,7 @@ namespace SimCore /// @return std::string getName(); + Data Frequency; Data Range; Data Bandwidth; diff --git a/include/SimCore/Messages/SimTrack.hpp b/include/SimCore/Messages/SimTrack.hpp index a29d30c..77c5321 100644 --- a/include/SimCore/Messages/SimTrack.hpp +++ b/include/SimCore/Messages/SimTrack.hpp @@ -10,42 +10,55 @@ #include - - - - namespace SimCore { class SimTrack { - private: - const SimCore::Identifier ID_; - - const WHISPER::SourceType SourceType_; - Position position_; - - std::vector EmitterList; - public: SimTrack(); - SimTrack(WHISPER::SourceType sourcetype,SimCore::EntityKind entityKind); - SimTrack( SimCore::Identifier id ,WHISPER::SourceType sourcetype,SimCore::EntityKind entityKind ); + + SimTrack(WHISPER::SourceType sourcetype, SimCore::EntityKind entityKind); + + SimTrack(SimCore::Identifier id, WHISPER::SourceType sourcetype, SimCore::EntityKind entityKind); ~SimTrack(); - /// @brief - /// @param pos - void setPosition(SimCore::Position pos); /// @brief - /// @param x + /// @param pos + void setPosition(SimCore::Position pos); + + /// @brief + /// @param x /// @param y - /// @param z + /// @param z void setPosition(double x, double y, double z); SimCore::Position getPosition(); SimCore::Identifier getIdentifier(); + /// @brief + /// @param emission + void addEmission(Emission emission); + /// @brief + /// @param id + /// @return + std::shared_ptr getEmission(SimCore::Identifier id); + /// @brief couts the stored emissions + /// @return returns the amout of emission + size_t coutEmissions(); + + /// @brief return a WHISPER Message out of a simtrack object + /// @param parentID + /// @return WHISPER::Message + WHISPER::Message buildMessage(SimCore::Identifier parentID); + + /// @brief creates a SimTrack out of a whisper message + /// @param msg + /// @return SimTrack Oject + static SimTrack unpack(WHISPER::Message msg); + + public: Data Speed; Data Course; Data Pitch; @@ -53,12 +66,14 @@ namespace SimCore Data EntityKind; + private: + const SimCore::Identifier ID_; - WHISPER::Message buildMessage(SimCore::Identifier parentID); - static SimTrack unpack(WHISPER::Message msg); + const WHISPER::SourceType SourceType_; + + Position position_; + + std::vector> EmissionList; }; - - - } \ No newline at end of file diff --git a/src/SimCore/Messages/Emission.cpp b/src/SimCore/Messages/Emission.cpp index e97a0a7..d756c24 100644 --- a/src/SimCore/Messages/Emission.cpp +++ b/src/SimCore/Messages/Emission.cpp @@ -7,7 +7,6 @@ namespace SimCore :ID_(SimCore::Identifier()) { this->name_.setValue(name); - } SimCore::Emission::Emission(std::string name, SimCore::Identifier id) diff --git a/src/SimCore/Messages/GroundThruthTrack.cpp b/src/SimCore/Messages/GroundThruthTrack.cpp index 884c8c1..9b67aed 100644 --- a/src/SimCore/Messages/GroundThruthTrack.cpp +++ b/src/SimCore/Messages/GroundThruthTrack.cpp @@ -11,6 +11,7 @@ namespace SimCore { + [[deprecated("use SimTrack instead")]] GroundTruthTrack::GroundTruthTrack(WHISPER::SourceType src,SimCore::Identifier id,SimCore::TrackKind kind):Track(src, id, kind) { diff --git a/src/SimCore/Messages/SimTrack.cpp b/src/SimCore/Messages/SimTrack.cpp index 938fe54..c79c3c3 100644 --- a/src/SimCore/Messages/SimTrack.cpp +++ b/src/SimCore/Messages/SimTrack.cpp @@ -73,7 +73,14 @@ namespace SimCore SimTrack.mutable_entityidentifier()->set_parent(this->ID_.getParentNumber()); SimTrack.mutable_entityidentifier()->set_uuid(this->ID_.getUUID()); - + std::vector>::iterator it; + for( it = EmissionList.begin(); it != EmissionList.end(); it++) + { + + auto emissionMsg = it->get()->packEmission(); + SimTrack.add_contactemissions()->CopyFrom(emissionMsg); + + } // SimTrack.mutable_timestamp()->set_seconds(time(NULL)); auto any = std::make_shared(); @@ -160,11 +167,43 @@ namespace SimCore } } - - - + + for (int i = 0; i < trackMsg.contactemissions_size(); i++) + { + const messages::SimTrack::Emission* emission = trackMsg.mutable_contactemissions(i); + auto obj = SimCore::Emission::unpackEmission(*emission); + track.addEmission(obj); + } + return track; } - + + void SimTrack::addEmission(Emission emission) + { + auto tmp = std::make_shared(std::move(emission)); + this->EmissionList.push_back(std::move(tmp)); + } + + std::shared_ptr SimTrack::getEmission(SimCore::Identifier id) + { + for(auto iterator = this->EmissionList.begin(); iterator != this->EmissionList.end(); iterator++) + { + + if (iterator->get()->getID()== id) + { + return *iterator; + } + + } + return nullptr; + + } + + size_t SimTrack::coutEmissions() + { + return EmissionList.size(); + } + + } // namespace SimCore diff --git a/tests/test_SimTrack.cpp b/tests/test_SimTrack.cpp index cf6afb3..225c0e2 100644 --- a/tests/test_SimTrack.cpp +++ b/tests/test_SimTrack.cpp @@ -23,6 +23,8 @@ SCENARIO("Testing the SimCore Track") GeodesPos1(SimCore::GeodesicPosition::LONGITUDE) = 13.376935; GeodesPos1(SimCore::GeodesicPosition::HEIGHT) = 0; + SimCore::Emission emi1("test Radar"); + SimCore::Position pos1(GeocentPos1(SimCore::X),GeocentPos1(SimCore::Y),GeocentPos1(SimCore::Z)); double course = 90; @@ -47,6 +49,9 @@ SCENARIO("Testing the SimCore Track") if (track.getPosition() == pos) { testOperator = true; } + + auto idEmi = emi1.getID(); + track.addEmission(emi1); // serializedMSG = track.buildMessage(parentID).serialize(); // msg = std::make_shared(serializedMSG); @@ -58,7 +63,8 @@ SCENARIO("Testing the SimCore Track") // std::string trackstring = track.buildMessage(parentID).serialize(); // SimCore::GroundTruthTrack trackDeserialized = SimCore::GroundTruthTrack::unpack(*msg); - + std::shared_ptr esm= track.getEmission(emi1.getID()); + esm->packEmission(); THEN("check if Track attributes are correct") { @@ -66,6 +72,8 @@ SCENARIO("Testing the SimCore Track") REQUIRE(track.Course.getValue() == course); REQUIRE(track.Speed.getValue() == speed); REQUIRE(track.getPosition().getGeocentricPos() == pos.getGeocentricPos()); + REQUIRE(track.coutEmissions() > 0); + REQUIRE(track.getEmission(emi1.getID()).get()->getID() == idEmi); // REQUIRE(msg.get()->msgType_ == WHISPER::GROUND_TRUTH_TRACK); // REQUIRE(trackPtr->Speed.getValue() == speed);