From 62c5b1942d5203ae8e1c0ad241c31d158305bd05 Mon Sep 17 00:00:00 2001 From: Yitian Zhou Date: Thu, 19 Oct 2023 10:33:13 +0200 Subject: [PATCH 1/2] Add isFixedPosition for cloudpoint & add parameter in loop corrector --- interfaces/api/loop/ILoopCorrector.h | 6 ++++-- interfaces/datastructure/CloudPoint.h | 11 +++++++++++ src/datastructure/CloudPoint.cpp | 10 ++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/interfaces/api/loop/ILoopCorrector.h b/interfaces/api/loop/ILoopCorrector.h index 5b01bec2..304b9bc4 100644 --- a/interfaces/api/loop/ILoopCorrector.h +++ b/interfaces/api/loop/ILoopCorrector.h @@ -66,13 +66,15 @@ class XPCF_CLIENTUUID("51f449f8-c9df-4c3a-ac57-7ca95debfdbc") XPCF_SERVERUUID("7 /// @param[in] duplicatedPointsIndices: indices of duplicated cloud points. /// The first index is the id of point cloud seen from the detected loop keyframe. /// The second one is id of point cloud seen from the query keyframe - /// @param[out] correctedKeyframeIds: list of corrected keyframes' IDs (of which pose has been modified in the method) + /// @param[out] correctedKeyframeIds: list of corrected keyframes' IDs (of which pose has been modified in the method) + /// @param[out] correctedCloudpointIds: list of corrected cloud points' IDs (of which spatial coordinates has been modified in the method) /// @return FrameworkReturnCode::_SUCCESS if loop closure is correctly corrected, else FrameworkReturnCode::_ERROR_ virtual FrameworkReturnCode correct(const SRef queryKeyframe, const SRef detectedLoopKeyframe, const SolAR::datastructure::Transform3Df & S_wl_wc, const std::vector> & duplicatedPointsIndices, - std::vector& correctedKeyframeIds) = 0; + std::vector& correctedKeyframeIds, + std::vector& correctedCloudpointIds) = 0; }; } diff --git a/interfaces/datastructure/CloudPoint.h b/interfaces/datastructure/CloudPoint.h index 2669c031..7f3e36bc 100644 --- a/interfaces/datastructure/CloudPoint.h +++ b/interfaces/datastructure/CloudPoint.h @@ -273,6 +273,16 @@ class SOLARFRAMEWORK_API CloudPoint : public Point3Df, public PrimitiveInformat /// @return true if remove successfully bool removeVisibility(const uint32_t& keyframe_id); + /// + /// @brief set whether the cloud point has fixed spatial position or not + /// @param[in] isFixedPosition: boolean, if true the cloudpoint has fixed spatial coordinates X/Y/Z + void setFixedPosition(bool isFixedPosition); + + /// + /// @brief is cloud point has fixed position + /// @return boolean, true if has fixed spatial position, false if not + bool isFixedPosition() const; + private: friend class boost::serialization::access; template @@ -286,6 +296,7 @@ class SOLARFRAMEWORK_API CloudPoint : public Point3Df, public PrimitiveInformat Vector3f m_rgb = {0.0, 0.0, 0.0}; Vector3f m_viewDirection = {0.0, 0.0, 0.0}; double m_reproj_error = 0.0; + bool m_isFixedPosition = false; // fixed spatial position (fixed spatial coordinates x y z) }; DECLARESERIALIZE(CloudPoint); diff --git a/src/datastructure/CloudPoint.cpp b/src/datastructure/CloudPoint.cpp index 07c60940..175903d4 100644 --- a/src/datastructure/CloudPoint.cpp +++ b/src/datastructure/CloudPoint.cpp @@ -163,6 +163,16 @@ bool CloudPoint::removeVisibility(const uint32_t& keyframe_id) } } +void CloudPoint::setFixedPosition(bool isFixedPosition) +{ + m_isFixedPosition = isFixedPosition; +} + +bool CloudPoint::isFixedPosition() const +{ + return m_isFixedPosition; +} + template void CloudPoint::serialize(Archive &ar, const unsigned int /* version */) { From 59d2825dd2e05ba733f1ef5e2f27880741d77866 Mon Sep 17 00:00:00 2001 From: Yitian Zhou Date: Tue, 7 Nov 2023 15:05:04 +0100 Subject: [PATCH 2/2] Rename methods and variables --- interfaces/datastructure/CloudPoint.h | 8 ++++---- src/datastructure/CloudPoint.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/interfaces/datastructure/CloudPoint.h b/interfaces/datastructure/CloudPoint.h index 7f3e36bc..2ee38a4a 100644 --- a/interfaces/datastructure/CloudPoint.h +++ b/interfaces/datastructure/CloudPoint.h @@ -275,13 +275,13 @@ class SOLARFRAMEWORK_API CloudPoint : public Point3Df, public PrimitiveInformat /// /// @brief set whether the cloud point has fixed spatial position or not - /// @param[in] isFixedPosition: boolean, if true the cloudpoint has fixed spatial coordinates X/Y/Z - void setFixedPosition(bool isFixedPosition); + /// @param[in] isPositionFixed: boolean, if true the cloudpoint has fixed spatial coordinates X/Y/Z + void setPositionFixed(bool isPositionFixed); /// /// @brief is cloud point has fixed position /// @return boolean, true if has fixed spatial position, false if not - bool isFixedPosition() const; + bool isPositionFixed() const; private: friend class boost::serialization::access; @@ -296,7 +296,7 @@ class SOLARFRAMEWORK_API CloudPoint : public Point3Df, public PrimitiveInformat Vector3f m_rgb = {0.0, 0.0, 0.0}; Vector3f m_viewDirection = {0.0, 0.0, 0.0}; double m_reproj_error = 0.0; - bool m_isFixedPosition = false; // fixed spatial position (fixed spatial coordinates x y z) + bool m_isPositionFixed = false; // fixed spatial position (fixed spatial coordinates x y z) }; DECLARESERIALIZE(CloudPoint); diff --git a/src/datastructure/CloudPoint.cpp b/src/datastructure/CloudPoint.cpp index 175903d4..db86b285 100644 --- a/src/datastructure/CloudPoint.cpp +++ b/src/datastructure/CloudPoint.cpp @@ -163,14 +163,14 @@ bool CloudPoint::removeVisibility(const uint32_t& keyframe_id) } } -void CloudPoint::setFixedPosition(bool isFixedPosition) +void CloudPoint::setPositionFixed(bool isPositionFixed) { - m_isFixedPosition = isFixedPosition; + m_isPositionFixed = isPositionFixed; } -bool CloudPoint::isFixedPosition() const +bool CloudPoint::isPositionFixed() const { - return m_isFixedPosition; + return m_isPositionFixed; } template