TransformHelper.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @author Fabian Reister ( fabian dot reister at kit dot edu )
17 * @date 2021
18 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
19 * GNU General Public License
20 */
21
22#pragma once
23
24#include <optional>
25#include <vector>
26
27#include <Eigen/Core>
28#include <Eigen/Geometry>
29
32
34{
35 using armarx::armem::robot_state::localization::TransformQuery;
36 using armarx::armem::robot_state::localization::TransformResult;
37
39 {
40 public:
41 static TransformResult
42 lookupTransform(const armem::wm::CoreSegment& localizationCoreSegment,
43 const TransformQuery& query);
44
45 static TransformResult
46 lookupTransform(const armem::server::wm::CoreSegment& localizationCoreSegment,
47 const TransformQuery& query);
48
49
51 lookupTransformChain(const armem::wm::CoreSegment& localizationCoreSegment,
52 const TransformQuery& query);
53
55 lookupTransformChain(const armem::server::wm::CoreSegment& localizationCoreSegment,
56 const TransformQuery& query);
57
58
59 private:
60 template <class... Args>
61 static TransformResult
62 _lookupTransform(const armem::base::CoreSegmentBase<Args...>& localizationCoreSegment,
63 const TransformQuery& query);
64
65
66 template <class... Args>
68 _lookupTransformChain(const armem::base::CoreSegmentBase<Args...>& localizationCoreSegment,
69 const TransformQuery& query);
70
71
72 template <class... Args>
73 static std::vector<std::string>
74 _buildTransformChain(const armem::base::CoreSegmentBase<Args...>& localizationCoreSegment,
75 const TransformQuery& query);
76
77
78 template <class... Args>
79 static std::vector<Eigen::Isometry3f>
80 _obtainTransforms(const armem::base::CoreSegmentBase<Args...>& localizationCoreSegment,
81 const std::vector<std::string>& tfChain,
82 const std::string& agent,
83 const armem::Time& timestamp);
84
85
86 template <class... Args>
87 static Eigen::Isometry3f
88 _obtainTransform(const std::string& entityName,
89 const armem::base::ProviderSegmentBase<Args...>& agentProviderSegment,
90 const armem::Time& timestamp);
91
92 template <class... Args>
93 static std::optional<armarx::core::time::DateTime>
94 _obtainTimestamp(const armem::base::CoreSegmentBase<Args...>& localizationCoreSegment,
95 const armem::Time& timestamp);
96
97 static Eigen::Isometry3f _interpolateTransform(
98 const std::vector<::armarx::armem::robot_state::localization::Transform>& queue,
100
101 static ::armarx::armem::robot_state::localization::Transform
102 _convertEntityToTransform(const armem::wm::EntityInstance& item);
103 };
104} // namespace armarx::armem::robot_state::localization
std::string timestamp()
Data of a core segment containing multiple provider segments.
Data of a provider segment containing multiple entities.
static TransformResult lookupTransform(const armem::wm::CoreSegment &localizationCoreSegment, const TransformQuery &query)
static TransformChainResult lookupTransformChain(const armem::wm::CoreSegment &localizationCoreSegment, const TransformQuery &query)
Client-side working memory core segment.
Client-side working entity instance.
armarx::core::time::DateTime Time