DART 6.7.3
Loading...
Searching...
No Matches
ConfigurationSpace.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2019, The DART development contributors
3 * All rights reserved.
4 *
5 * The list of contributors can be found at:
6 * https://github.com/dartsim/dart/blob/master/LICENSE
7 *
8 * This file is provided under the following "BSD-style" License:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
11 * conditions are met:
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef DART_MATH_DETAIL_CONFIGURATIONSPACE_H_
34#define DART_MATH_DETAIL_CONFIGURATIONSPACE_H_
35
37
39
40namespace dart {
41namespace math {
42
43namespace detail {
44
45template<bool> struct Range;
46
47//==============================================================================
48template <typename MatrixType, int Size, typename Enable = Range<true>>
50{
51 static void run(const MatrixType& matrix, MatrixType& result)
52 {
53 result = matrix.ldlt().solve(MatrixType::Identity());
54 }
55};
56
57//==============================================================================
58template <typename MatrixType, int Size>
59struct inverseImpl<MatrixType, Size, Range<(0 <= Size && Size <= 4)>>
60{
61 static void run(const MatrixType& matrix, MatrixType& result)
62 {
63 result = matrix.inverse();
64 }
65};
66
67//==============================================================================
68template <typename SpaceT>
70{
71 static typename SpaceT::EuclideanPoint run(
72 const typename SpaceT::Point& point)
73 {
74 return point;
75 }
76};
77
78//==============================================================================
79template <>
81{
83 const typename SO3Space::Point& point)
84 {
85 return math::logMap(point);
86 }
87};
88
89//==============================================================================
90template <>
92{
94 const typename SE3Space::Point& point)
95 {
97
98 x.head<3>() = math::logMap(point.linear());
99 x.tail<3>() = point.translation();
100
101 return x;
102 }
103};
104
105//==============================================================================
106template <typename SpaceT>
108{
109 static typename SpaceT::Point run(
110 const typename SpaceT::EuclideanPoint& point)
111 {
112 return point;
113 }
114};
115
116//==============================================================================
117template <>
119{
120 static typename SO3Space::Point run(
121 const typename SO3Space::EuclideanPoint& point)
122 {
123 return math::expMapRot(point);
124 }
125};
126
127//==============================================================================
128template <>
130{
131 static typename SE3Space::Point run(
132 const typename SE3Space::EuclideanPoint& point)
133 {
134 Eigen::Isometry3d tf(Eigen::Isometry3d::Identity());
135
136 tf.linear() = math::expMapRot(point.head<3>());
137 tf.translation() = point.tail<3>();
138
139 return tf;
140 }
141};
142
143//==============================================================================
144template <typename SpaceT>
146{
147 static typename SpaceT::Point run(
148 const typename SpaceT::Point& pos,
149 const typename SpaceT::Vector& vel,
150 double dt)
151 {
152 return pos + dt * vel;
153 }
154};
155
156//==============================================================================
157template <>
159{
160 static typename SO3Space::Point run(
161 const typename SO3Space::Point& pos,
162 const typename SO3Space::Vector& vel,
163 double dt)
164 {
165 return pos * toManifoldPoint<SO3Space>(vel * dt);
166 }
167};
168
169//==============================================================================
170template <>
172{
173 static typename SE3Space::Point run(
174 const typename SE3Space::Point& pos,
175 const typename SE3Space::Vector& vel,
176 double dt)
177 {
178 return pos * toManifoldPoint<SE3Space>(vel * dt);
179 }
180};
181
182} // namespace detail
183
184
185
186//==============================================================================
187template <typename SpaceT>
188typename SpaceT::Matrix inverse(const typename SpaceT::Matrix& mat)
189{
190 typename SpaceT::Matrix res;
191
193 mat, res);
194
195 return res;
196}
197
198//==============================================================================
199template <typename SpaceT>
200typename SpaceT::EuclideanPoint
201toEuclideanPoint(const typename SpaceT::Point& point)
202{
204}
205
206//==============================================================================
207template <typename SpaceT>
208typename SpaceT::Point
209toManifoldPoint(const typename SpaceT::EuclideanPoint& point)
210{
212}
213
214//==============================================================================
215template <typename SpaceT>
216typename SpaceT::Point integratePosition(
217 const typename SpaceT::Point& pos,
218 const typename SpaceT::Vector& vel,
219 double dt)
220{
222}
223
224//==============================================================================
225template <typename SpaceT>
226typename SpaceT::Vector integrateVelocity(
227 const typename SpaceT::Vector& vel,
228 const typename SpaceT::Vector& acc,
229 double dt)
230{
231 return vel + acc * dt;
232}
233
234} // namespace math
235} // namespace dart
236
237#endif // DART_MATH_DETAIL_CONFIGURATIONSPACE_H_
CollisionResult * result
Collision result of DART.
Definition FCLCollisionDetector.cpp:157
Matrix< double, 6, 1 > Vector6d
Definition MathTypes.hpp:49
SpaceT::Matrix inverse(const typename SpaceT::Matrix &mat)
Definition ConfigurationSpace.hpp:188
SpaceT::EuclideanPoint toEuclideanPoint(const typename SpaceT::Point &point)
Definition ConfigurationSpace.hpp:201
SpaceT::Point toManifoldPoint(const typename SpaceT::EuclideanPoint &point)
Definition ConfigurationSpace.hpp:209
SpaceT::Vector integrateVelocity(const typename SpaceT::Vector &vel, const typename SpaceT::Vector &acc, double dt)
Definition ConfigurationSpace.hpp:226
Eigen::Vector3d logMap(const Eigen::Matrix3d &_R)
Log mapping.
Definition Geometry.cpp:515
SpaceT::Point integratePosition(const typename SpaceT::Point &pos, const typename SpaceT::Vector &vel, double dt)
Definition ConfigurationSpace.hpp:216
Eigen::Matrix3d expMapRot(const Eigen::Vector3d &_q)
Computes the Rotation matrix from a given expmap vector.
Definition Geometry.cpp:427
Definition BulletCollisionDetector.cpp:63
Definition ConfigurationSpace.hpp:93
Eigen::Vector6d EuclideanPoint
Definition ConfigurationSpace.hpp:100
Eigen::Isometry3d Point
Definition ConfigurationSpace.hpp:99
Eigen::Vector6d Vector
Definition ConfigurationSpace.hpp:101
Definition ConfigurationSpace.hpp:78
Eigen::Vector3d EuclideanPoint
Definition ConfigurationSpace.hpp:85
Eigen::Vector3d Vector
Definition ConfigurationSpace.hpp:86
Eigen::Matrix3d Point
Definition ConfigurationSpace.hpp:84
Definition ConfigurationSpace.hpp:45
static SE3Space::Point run(const typename SE3Space::Point &pos, const typename SE3Space::Vector &vel, double dt)
Definition ConfigurationSpace.hpp:173
static SO3Space::Point run(const typename SO3Space::Point &pos, const typename SO3Space::Vector &vel, double dt)
Definition ConfigurationSpace.hpp:160
Definition ConfigurationSpace.hpp:146
static SpaceT::Point run(const typename SpaceT::Point &pos, const typename SpaceT::Vector &vel, double dt)
Definition ConfigurationSpace.hpp:147
static void run(const MatrixType &matrix, MatrixType &result)
Definition ConfigurationSpace.hpp:61
Definition ConfigurationSpace.hpp:50
static void run(const MatrixType &matrix, MatrixType &result)
Definition ConfigurationSpace.hpp:51
static SE3Space::EuclideanPoint run(const typename SE3Space::Point &point)
Definition ConfigurationSpace.hpp:93
static SO3Space::EuclideanPoint run(const typename SO3Space::Point &point)
Definition ConfigurationSpace.hpp:82
Definition ConfigurationSpace.hpp:70
static SpaceT::EuclideanPoint run(const typename SpaceT::Point &point)
Definition ConfigurationSpace.hpp:71
static SE3Space::Point run(const typename SE3Space::EuclideanPoint &point)
Definition ConfigurationSpace.hpp:131
static SO3Space::Point run(const typename SO3Space::EuclideanPoint &point)
Definition ConfigurationSpace.hpp:120
Definition ConfigurationSpace.hpp:108
static SpaceT::Point run(const typename SpaceT::EuclideanPoint &point)
Definition ConfigurationSpace.hpp:109