libmove3d-planners
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros Groups Pages
chompOptimizer.hpp
1 /*
2  * chompOptimizer.hpp
3  * Move3D-motionPlanner-libs
4  *
5  * Created by Jim Mainprice on 06/06/11.
6  * Copyright 2011 LAAS/CNRS. All rights reserved.
7  *
8  */
9 #ifndef CHOMPOPTIMIZER
10 #define CHOMPOPTIMIZER
11 
12 #include "chompMultivariateGaussian.hpp"
13 #include "chompParameters.hpp"
14 #include "chompCost.hpp"
15 #include "chompTrajectory.hpp"
16 #include "chompPlanningGroup.hpp"
17 
18 #include "planner/Greedy/CollisionSpace.hpp"
19 
20 
21 #include <Eigen/Core>
22 
23 #include <vector>
24 //namespace API
25 //{
27  {
28  public:
29  // ChompOptimizer(ChompTrajectory *trajectory, const ChompRobotModel *robot_model,
30  // const ChompRobotModel::ChompPlanningGroup *planning_group, const ChompParameters *parameters,
31  // const ros::Publisher& vis_marker_array_publisher,
32  // const ros::Publisher& vis_marker_publisher,
33  // ChompCollisionSpace *collision_space);
34  ChompOptimizer(ChompTrajectory *trajectory,
35  const ChompParameters *parameters,
36  const ChompPlanningGroup *planning_group,
37  const CollisionSpace *collision_space);
38 
39  virtual ~ChompOptimizer();
40 
41  void runDeformation( int nbIteration , int idRun=0 );
42 
43  private:
44  Robot* robot_model_;
45 
46  int num_joints_;
47  int num_vars_free_;
48  int num_vars_all_;
49  int num_collision_points_;
50  int free_vars_start_;
51  int free_vars_end_;
52  int iteration_;
53  int collision_free_iteration_;
54 
55  ChompTrajectory *full_trajectory_;
56  ChompTrajectory group_trajectory_;
57  // const ChompRobotModel *robot_model_;
58  const ChompPlanningGroup *planning_group_;
59  const ChompParameters *parameters_;
60  const CollisionSpace *collision_space_;
61  std::vector<ChompCost> joint_costs_;
62 
63  std::vector<int> planner_p3d_joints_;
64  std::vector<int> group_joint_to_move3d_joint_index_;
65 
66  // std::vector<std::vector<KDL::Vector> > joint_axis_;
67  // std::vector<std::vector<KDL::Vector> > joint_pos_;
68  // std::vector<std::vector<KDL::Frame> > segment_frames_;
69  // std::vector<std::vector<KDL::Vector> > collision_point_pos_;
70  // std::vector<std::vector<KDL::Vector> > collision_point_vel_;
71  // std::vector<std::vector<KDL::Vector> > collision_point_acc_;
72 
73  // Frame are stored in a 12 floating point vector
74  std::vector<std::vector<std::vector<double> > > segment_frames_;
75  std::vector<std::vector<Eigen::Vector3d> > joint_axis_eigen_;
76  std::vector<std::vector<Eigen::Vector3d> > joint_pos_eigen_;
77  std::vector<std::vector<Eigen::Vector3d> > collision_point_pos_eigen_;
78  std::vector<std::vector<Eigen::Vector3d> > collision_point_vel_eigen_;
79  std::vector<std::vector<Eigen::Vector3d> > collision_point_acc_eigen_;
80 
81  Eigen::MatrixXd collision_point_potential_;
82  Eigen::MatrixXd collision_point_vel_mag_;
83  std::vector<std::vector<Eigen::Vector3d> > collision_point_potential_gradient_;
84 
85  Eigen::MatrixXd group_trajectory_backup_;
86  Eigen::MatrixXd best_group_trajectory_;
87  double best_group_trajectory_cost_;
88  int last_improvement_iteration_;
89 
90  // HMC stuff:
91  Eigen::MatrixXd momentum_;
92  Eigen::MatrixXd random_momentum_;
93  Eigen::VectorXd random_joint_momentum_; //temporary variable
94  std::vector<MultivariateGaussian> multivariate_gaussian_;
95  double stochasticity_factor_;
96 
97  std::vector<int> state_is_in_collision_;
98  std::vector<std::vector<int> > point_is_in_collision_;
99  bool is_collision_free_;
100  double worst_collision_cost_state_;
101 
102  Eigen::MatrixXd smoothness_increments_;
103  Eigen::MatrixXd collision_increments_;
104  Eigen::MatrixXd final_increments_;
105 
106  // temporary variables for all functions:
107  Eigen::VectorXd smoothness_derivative_;
108  // KDL::JntArray kdl_joint_array_;
109  Eigen::MatrixXd jacobian_;
110  Eigen::MatrixXd jacobian_pseudo_inverse_;
111  Eigen::MatrixXd jacobian_jacobian_tranpose_;
112  Eigen::VectorXd random_state_;
113  Eigen::VectorXd joint_state_velocities_;
114 
115  // ros::Publisher vis_marker_array_pub_;
116  // ros::Publisher vis_marker_pub_;
117  int animate_endeffector_segment_number_;
118 
119  void initialize();
120  void createEigenMapsFromP3dRobot();
121  void calculateSmoothnessIncrements();
122  void calculateCollisionIncrements();
123  void calculateTotalIncrements();
124  void getFrames(int i, const Eigen::VectorXd& joint_array);
125  void performForwardKinematics();
126  void addIncrementsToTrajectory();
127  void updateFullTrajectory();
128  void debugCost();
129  void eigenMapTest();
130  void handleJointLimits();
131  //void animatePath();
132  void animateEndeffector();
133  //void visualizeState(int index);
134  double getTrajectoryCost();
135  double getSmoothnessCost();
136  double getCollisionCost();
137  void perturbTrajectory();
138  void getRandomMomentum();
139  void updateMomentum();
140  void updatePositionFromMomentum();
141  void calculatePseudoInverse();
142  confPtr_t getConfigurationOnGroupTraj(int ith);
143  };
144 //}
145 #endif
Contains information about a planning group.
Definition: chompPlanningGroup.hpp:38
Definition: chompParameters.hpp:42
Represents a discretized joint-space trajectory for CHOMP.
Definition: chompTrajectory.hpp:60
Definition: chompOptimizer.hpp:26
This class holds a the robot represented by a kinematic chain.
Definition: robot.hpp:42
Definition: CollisionSpace.hpp:27