Robotis Manipulator  1.0.0
robotis_manipulator::TaskTrajectory Class Reference

The TaskTrajectory class. More...

#include <robotis_manipulator_trajectory_generator.h>

Collaboration diagram for robotis_manipulator::TaskTrajectory:
Collaboration graph

Public Member Functions

 TaskTrajectory ()
 
virtual ~TaskTrajectory ()
 
void makeTaskTrajectory (double move_time, TaskWaypoint start, TaskWaypoint goal)
 makeTaskTrajectory More...
 
Eigen::MatrixXd getMinimumJerkCoefficient ()
 getMinimumJerkCoefficient More...
 
TaskWaypoint getTaskWaypoint (double tick)
 getTaskWaypoint More...
 

Private Attributes

uint8_t coefficient_size_
 
MinimumJerk minimum_jerk_trajectory_generator_
 
Eigen::MatrixXd minimum_jerk_coefficient_
 

Detailed Description

The TaskTrajectory class.

Definition at line 116 of file robotis_manipulator_trajectory_generator.h.

Constructor & Destructor Documentation

TaskTrajectory::TaskTrajectory ( )

Definition at line 132 of file robotis_manipulator_trajectory_generator.cpp.

133 {
134  minimum_jerk_coefficient_ = Eigen::MatrixXd::Identity(6, 4);
135 }
TaskTrajectory::~TaskTrajectory ( )
virtual

Definition at line 136 of file robotis_manipulator_trajectory_generator.cpp.

136 {}

Member Function Documentation

Eigen::MatrixXd TaskTrajectory::getMinimumJerkCoefficient ( )

getMinimumJerkCoefficient

Returns

Definition at line 267 of file robotis_manipulator_trajectory_generator.cpp.

TaskWaypoint TaskTrajectory::getTaskWaypoint ( double  tick)

getTaskWaypoint

Parameters
tick
Returns

Definition at line 209 of file robotis_manipulator_trajectory_generator.cpp.

210 {
211  std::vector<Point> result_point;
212  for (uint8_t index = 0; index < coefficient_size_; index++)
213  {
214  Point single_task_way_point;
215 
216  single_task_way_point.position = minimum_jerk_coefficient_(0, index) +
217  minimum_jerk_coefficient_(1, index) * pow(tick, 1) +
218  minimum_jerk_coefficient_(2, index) * pow(tick, 2) +
219  minimum_jerk_coefficient_(3, index) * pow(tick, 3) +
220  minimum_jerk_coefficient_(4, index) * pow(tick, 4) +
221  minimum_jerk_coefficient_(5, index) * pow(tick, 5);
222 
223  single_task_way_point.velocity = minimum_jerk_coefficient_(1, index) +
224  2 * minimum_jerk_coefficient_(2, index) * pow(tick, 1) +
225  3 * minimum_jerk_coefficient_(3, index) * pow(tick, 2) +
226  4 * minimum_jerk_coefficient_(4, index) * pow(tick, 3) +
227  5 * minimum_jerk_coefficient_(5, index) * pow(tick, 4);
228 
229  single_task_way_point.acceleration = 2 * minimum_jerk_coefficient_(2, index) +
230  6 * minimum_jerk_coefficient_(3, index) * pow(tick, 1) +
231  12 * minimum_jerk_coefficient_(4, index) * pow(tick, 2) +
232  20 * minimum_jerk_coefficient_(5, index) * pow(tick, 3);
233 
234  single_task_way_point.effort = 0.0;
235 
236  result_point.push_back(single_task_way_point);
237  }
238 
239  TaskWaypoint task_way_point;
241  for(uint8_t i = 0; i < 3; i++) //x ,y ,z
242  {
243  task_way_point.kinematic.position[i] = result_point.at(i).position;
244  task_way_point.dynamic.linear.velocity[i] = result_point.at(i).velocity;
245  task_way_point.dynamic.linear.acceleration[i] = result_point.at(i).acceleration;
246  }
248 
250  Eigen::Vector3d rpy_orientation;
251  rpy_orientation << result_point.at(3).position, result_point.at(4).position, result_point.at(5).position;
252  task_way_point.kinematic.orientation = math::convertRPYToRotationMatrix(result_point.at(3).position, //roll
253  result_point.at(4).position, //pitch
254  result_point.at(5).position); //yaw
255 
256  Eigen::Vector3d rpy_velocity;
257  rpy_velocity << result_point.at(3).velocity, result_point.at(4).velocity, result_point.at(5).velocity;
258  task_way_point.dynamic.angular.velocity = math::convertRPYVelocityToOmega(rpy_orientation, rpy_velocity);
259 
260  Eigen::Vector3d rpy_acceleration;
261  rpy_acceleration << result_point.at(3).acceleration, result_point.at(4).acceleration, result_point.at(5).acceleration;
262  task_way_point.dynamic.angular.acceleration = math::convertRPYAccelerationToOmegaDot(rpy_orientation, rpy_velocity, rpy_acceleration);
263 
264  return task_way_point;
265 }
Eigen::Vector3d convertRPYVelocityToOmega(Eigen::Vector3d rpy_vector, Eigen::Vector3d rpy_velocity)
convertRPYVelocityToOmega
Eigen::Vector3d convertRPYAccelerationToOmegaDot(Eigen::Vector3d rpy_vector, Eigen::Vector3d rpy_velocity, Eigen::Vector3d rpy_acceleration)
convertRPYAccelerationToOmegaDot
Eigen::Matrix3d convertRPYToRotationMatrix(double roll, double pitch, double yaw)
convertRPYToRotationMatrix

Here is the call graph for this function:

Here is the caller graph for this function:

void TaskTrajectory::makeTaskTrajectory ( double  move_time,
TaskWaypoint  start,
TaskWaypoint  goal 
)

makeTaskTrajectory

Parameters
move_time
start
goal

Definition at line 138 of file robotis_manipulator_trajectory_generator.cpp.

140 {
141  std::vector<Point> start_way_point;
142  std::vector<Point> goal_way_point;
143 
145  for(uint8_t i = 0; i < 3; i++) //x, y, z
146  {
147  Point position_temp;
148  position_temp.position = start.kinematic.position[i];
149  position_temp.velocity = start.dynamic.linear.velocity[i];
150  position_temp.acceleration = start.dynamic.linear.acceleration[i];
151  position_temp.effort = 0.0;
152  start_way_point.push_back(position_temp);
153 
154  position_temp.position = goal.kinematic.position[i];
155  position_temp.velocity = goal.dynamic.linear.velocity[i];
156  position_temp.acceleration = goal.dynamic.linear.acceleration[i];
157  position_temp.effort = 0.0;
158  goal_way_point.push_back(position_temp);
159  }
161 
163 
164  Eigen::Vector3d start_orientation_rpy;
165  Eigen::Vector3d start_ang_vel_rpy;
166  Eigen::Vector3d start_ang_acc_rpy;
167 
168  start_orientation_rpy = math::convertRotationMatrixToRPYVector(start.kinematic.orientation);
169  start_ang_vel_rpy = math::convertOmegaToRPYVelocity(start_orientation_rpy, start.dynamic.angular.velocity);
170  start_ang_acc_rpy = math::convertOmegaDotToRPYAcceleration(start_orientation_rpy, start_ang_vel_rpy, start.dynamic.angular.acceleration);
171 
172  Eigen::Vector3d goal_orientation_rpy;
173  Eigen::Vector3d goal_ang_vel_rpy;
174  Eigen::Vector3d goal_ang_acc_rpy;
175 
176  goal_orientation_rpy = math::convertRotationMatrixToRPYVector(goal.kinematic.orientation);
177  goal_ang_vel_rpy = math::convertOmegaToRPYVelocity(goal_orientation_rpy, goal.dynamic.angular.velocity);
178  start_ang_acc_rpy = math::convertOmegaDotToRPYAcceleration(goal_orientation_rpy, goal_ang_vel_rpy, goal.dynamic.angular.acceleration);
179 
180  for(uint8_t i = 0; i < 3; i++) //roll, pitch, yaw
181  {
182  Point orientation_temp;
183  orientation_temp.position = start_orientation_rpy[i];
184  orientation_temp.velocity = start_ang_vel_rpy[i];
185  orientation_temp.acceleration = start_ang_acc_rpy[i];
186  orientation_temp.effort = 0.0;
187  start_way_point.push_back(orientation_temp);
188 
189  orientation_temp.position = goal_orientation_rpy[i];
190  orientation_temp.velocity = goal_ang_vel_rpy[i];
191  orientation_temp.acceleration = goal_ang_acc_rpy[i];
192  orientation_temp.effort = 0.0;
193  goal_way_point.push_back(orientation_temp);
194  }
196 
197  coefficient_size_ = start_way_point.size();
199  for (uint8_t index = 0; index < coefficient_size_; index++)
200  {
201  minimum_jerk_trajectory_generator_.calcCoefficient(start_way_point.at(index),
202  goal_way_point.at(index),
203  move_time);
204 
206  }
207 }
void calcCoefficient(Point start, Point goal, double move_time)
calcCoefficient
Eigen::Vector3d convertOmegaToRPYVelocity(Eigen::Vector3d rpy_vector, Eigen::Vector3d omega)
convertOmegaToRPYVelocity
Eigen::Vector3d convertRotationMatrixToRPYVector(const Eigen::Matrix3d &rotation_matrix)
convertRotationMatrixToRPYVector
Eigen::Vector3d convertOmegaDotToRPYAcceleration(Eigen::Vector3d rpy_vector, Eigen::Vector3d rpy_velocity, Eigen::Vector3d omega_dot)
convertOmegaDotToRPYAcceleration

Here is the call graph for this function:

Member Data Documentation

uint8_t robotis_manipulator::TaskTrajectory::coefficient_size_
private

Definition at line 119 of file robotis_manipulator_trajectory_generator.h.

Eigen::MatrixXd robotis_manipulator::TaskTrajectory::minimum_jerk_coefficient_
private

Definition at line 121 of file robotis_manipulator_trajectory_generator.h.

MinimumJerk robotis_manipulator::TaskTrajectory::minimum_jerk_trajectory_generator_
private

Definition at line 120 of file robotis_manipulator_trajectory_generator.h.


The documentation for this class was generated from the following files: