-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathMetaSkeletonStateSaver.hpp
More file actions
68 lines (52 loc) · 2.01 KB
/
MetaSkeletonStateSaver.hpp
File metadata and controls
68 lines (52 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef AIKIDO_STATESPACE_DART_METASKELETONSTATESAVER_HPP_
#define AIKIDO_STATESPACE_DART_METASKELETONSTATESAVER_HPP_
#include <dart/dynamics/MetaSkeleton.hpp>
#include "aikido/common/EnumFlags.hpp"
/// Options to specify what MetaSkeletonStateSaver should save.
enum class MetaSkeletonStateSaverOptions
{
NONE = 0,
POSITIONS = 1 << 0,
POSITION_LIMITS = 1 << 1,
};
AIKIDO_ENABLE_BITWISE_OPERATORS(MetaSkeletonStateSaverOptions)
namespace aikido {
namespace statespace {
namespace dart {
/// RAII class to save and restore a MetaSkeleton's state.
/// FIXME: currently only saves position and joint limits.
class MetaSkeletonStateSaver
{
public:
using Options = MetaSkeletonStateSaverOptions;
/// Construct a MetaSkeletonStateSaver and save the current state of the \c
/// MetaSkeleton. This state will be restored when MetaSkeletonStateSaver is
/// destructed.
///
/// \param[in] metaskeleton MetaSkeleton to save/restore
/// \param[in] options Options to specify what should be saved
explicit MetaSkeletonStateSaver(
::dart::dynamics::MetaSkeletonPtr metaskeleton,
Options options = Options::POSITIONS | Options::POSITION_LIMITS);
virtual ~MetaSkeletonStateSaver();
// MetaSkeletonStateSaver is uncopyable, must use std::move
MetaSkeletonStateSaver(const MetaSkeletonStateSaver&) = delete;
MetaSkeletonStateSaver& operator=(const MetaSkeletonStateSaver&) = delete;
MetaSkeletonStateSaver(MetaSkeletonStateSaver&&) = default;
MetaSkeletonStateSaver& operator=(MetaSkeletonStateSaver&&) = default;
private:
/// MetaSkeleton to save the state of
::dart::dynamics::MetaSkeletonPtr mMetaSkeleton;
/// Options to specify what should be saved
Options mOptions;
/// Saved positions
Eigen::VectorXd mPositions;
/// Saved position lower limits
Eigen::VectorXd mPositionLowerLimits;
/// Saved position upper limits
Eigen::VectorXd mPositionUpperLimits;
};
} // namespace dart
} // namespace statespace
} // namespace aikido
#endif // ifndef AIKIDO_STATESPACE_DART_METASKELETONSTATESAVER_HPP_