6 Trajectory::Trajectory(std::vector<HebiTrajectoryPtr> trajectories,
size_t number_of_waypoints,
double start_time,
8 : trajectories_(trajectories),
9 number_of_joints_(trajectories.size()),
10 number_of_waypoints_(number_of_waypoints),
11 start_time_(start_time),
12 end_time_(end_time) {}
15 const MatrixXd* velocities,
16 const MatrixXd* accelerations) {
17 std::shared_ptr<Trajectory> res;
20 size_t num_joints = positions.rows();
21 size_t num_waypoints = positions.cols();
22 if (time_vector.size() != num_waypoints)
24 if (velocities !=
nullptr && (velocities->rows() != num_joints && velocities->cols() != num_waypoints))
26 if (accelerations !=
nullptr && (accelerations->rows() != num_joints && accelerations->cols() != num_waypoints))
28 if (num_waypoints < 2)
32 double* time_vector_c =
nullptr;
33 double* positions_c =
nullptr;
34 double* velocities_c =
nullptr;
35 double* accelerations_c =
nullptr;
36 time_vector_c =
new double[num_joints * num_waypoints];
38 Map<Matrix<double, Dynamic, Dynamic, RowMajor>> tmp(time_vector_c, num_waypoints, 1);
41 positions_c =
new double[num_joints * num_waypoints];
43 Map<Matrix<double, Dynamic, Dynamic, RowMajor>> tmp(positions_c, num_joints, num_waypoints);
46 if (velocities !=
nullptr) {
47 velocities_c =
new double[num_joints * num_waypoints];
48 Map<Matrix<double, Dynamic, Dynamic, RowMajor>> tmp(velocities_c, num_joints, num_waypoints);
51 if (accelerations !=
nullptr) {
52 accelerations_c =
new double[num_joints * num_waypoints];
53 Map<Matrix<double, Dynamic, Dynamic, RowMajor>> tmp(accelerations_c, num_joints, num_waypoints);
58 std::vector<HebiTrajectoryPtr> trajectories(num_joints,
nullptr);
59 for (
size_t i = 0; i < num_joints; ++i) {
61 num_waypoints, (positions_c + i * num_waypoints),
62 velocities_c ==
nullptr ?
nullptr : (velocities_c + i * num_waypoints),
63 accelerations_c ==
nullptr ?
nullptr : (accelerations_c + i * num_waypoints), time_vector_c);
65 if (trajectory ==
nullptr) {
66 for (
size_t j = 0; j < i; ++j) {
71 trajectories[i] = trajectory;
75 if (velocities_c !=
nullptr)
76 delete[] velocities_c;
77 if (accelerations_c !=
nullptr)
78 delete[] accelerations_c;
81 return std::shared_ptr<Trajectory>(
82 new Trajectory(trajectories, num_waypoints, time_vector[0], time_vector[time_vector.size() - 1]));
95 bool Trajectory::getState(
double time, VectorXd* position, VectorXd* velocity, VectorXd* acceleration)
const {
96 double tmp_p, tmp_v, tmp_a;
100 velocity ==
nullptr ? &tmp_v : &(*velocity)[i],
101 acceleration ==
nullptr ? &tmp_a : &(*acceleration)[i]) == 0) &&