kinematics-dynamics
Loading...
Searching...
No Matches
ConfigurationSelector.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __CONFIGURATION_SELECTOR_HPP__
4#define __CONFIGURATION_SELECTOR_HPP__
5
6#include <vector>
7
8#include <kdl/frames.hpp>
9#include <kdl/jntarray.hpp>
10#include <kdl/utilities/utility.h>
11
12namespace roboticslab
13{
14
21{
22public:
29 ConfigurationSelector(const KDL::JntArray & qMin, const KDL::JntArray & qMax)
30 : _qMin(qMin),
31 _qMax(qMax)
32 {}
33
35 virtual ~ConfigurationSelector() = default;
36
45 virtual bool configure(const std::vector<KDL::JntArray> & solutions, const std::vector<bool> & reachability);
46
54 virtual bool findOptimalConfiguration(const KDL::JntArray & qGuess) = 0;
55
61 virtual void retrievePose(KDL::JntArray & q) const
62 {
63 q = *configs[lastValid].retrievePose();
64 }
65
72 { return lastValid; }
73
74 static constexpr int INVALID_CONFIG = -1;
75
76protected:
81 {
82 public:
84 void store(const KDL::JntArray * q)
85 { this->q = q; }
86
88 const KDL::JntArray * retrievePose() const
89 { return q; }
90
92 bool isValid() const
93 { return valid; }
94
97 { valid = false; }
98
99 private:
100 const KDL::JntArray * q {nullptr};
101 bool valid {true};
102 };
103
111 virtual bool validate(Configuration & config);
112
122 static bool checkJointInLimits(double q, double qMin, double qMax)
123 {
124 return q >= (qMin - KDL::epsilon) && q <= (qMax + KDL::epsilon);
125 }
126
127 KDL::JntArray _qMin, _qMax;
128
129 std::vector<Configuration> configs;
130 int lastValid {INVALID_CONFIG};
131};
132
146{
147public:
154 ConfigurationSelectorLeastOverallAngularDisplacement(const KDL::JntArray & qMin, const KDL::JntArray & qMax)
155 : ConfigurationSelector(qMin, qMax)
156 {}
157
158 bool findOptimalConfiguration(const KDL::JntArray & qGuess) override;
159
160protected:
162 std::vector<double> getDiffs(const KDL::JntArray & qGuess, const Configuration & config);
163};
164
174{
175public:
182 ConfigurationSelectorHumanoidGait(const KDL::JntArray & qMin, const KDL::JntArray & qMax)
184 {}
185
186 bool findOptimalConfiguration(const KDL::JntArray & qGuess) override;
187
188private:
190 bool applyConstraints(const Configuration & config);
191};
192
202{
203public:
209 virtual ConfigurationSelector * create() const = 0;
210 virtual ~ConfigurationSelectorFactory() = default;
211
212protected:
219 ConfigurationSelectorFactory(const KDL::JntArray & qMin, const KDL::JntArray & qMax)
220 : _qMin(qMin), _qMax(qMax)
221 {}
222
223 KDL::JntArray _qMin, _qMax;
224};
225
234{
235public:
242 ConfigurationSelectorLeastOverallAngularDisplacementFactory(const KDL::JntArray & qMin, const KDL::JntArray & qMax)
243 : ConfigurationSelectorFactory(qMin, qMax)
244 {}
245
246 ConfigurationSelector * create() const override
247 {
249 }
250};
251
260{
261public:
268 ConfigurationSelectorHumanoidGaitFactory(const KDL::JntArray & qMin, const KDL::JntArray & qMax)
269 : ConfigurationSelectorFactory(qMin, qMax)
270 {}
271
272 ConfigurationSelector * create() const override
273 {
274 if (_qMin.rows() == 6 && _qMax.rows() == 6)
275 {
276 return new ConfigurationSelectorHumanoidGait(_qMin, _qMax);
277 }
278 else
279 {
280 return nullptr;
281 }
282 }
283};
284
285} // namespace roboticslab
286
287#endif // __CONFIGURATION_SELECTOR_HPP__
Base factory class for ConfigurationSelector.
Definition ConfigurationSelector.hpp:202
ConfigurationSelectorFactory(const KDL::JntArray &qMin, const KDL::JntArray &qMax)
Constructor.
Definition ConfigurationSelector.hpp:219
virtual ConfigurationSelector * create() const =0
Creates an instance of the concrete class.
Implementation factory class for ConfigurationSelectorHumanoidGait.
Definition ConfigurationSelector.hpp:260
ConfigurationSelectorHumanoidGaitFactory(const KDL::JntArray &qMin, const KDL::JntArray &qMax)
Constructor.
Definition ConfigurationSelector.hpp:268
ConfigurationSelector * create() const override
Creates an instance of the concrete class.
Definition ConfigurationSelector.hpp:272
IK solver configuration strategy selector based on human walking.
Definition ConfigurationSelector.hpp:174
bool applyConstraints(const Configuration &config)
Determines whether the configuration is valid according to this selector's premises.
Definition ConfigurationSelectorHumanoidGait.cpp:29
bool findOptimalConfiguration(const KDL::JntArray &qGuess) override
Analyzes available configurations and selects the optimal one.
Definition ConfigurationSelectorHumanoidGait.cpp:11
ConfigurationSelectorHumanoidGait(const KDL::JntArray &qMin, const KDL::JntArray &qMax)
Constructor.
Definition ConfigurationSelector.hpp:182
Implementation factory class for ConfigurationSelectorLeastOverallAngularDisplacement.
Definition ConfigurationSelector.hpp:234
ConfigurationSelector * create() const override
Creates an instance of the concrete class.
Definition ConfigurationSelector.hpp:246
ConfigurationSelectorLeastOverallAngularDisplacementFactory(const KDL::JntArray &qMin, const KDL::JntArray &qMax)
Constructor.
Definition ConfigurationSelector.hpp:242
IK solver configuration strategy selector based on the overall displacement of all joints.
Definition ConfigurationSelector.hpp:146
ConfigurationSelectorLeastOverallAngularDisplacement(const KDL::JntArray &qMin, const KDL::JntArray &qMax)
Constructor.
Definition ConfigurationSelector.hpp:154
std::vector< double > getDiffs(const KDL::JntArray &qGuess, const Configuration &config)
Obtains vector of differences between current and desired joint values.
Definition ConfigurationSelectorLeastOverallAngularDisplacement.cpp:46
bool findOptimalConfiguration(const KDL::JntArray &qGuess) override
Analyzes available configurations and selects the optimal one.
Definition ConfigurationSelectorLeastOverallAngularDisplacement.cpp:12
Helper class to store a specific robot configuration.
Definition ConfigurationSelector.hpp:81
void store(const KDL::JntArray *q)
Initialize joint values.
Definition ConfigurationSelector.hpp:84
bool isValid() const
Whether this configuration is attainable or not.
Definition ConfigurationSelector.hpp:92
const KDL::JntArray * retrievePose() const
Retrieve stored joint values.
Definition ConfigurationSelector.hpp:88
void invalidate()
Mark this configuration as invalid.
Definition ConfigurationSelector.hpp:96
Abstract base class for a robot configuration strategy selector.
Definition ConfigurationSelector.hpp:21
ConfigurationSelector(const KDL::JntArray &qMin, const KDL::JntArray &qMax)
Constructor.
Definition ConfigurationSelector.hpp:29
virtual bool findOptimalConfiguration(const KDL::JntArray &qGuess)=0
Analyzes available configurations and selects the optimal one.
virtual ~ConfigurationSelector()=default
Destructor.
int getValidSolutionIndex() const
Retrieves the index of the last valid solution.
Definition ConfigurationSelector.hpp:71
virtual bool configure(const std::vector< KDL::JntArray > &solutions, const std::vector< bool > &reachability)
Stores initial values for a specific pose.
Definition ConfigurationSelector.cpp:9
virtual bool validate(Configuration &config)
Validates a specific robot configuration.
Definition ConfigurationSelector.cpp:26
static bool checkJointInLimits(double q, double qMin, double qMax)
Checks if a joint value is within its limits.
Definition ConfigurationSelector.hpp:122
virtual void retrievePose(KDL::JntArray &q) const
Queries computed joint values for the optimal configuration.
Definition ConfigurationSelector.hpp:61
The main, catch-all namespace for Robotics Lab UC3M.
Definition groups.dox:6