Aikido
RnConstantSampler-impl.hpp
Go to the documentation of this file.
1 #include <stdexcept>
2 
3 #include <dart/dart.hpp>
4 
7 
8 namespace aikido {
9 namespace constraint {
10 namespace uniform {
11 
12 //==============================================================================
13 extern template class RConstantSampler<0>;
14 
15 extern template class RConstantSampler<1>;
16 
17 extern template class RConstantSampler<2>;
18 
19 extern template class RConstantSampler<3>;
20 
21 extern template class RConstantSampler<6>;
22 
23 extern template class RConstantSampler<Eigen::Dynamic>;
24 
25 namespace {
26 
27 //==============================================================================
28 template <int N>
29 class RnConstantSamplerSampleGenerator : public constraint::SampleGenerator
30 {
31 public:
32  using VectorNd = Eigen::Matrix<double, N, 1>;
33 
34  RnConstantSamplerSampleGenerator(
35  std::shared_ptr<const statespace::R<N>> _space, const VectorNd& _value);
36 
37  statespace::ConstStateSpacePtr getStateSpace() const override;
38 
39  bool sample(statespace::StateSpace::State* _state) override;
40 
41  int getNumSamples() const override;
42 
43  bool canSample() const override;
44 
45 private:
46  std::shared_ptr<const statespace::R<N>> mSpace;
47  VectorNd mValue;
48 
49 public:
50  EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(VectorNd::NeedsToAlign)
51 };
52 
53 //==============================================================================
54 template <int N>
55 RnConstantSamplerSampleGenerator<N>::RnConstantSamplerSampleGenerator(
56  std::shared_ptr<const statespace::R<N>> _space, const VectorNd& _value)
57  : mSpace(std::move(_space)), mValue(_value)
58 {
59  // Do nothing
60 }
61 
62 //==============================================================================
63 template <int N>
65 RnConstantSamplerSampleGenerator<N>::getStateSpace() const
66 {
67  return mSpace;
68 }
69 
70 //==============================================================================
71 template <int N>
72 bool RnConstantSamplerSampleGenerator<N>::sample(
73  statespace::StateSpace::State* _state)
74 {
75  mSpace->setValue(
76  static_cast<typename statespace::R<N>::State*>(_state), mValue);
77 
78  return true;
79 }
80 
81 //==============================================================================
82 template <int N>
83 int RnConstantSamplerSampleGenerator<N>::getNumSamples() const
84 {
85  return NO_LIMIT;
86 }
87 
88 //==============================================================================
89 template <int N>
90 bool RnConstantSamplerSampleGenerator<N>::canSample() const
91 {
92  return true;
93 }
94 
95 } // namespace
96 
97 //==============================================================================
98 template <int N>
100  std::shared_ptr<const statespace::R<N>> _space, const VectorNd& _value)
101  : mSpace(std::move(_space)), mValue(_value)
102 {
103  if (!mSpace)
104  throw std::invalid_argument("StateSpace is null.");
105 
106  if (mSpace->getDimension() != static_cast<std::size_t>(mValue.size()))
107  {
108  std::stringstream msg;
109  msg << "Value has incorrect dimension: expected " << mSpace->getDimension()
110  << ", got " << mValue.size() << ".";
111  throw std::invalid_argument(msg.str());
112  }
113 }
114 
115 //==============================================================================
116 template <int N>
118 {
119  return mSpace;
120 }
121 
122 //==============================================================================
123 template <int N>
124 std::unique_ptr<constraint::SampleGenerator>
126 {
127  return ::aikido::common::make_unique<RnConstantSamplerSampleGenerator<N>>(
128  mSpace, mValue);
129 }
130 
131 //==============================================================================
132 template <int N>
133 const typename RConstantSampler<N>::VectorNd&
135 {
136  return mValue;
137 }
138 
139 } // namespace uniform
140 } // namespace constraint
141 } // namespace aikido
aikido::constraint::uniform::RConstantSampler::VectorNd
Eigen::Matrix< double, N, 1 > VectorNd
Definition: RnConstantSampler.hpp:17
aikido::statespace::R
Represents a N-dimensional real vector space with vector addition as the group operation.
Definition: Rn.hpp:18
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::statespace::ConstStateSpacePtr
std::shared_ptr< const StateSpace > ConstStateSpacePtr
Definition: StateSpace.hpp:15
memory.hpp
aikido::constraint::uniform::RConstantSampler::mValue
VectorNd mValue
Definition: RnConstantSampler.hpp:37
aikido::constraint::uniform::RConstantSampler::getConstantValue
const VectorNd & getConstantValue() const
Returns constant value to be generated by this sampler.
Definition: RnConstantSampler-impl.hpp:134
aikido::constraint::uniform::RConstantSampler::createSampleGenerator
std::unique_ptr< constraint::SampleGenerator > createSampleGenerator() const override
Creates a SampleGenerator for sampling from this constraint.
Definition: RnConstantSampler-impl.hpp:125
mSpace
std::shared_ptr< const statespace::R< N > > mSpace
Definition: RnConstantSampler-impl.hpp:46
aikido::constraint::uniform::RConstantSampler
ConstantSampler for RealVectorStates.
Definition: RnConstantSampler.hpp:14
RnConstantSampler.hpp
aikido::constraint::uniform::RConstantSampler::mSpace
std::shared_ptr< const statespace::R< N > > mSpace
Definition: RnConstantSampler.hpp:36
aikido::constraint::uniform::RConstantSampler::getStateSpace
statespace::ConstStateSpacePtr getStateSpace() const override
Gets the StateSpace that this constraint operates on.
Definition: RnConstantSampler-impl.hpp:117
mValue
VectorNd mValue
Definition: RnConstantSampler-impl.hpp:47