39 if (!
init(ros_trajectory))
41 throw std::invalid_argument(
"Trajectory not valid");
48 bool sign_flipped =
false;
52 for (
auto i = ros_trajectory.points.begin(); std::next(i) < ros_trajectory.points.end(); ++i)
55 if (i->time_from_start.toSec() >= std::next(i)->time_from_start.toSec())
65 state.
q = state.
q.conjugate();
66 state.
q.w() = state.
q.w() * -1;
71 double dot_product = state.
q.dot(next_state.
q);
72 if (dot_product < 0.0)
74 next_state.
q = next_state.
q.conjugate();
75 next_state.
q.w() = next_state.
q.w() * -1;
std::vector< CartesianTrajectorySegment > trajectory_data_
void sample(const CartesianTrajectorySegment::Time &time, CartesianState &state)
Sample a trajectory at a specified time.
Trajectory::const_iterator sample(const Trajectory &trajectory, const typename Trajectory::value_type::Time &time, typename Trajectory::value_type::State &state)
QuinticSplineSegment::Time Time
Relative time in seconds.
CartesianTrajectory()=default
Cartesian segment between two trajectory waypoints.
bool init(const cartesian_control_msgs::CartesianTrajectory &ros_trajectory)
Initialize from ROS message.
Cartesian state with pose, velocity and acceleration.
Eigen::Quaterniond q
rotation