25 return Goal(Eigen::VectorXd(0),
29 Eigen::MatrixXd(0, 0));
34 return Goal(toVector(time),
38 Eigen::MatrixXd(0, 0));
45 return Goal(Eigen::VectorXd(0),
49 Eigen::MatrixXd(0, 0));
57 return Goal(toVector(time),
61 Eigen::MatrixXd(0, 0));
68 const Eigen::VectorXd&
aux) {
69 return Goal(Eigen::VectorXd(0),
81 const Eigen::VectorXd&
aux) {
82 return Goal(toVector(time),
95 return Goal(Eigen::VectorXd(0),
99 Eigen::MatrixXd(0, 0));
109 Eigen::MatrixXd(0, 0));
116 return Goal(Eigen::VectorXd(0),
120 Eigen::MatrixXd(0, 0));
132 Eigen::MatrixXd(0, 0));
139 const Eigen::MatrixXd&
aux) {
140 return Goal(Eigen::VectorXd(0),
152 const Eigen::MatrixXd&
aux) {
160 const Eigen::VectorXd&
times()
const {
return times_; }
161 const Eigen::MatrixXd&
positions()
const {
return positions_; }
162 const Eigen::MatrixXd&
velocities()
const {
return velocities_; }
164 const Eigen::MatrixXd&
aux()
const {
return aux_; }
169 std::tuple<std::shared_ptr<hebi::trajectory::Trajectory>, Eigen::MatrixXd, Eigen::VectorXd>
buildTrajectoryFrom(
const Eigen::VectorXd& start_pos,
const Eigen::VectorXd* start_vel,
const Eigen::VectorXd* start_accel)
const {
172 auto getWaypointTimes = [](
const Eigen::MatrixXd&
positions,
const Eigen::MatrixXd& ,
173 const Eigen::MatrixXd& ) {
174 double rampTime = 1.2;
178 Eigen::VectorXd
times(num_waypoints);
179 for (
size_t i = 0; i < num_waypoints; ++i)
180 times[i] = rampTime * (
double)i;
185 const auto num_joints = positions_.rows();
186 auto num_waypoints = positions_.cols() + 1;
187 if (start_pos.size() != num_joints) {
188 throw std::invalid_argument(
"start positions size must match number of joints in Goal object");
189 }
else if (start_vel !=
nullptr && start_vel->size() != num_joints) {
190 throw std::invalid_argument(
"start velocities size must match number of joints in Goal object");
191 }
else if (start_accel !=
nullptr && start_accel->size() != num_joints) {
192 throw std::invalid_argument(
"start accelerations size must match number of joints in Goal object");
196 Eigen::VectorXd curr_vel = Eigen::VectorXd::Zero(num_joints);
197 Eigen::VectorXd curr_accel = Eigen::VectorXd::Zero(num_joints);
199 curr_vel = *start_vel;
201 curr_accel = *start_accel;
203 Eigen::MatrixXd
positions(num_joints, num_waypoints);
204 Eigen::MatrixXd
velocities(num_joints, num_waypoints);
213 positions.rightCols(num_waypoints - 1) = positions_;
214 velocities.rightCols(num_waypoints - 1) = velocities_;
218 Eigen::VectorXd waypoint_times(num_waypoints);
220 if (times_.size() == 0) {
223 waypoint_times(0) = 0;
224 waypoint_times.tail(num_waypoints - 1) = times_;
231 Eigen::MatrixXd
aux(0,0);
232 Eigen::VectorXd aux_times(0);
235 if (aux_.rows() > 0 && (aux_.cols() + 1) == num_waypoints) {
236 aux.resize(aux_.rows(), aux_.cols() + 1);
237 aux.col(0).setConstant(std::numeric_limits<double>::quiet_NaN());
238 aux.rightCols(num_waypoints - 1) = aux_;
239 aux_times = waypoint_times;
242 return {trajectory,
aux, aux_times};
251 const Eigen::MatrixXd&
aux)
257 if (positions_.rows() != velocities_.rows() || positions_.rows() != accelerations_.rows() ||
258 positions_.cols() != velocities_.cols() || positions_.cols() != accelerations_.cols())
259 throw std::invalid_argument(
"Goal must have consistent position/velocity/acceleration sizes");
260 if (aux_.cols() != 0 && positions_.cols() != aux_.cols())
261 throw std::invalid_argument(
"Goal must have empty aux or aux consistent with number of waypoints");
265 static Eigen::MatrixXd nanWithZeroRight(
size_t num_joints,
size_t num_waypoints) {
266 double nan = std::numeric_limits<double>::quiet_NaN();
267 Eigen::MatrixXd matrix(num_joints, num_waypoints);
268 matrix.setConstant(nan);
269 matrix.rightCols<1>().setZero();
273 static Eigen::VectorXd toVector(
double scalar) {
274 Eigen::VectorXd vector(1);
279 static Eigen::MatrixXd toMatrix(
const Eigen::VectorXd& vector) {
280 Eigen::MatrixXd matrix(vector.size(), 1);
281 matrix.col(0) = vector;
285 const Eigen::VectorXd times_{0};
286 const Eigen::MatrixXd positions_{0, 0};
287 const Eigen::MatrixXd velocities_{0, 0};
288 const Eigen::MatrixXd accelerations_{0, 0};
289 const Eigen::MatrixXd aux_{0, 0};
static Goal createFromPositions(const Eigen::VectorXd ×, const Eigen::MatrixXd &positions)
Definition: goal.hpp:103
static Goal createFromWaypoint(const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations)
Definition: goal.hpp:42
static Goal createFromWaypoint(double time, const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations)
Definition: goal.hpp:53
const Eigen::MatrixXd & positions() const
Definition: goal.hpp:161
static Goal createFromWaypointWithAux(double time, const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations, const Eigen::VectorXd &aux)
Definition: goal.hpp:77
static Goal createFromPosition(const Eigen::VectorXd &positions)
Definition: goal.hpp:24
static Goal createFromWaypointsWithAux(const Eigen::VectorXd ×, const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations, const Eigen::MatrixXd &aux)
Definition: goal.hpp:148
static Goal createFromWaypointsWithAux(const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations, const Eigen::MatrixXd &aux)
Definition: goal.hpp:136
static Goal createFromWaypoints(const Eigen::VectorXd ×, const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations)
Definition: goal.hpp:124
std::tuple< std::shared_ptr< hebi::trajectory::Trajectory >, Eigen::MatrixXd, Eigen::VectorXd > buildTrajectoryFrom(const Eigen::VectorXd &start_pos, const Eigen::VectorXd *start_vel, const Eigen::VectorXd *start_accel) const
Definition: goal.hpp:169
const Eigen::VectorXd & times() const
Definition: goal.hpp:160
const Eigen::MatrixXd & accelerations() const
Definition: goal.hpp:163
const Eigen::MatrixXd & aux() const
Definition: goal.hpp:164
static Goal createFromPositions(const Eigen::MatrixXd &positions)
Definition: goal.hpp:94
static Goal createFromWaypoints(const Eigen::MatrixXd &positions, const Eigen::MatrixXd &velocities, const Eigen::MatrixXd &accelerations)
Definition: goal.hpp:113
static Goal createFromPosition(double time, const Eigen::VectorXd &positions)
Definition: goal.hpp:33
static std::shared_ptr< Trajectory > createUnconstrainedQp(const Eigen::VectorXd &time_vector, const Eigen::MatrixXd &positions, const Eigen::MatrixXd *velocities=nullptr, const Eigen::MatrixXd *accelerations=nullptr)
Creates a smooth trajectory through a set of waypoints (position velocity and accelerations defined a...
Definition: trajectory.cpp:17
const Eigen::MatrixXd & velocities() const
Definition: goal.hpp:162
static Goal createFromWaypointWithAux(const Eigen::VectorXd &positions, const Eigen::VectorXd &velocities, const Eigen::VectorXd &accelerations, const Eigen::VectorXd &aux)
Definition: goal.hpp:65