HEBI C++ API  3.12.2
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
goal.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Eigen/Dense>
4 
5 namespace hebi {
6 namespace arm {
7 
8 // A class that specifies a goal position of one or more waypoint and/or
9 // auxilary states.
10 // Static create methods are provided for various cases; in the case that
11 // velocities or accelerations are omitted, the default behavior is to leave
12 // these unconstrained except for a final "0" state. For aux states, this is
13 // left as unchanged. For times, this is left to the Arm object to fill in a
14 // heuristic.
15 class Goal {
16 
17 public:
19  // Single waypoint static create functions
21 
22  // Single waypoint, default vel/accel, no time
23  static Goal createFromPosition(const Eigen::VectorXd& positions) {
24  return Goal(Eigen::VectorXd(0),
25  toMatrix(positions),
26  nanWithZeroRight(positions.size(), 1),
27  nanWithZeroRight(positions.size(), 1),
28  Eigen::MatrixXd(0, 0));
29  }
30 
31  // Single waypoint, default vel/accel
32  static Goal createFromPosition(double time, const Eigen::VectorXd& positions) {
33  return Goal(toVector(time),
34  toMatrix(positions),
35  nanWithZeroRight(positions.size(), 1),
36  nanWithZeroRight(positions.size(), 1),
37  Eigen::MatrixXd(0, 0));
38  }
39 
40  // Single waypoint, no time
41  static Goal createFromWaypoint(const Eigen::VectorXd& positions,
42  const Eigen::VectorXd& velocities,
43  const Eigen::VectorXd& accelerations) {
44  return Goal(Eigen::VectorXd(0),
45  toMatrix(positions),
46  toMatrix(velocities),
47  toMatrix(accelerations),
48  Eigen::MatrixXd(0, 0));
49  }
50 
51  // Single waypoint
52  static Goal createFromWaypoint(double time,
53  const Eigen::VectorXd& positions,
54  const Eigen::VectorXd& velocities,
55  const Eigen::VectorXd& accelerations) {
56  return Goal(toVector(time),
57  toMatrix(positions),
58  toMatrix(velocities),
59  toMatrix(accelerations),
60  Eigen::MatrixXd(0, 0));
61  }
62 
63  // Single waypoints + aux state, no time
64  static Goal createFromWaypointWithAux(const Eigen::VectorXd& positions,
65  const Eigen::VectorXd& velocities,
66  const Eigen::VectorXd& accelerations,
67  const Eigen::VectorXd& aux) {
68  return Goal(Eigen::VectorXd(0),
69  toMatrix(positions),
70  toMatrix(velocities),
71  toMatrix(accelerations),
72  toMatrix(aux));
73  }
74 
75  // Single waypoints + aux state
76  static Goal createFromWaypointWithAux(double time,
77  const Eigen::VectorXd& positions,
78  const Eigen::VectorXd& velocities,
79  const Eigen::VectorXd& accelerations,
80  const Eigen::VectorXd& aux) {
81  return Goal(toVector(time),
82  toMatrix(positions),
83  toMatrix(velocities),
84  toMatrix(accelerations),
85  toMatrix(aux));
86  }
87 
89  // Multiple waypoint static create functions
91 
92  // Multiple waypoints, default vel/accel, no time
93  static Goal createFromPositions(const Eigen::MatrixXd& positions) {
94  return Goal(Eigen::VectorXd(0),
95  positions,
96  nanWithZeroRight(positions.rows(), positions.cols()),
97  nanWithZeroRight(positions.rows(), positions.cols()),
98  Eigen::MatrixXd(0, 0));
99  }
100 
101  // Multiple waypoints, default vel/accel
102  static Goal createFromPositions(const Eigen::VectorXd& times,
103  const Eigen::MatrixXd& positions) {
104  return Goal(times,
105  positions,
106  nanWithZeroRight(positions.rows(), positions.cols()),
107  nanWithZeroRight(positions.rows(), positions.cols()),
108  Eigen::MatrixXd(0, 0));
109  }
110 
111  // Multiple waypoints, no time
112  static Goal createFromWaypoints(const Eigen::MatrixXd& positions,
113  const Eigen::MatrixXd& velocities,
114  const Eigen::MatrixXd& accelerations) {
115  return Goal(Eigen::VectorXd(0),
116  positions,
117  velocities,
119  Eigen::MatrixXd(0, 0));
120  }
121 
122  // Multiple waypoints
123  static Goal createFromWaypoints(const Eigen::VectorXd& times,
124  const Eigen::MatrixXd& positions,
125  const Eigen::MatrixXd& velocities,
126  const Eigen::MatrixXd& accelerations) {
127  return Goal(times,
128  positions,
129  velocities,
131  Eigen::MatrixXd(0, 0));
132  }
133 
134  // Multiple waypoints + aux state, no time
135  static Goal createFromWaypointsWithAux(const Eigen::MatrixXd& positions,
136  const Eigen::MatrixXd& velocities,
137  const Eigen::MatrixXd& accelerations,
138  const Eigen::MatrixXd& aux) {
139  return Goal(Eigen::VectorXd(0),
140  positions,
141  velocities,
143  aux);
144  }
145 
146  // Multiple waypoints + aux state
147  static Goal createFromWaypointsWithAux(const Eigen::VectorXd& times,
148  const Eigen::MatrixXd& positions,
149  const Eigen::MatrixXd& velocities,
150  const Eigen::MatrixXd& accelerations,
151  const Eigen::MatrixXd& aux) {
152  return Goal(times,
153  positions,
154  velocities,
156  aux);
157  }
158 
159  const Eigen::VectorXd& times() const { return times_; }
160  const Eigen::MatrixXd& positions() const { return positions_; }
161  const Eigen::MatrixXd& velocities() const { return velocities_; }
162  const Eigen::MatrixXd& accelerations() const { return accelerations_; }
163  const Eigen::MatrixXd& aux() const { return aux_; }
164 
165 private:
166 
167  Goal(const Eigen::VectorXd& times,
168  const Eigen::MatrixXd& positions,
169  const Eigen::MatrixXd& velocities,
170  const Eigen::MatrixXd& accelerations,
171  const Eigen::MatrixXd& aux)
172  : times_(times),
173  positions_(positions),
174  velocities_(velocities),
175  accelerations_(accelerations),
176  aux_(aux) {}
177 
178  // Helper function to create unconstrained points along a motion, with nan at the right side.
179  static Eigen::MatrixXd nanWithZeroRight(size_t num_joints, size_t num_waypoints) {
180  double nan = std::numeric_limits<double>::quiet_NaN();
181  Eigen::MatrixXd matrix(num_joints, num_waypoints);
182  matrix.setConstant(nan);
183  matrix.rightCols<1>().setZero();
184  return matrix;
185  }
186 
187  static Eigen::VectorXd toVector(double scalar) {
188  Eigen::VectorXd vector(1);
189  vector[0] = scalar;
190  return vector;
191  }
192 
193  static Eigen::MatrixXd toMatrix(const Eigen::VectorXd& vector) {
194  Eigen::MatrixXd matrix(vector.size(), 1);
195  matrix.col(0) = vector;
196  return matrix;
197  }
198 
199  const Eigen::VectorXd times_{0};
200  const Eigen::MatrixXd positions_{0, 0};
201  const Eigen::MatrixXd velocities_{0, 0};
202  const Eigen::MatrixXd accelerations_{0, 0};
203  const Eigen::MatrixXd aux_{0, 0};
204 };
205 
206 } // namespace arm
207 } // namespace hebi
static Goal createFromPositions(const Eigen::VectorXd &times, const Eigen::MatrixXd &positions)
Definition: goal.hpp:102
static Goal createFromWaypoint(const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations)
Definition: goal.hpp:41
static Goal createFromWaypoint(double time, const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations)
Definition: goal.hpp:52
Definition: arm.cpp:10
const Eigen::MatrixXd & positions() const
Definition: goal.hpp:160
static Goal createFromWaypointWithAux(double time, const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations, const Eigen::VectorXd &aux)
Definition: goal.hpp:76
static Goal createFromPosition(const Eigen::VectorXd &positions)
Definition: goal.hpp:23
static Goal createFromWaypointsWithAux(const Eigen::VectorXd &times, const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations, const Eigen::MatrixXd &aux)
Definition: goal.hpp:147
Definition: arm.cpp:11
static Goal createFromWaypointsWithAux(const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations, const Eigen::MatrixXd &aux)
Definition: goal.hpp:135
static Goal createFromWaypoints(const Eigen::VectorXd &times, const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations)
Definition: goal.hpp:123
const Eigen::VectorXd & times() const
Definition: goal.hpp:159
const Eigen::MatrixXd & accelerations() const
Definition: goal.hpp:162
const Eigen::MatrixXd & aux() const
Definition: goal.hpp:163
static Goal createFromPositions(const Eigen::MatrixXd &positions)
Definition: goal.hpp:93
static Goal createFromWaypoints(const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations)
Definition: goal.hpp:112
static Goal createFromPosition(double time, const Eigen::VectorXd &positions)
Definition: goal.hpp:32
Definition: goal.hpp:15
const Eigen::MatrixXd & velocities() const
Definition: goal.hpp:161
static Goal createFromWaypointWithAux(const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations, const Eigen::VectorXd &aux)
Definition: goal.hpp:64