Aikido
defaults-impl.hpp
Go to the documentation of this file.
13 
14 namespace aikido {
15 namespace distance {
16 namespace detail {
17 
18 using Ptr = std::unique_ptr<DistanceMetric>;
19 
20 //==============================================================================
21 template <class Space>
23 {
24  // Nothing defined
25 };
26 
27 //==============================================================================
28 template <>
29 struct createDistanceMetricFor_impl<const statespace::R0>
30 {
31  static Ptr create(std::shared_ptr<const statespace::R0> _sspace)
32  {
33  return ::aikido::common::make_unique<R0Euclidean>(std::move(_sspace));
34  }
35 };
36 
37 //==============================================================================
38 template <>
39 struct createDistanceMetricFor_impl<const statespace::R1>
40 {
41  static Ptr create(std::shared_ptr<const statespace::R1> _sspace)
42  {
43  return ::aikido::common::make_unique<R1Euclidean>(std::move(_sspace));
44  }
45 };
46 
47 //==============================================================================
48 template <>
49 struct createDistanceMetricFor_impl<const statespace::R2>
50 {
51  static Ptr create(std::shared_ptr<const statespace::R2> _sspace)
52  {
53  return ::aikido::common::make_unique<R2Euclidean>(std::move(_sspace));
54  }
55 };
56 
57 //==============================================================================
58 template <>
59 struct createDistanceMetricFor_impl<const statespace::R3>
60 {
61  static Ptr create(std::shared_ptr<const statespace::R3> _sspace)
62  {
63  return ::aikido::common::make_unique<R3Euclidean>(std::move(_sspace));
64  }
65 };
66 
67 //==============================================================================
68 template <>
69 struct createDistanceMetricFor_impl<const statespace::R6>
70 {
71  static Ptr create(std::shared_ptr<const statespace::R6> _sspace)
72  {
73  return ::aikido::common::make_unique<R6Euclidean>(std::move(_sspace));
74  }
75 };
76 
77 //==============================================================================
78 template <>
79 struct createDistanceMetricFor_impl<const statespace::SO2>
80 {
81  static Ptr create(std::shared_ptr<const statespace::SO2> _sspace)
82  {
83  return ::aikido::common::make_unique<SO2Angular>(std::move(_sspace));
84  }
85 };
86 
87 //==============================================================================
88 template <>
89 struct createDistanceMetricFor_impl<const statespace::SO3>
90 {
91  static Ptr create(std::shared_ptr<const statespace::SO3> _sspace)
92  {
93  return ::aikido::common::make_unique<SO3Angular>(std::move(_sspace));
94  }
95 };
96 
97 //==============================================================================
98 template <>
99 struct createDistanceMetricFor_impl<const statespace::CartesianProduct>
100 {
101  static Ptr create(std::shared_ptr<const statespace::CartesianProduct> _sspace)
102  {
103  if (_sspace == nullptr)
104  throw std::invalid_argument(
105  "Cannot create distance metric for null statespace.");
106 
107  std::vector<std::shared_ptr<DistanceMetric> > metrics;
108  metrics.reserve(_sspace->getNumSubspaces());
109 
110  for (std::size_t i = 0; i < _sspace->getNumSubspaces(); ++i)
111  {
112  auto subspace = _sspace->getSubspace<>(i);
113  auto metric = createDistanceMetric(std::move(subspace));
114  metrics.emplace_back(std::move(metric));
115  }
116 
117  return ::aikido::common::make_unique<CartesianProductWeighted>(
118  std::move(_sspace), std::move(metrics));
119  }
120 };
121 
122 //==============================================================================
123 template <>
124 struct createDistanceMetricFor_impl<const statespace::SE2>
125 {
126  static Ptr create(std::shared_ptr<const statespace::SE2> _sspace)
127  {
128  return ::aikido::common::make_unique<SE2Weighted>(std::move(_sspace));
129  }
130 };
131 
132 //==============================================================================
135  const statespace::R0,
136  const statespace::R1,
137  const statespace::R2,
138  const statespace::R3,
139  const statespace::R6,
140  const statespace::SO2,
141  const statespace::SO3,
143 
144 } // namespace detail
145 
146 //==============================================================================
147 template <class Space>
148 std::unique_ptr<DistanceMetric> createDistanceMetricFor(
149  std::shared_ptr<Space> _sspace)
150 {
151  if (_sspace == nullptr)
152  throw std::invalid_argument("_sspace is null.");
153 
155  std::move(_sspace));
156 }
157 
158 } // namespace distance
159 } // namespace aikido
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::SE2 >::create
static Ptr create(std::shared_ptr< const statespace::SE2 > _sspace)
Definition: defaults-impl.hpp:126
SO2.hpp
aikido::distance::createDistanceMetric
std::unique_ptr< DistanceMetric > createDistanceMetric(statespace::ConstStateSpacePtr _sspace)
Creates a DistanceMetric that is appropriate for the statespace.
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::SO3 >::create
static Ptr create(std::shared_ptr< const statespace::SO3 > _sspace)
Definition: defaults-impl.hpp:91
aikido::statespace::R6
R< 6 > R6
Definition: Rn.hpp:163
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::SO2 >::create
static Ptr create(std::shared_ptr< const statespace::SO2 > _sspace)
Definition: defaults-impl.hpp:81
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
RnEuclidean.hpp
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::R2 >::create
static Ptr create(std::shared_ptr< const statespace::R2 > _sspace)
Definition: defaults-impl.hpp:51
aikido::statespace::SO3
The two-dimensional special orthogonal group SO(3), i.e.
Definition: SO3.hpp:17
aikido::distance::detail::SupportedStateSpaces
common::type_list< const statespace::CartesianProduct, const statespace::R0, const statespace::R1, const statespace::R2, const statespace::R3, const statespace::R6, const statespace::SO2, const statespace::SO3, const statespace::SE2 > SupportedStateSpaces
Definition: defaults-impl.hpp:142
SO3Angular.hpp
memory.hpp
CartesianProduct.hpp
aikido::distance::createDistanceMetricFor
std::unique_ptr< DistanceMetric > createDistanceMetricFor(std::shared_ptr< Space > _sspace)
Creates a DistanceMetric that is appropriate for the statespace of type Space.
Definition: defaults-impl.hpp:148
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::CartesianProduct >::create
static Ptr create(std::shared_ptr< const statespace::CartesianProduct > _sspace)
Definition: defaults-impl.hpp:101
aikido::statespace::SE2
The two-dimensional special Euclidean group SE(2), i.e.
Definition: SE2.hpp:19
aikido::statespace::R3
R< 3 > R3
Definition: Rn.hpp:162
CartesianProductWeighted.hpp
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::R0 >::create
static Ptr create(std::shared_ptr< const statespace::R0 > _sspace)
Definition: defaults-impl.hpp:31
SO3.hpp
aikido::common::type_list
Wrapper for a variadic template parameter pack of types.
Definition: metaprogramming.hpp:13
aikido::distance::SE2
Computes the shortest distance between two angles in SE2.
Definition: SE2.hpp:11
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::R6 >::create
static Ptr create(std::shared_ptr< const statespace::R6 > _sspace)
Definition: defaults-impl.hpp:71
aikido::statespace::R2
R< 2 > R2
Definition: Rn.hpp:161
SE2Weighted.hpp
SO2Angular.hpp
SE2.hpp
Rn.hpp
metaprogramming.hpp
aikido::statespace::R0
R< 0 > R0
Definition: Rn.hpp:159
aikido::distance::detail::Ptr
std::unique_ptr< DistanceMetric > Ptr
Definition: defaults-impl.hpp:18
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::R1 >::create
static Ptr create(std::shared_ptr< const statespace::R1 > _sspace)
Definition: defaults-impl.hpp:41
aikido::statespace::R1
R< 1 > R1
Definition: Rn.hpp:160
aikido::statespace::CartesianProduct
Represents the Cartesian product of other StateSpaces.
Definition: CartesianProduct.hpp:18
aikido::distance::detail::createDistanceMetricFor_impl< const statespace::R3 >::create
static Ptr create(std::shared_ptr< const statespace::R3 > _sspace)
Definition: defaults-impl.hpp:61
aikido::statespace::SO2
The two-dimensional special orthogonal group SO(2), i.e.
Definition: SO2.hpp:18
aikido::distance::detail::createDistanceMetricFor_impl
Definition: defaults-impl.hpp:22