37 #ifndef STOMP_OPTIMIZER_H_
38 #define STOMP_OPTIMIZER_H_
40 #include "stompParameters.hpp"
42 #include "planner/TrajectoryOptim/Chomp/chompPlanningGroup.hpp"
43 #include "planner/TrajectoryOptim/Chomp/chompTrajectory.hpp"
44 #include "planner/TrajectoryOptim/Chomp/chompCost.hpp"
45 #include "planner/TrajectoryOptim/Chomp/chompMultivariateGaussian.hpp"
46 #include "planner/TrajectoryOptim/Classic/smoothing.hpp"
47 #include "planner/Greedy/CollisionSpace.hpp"
49 #include <boost/shared_ptr.hpp>
52 #include "covariant_trajectory_policy.hpp"
53 #include "policy_improvement_loop.hpp"
54 #include "stompStatistics.hpp"
68 namespace stomp_motion_planner
100 void setUseOtp(
bool use_otp) { use_handover_config_generator_= use_otp; }
117 void setPassiveDofs( std::vector<confPtr_t> passive_dofs ) { passive_dofs_ = passive_dofs; }
128 void setSharedPtr(boost::shared_ptr<StompOptimizer>& ptr);
129 void resetSharedPtr();
144 void getTrajectoryCost( std::vector<double>& cost,
double step );
150 bool getJointLimitViolationSuccess() {
return succeded_joint_limits_; }
158 bool initialize(
int num_time_steps);
176 bool execute(std::vector<Eigen::VectorXd>& parameters, Eigen::VectorXd& costs,
const int iteration_number,
bool resample =
false);
183 bool getPolicy(boost::shared_ptr<stomp_motion_planner::Policy>& policy);
190 bool setPolicy(
const boost::shared_ptr<stomp_motion_planner::Policy> policy);
218 void setTarget(confPtr_t q) { target_ = q; }
219 confPtr_t getSource();
220 confPtr_t getTarget();
227 bool humanHasMoved();
241 int num_collision_points_;
242 int free_vars_start_;
245 int collision_free_iteration_;
247 bool succeded_joint_limits_;
248 int joint_limits_violation_;
250 bool recompute_handover_once_;
251 bool handover_has_been_recomputed_;
252 bool use_human_sliders_;
253 bool use_handover_config_generator_;
254 bool use_handover_config_list_;
255 bool use_handover_auto_;
256 bool recompute_handover_cell_list_;
259 double last_move3d_cost_;
261 bool use_time_limit_;
264 std::vector<confPtr_t> passive_dofs_;
271 std::vector<ChompCost> joint_costs_;
273 boost::shared_ptr<stomp_motion_planner::CovariantTrajectoryPolicy> policy_;
274 std::vector<Eigen::VectorXd> policy_parameters_;
275 boost::shared_ptr<StompOptimizer> this_shared_ptr_;
277 std::vector<int> planner_p3d_joints_;
278 std::vector<int> group_joint_to_move3d_joint_index_;
287 std::vector<std::vector<std::vector<double> > > segment_frames_;
288 std::vector<std::vector<Eigen::Vector3d> > joint_axis_eigen_;
289 std::vector<std::vector<Eigen::Vector3d> > joint_pos_eigen_;
290 std::vector<std::vector<Eigen::Vector3d> > collision_point_pos_eigen_;
291 std::vector<std::vector<Eigen::Vector3d> > collision_point_vel_eigen_;
292 std::vector<std::vector<Eigen::Vector3d> > collision_point_acc_eigen_;
294 Eigen::VectorXd general_cost_potential_;
296 Eigen::MatrixXd collision_point_potential_;
297 Eigen::MatrixXd collision_point_vel_mag_;
298 std::vector<std::vector<Eigen::Vector3d> > collision_point_potential_gradient_;
299 Eigen::MatrixXd group_trajectory_backup_;
300 Eigen::MatrixXd best_group_trajectory_;
301 double best_group_trajectory_cost_;
302 double last_trajectory_cost_;
303 bool last_trajectory_collision_free_;
304 bool last_trajectory_constraints_satisfied_;
305 int last_improvement_iteration_;
309 Eigen::MatrixXd momentum_;
310 Eigen::MatrixXd random_momentum_;
311 Eigen::VectorXd random_joint_momentum_;
312 std::vector<MultivariateGaussian> multivariate_gaussian_;
313 double stochasticity_factor_;
315 std::vector<int> state_is_in_collision_;
316 std::vector<std::vector<int> > point_is_in_collision_;
317 bool is_collision_free_;
318 double worst_collision_cost_state_;
320 Eigen::MatrixXd smoothness_increments_;
321 Eigen::MatrixXd collision_increments_;
322 Eigen::MatrixXd final_increments_;
325 Eigen::VectorXd smoothness_derivative_;
336 Eigen::MatrixXd jacobian_;
337 Eigen::MatrixXd jacobian_pseudo_inverse_;
338 Eigen::MatrixXd jacobian_jacobian_tranpose_;
339 Eigen::VectorXd random_state_;
340 Eigen::VectorXd joint_state_velocities_;
341 Eigen::VectorXd joint_state_accelerations_;
342 Eigen::VectorXd full_joint_state_velocities_;
343 Eigen::VectorXd full_joint_state_accelerations_;
345 bool human_has_moved_;
346 std::vector<double> last_human_pos_;
347 bool reset_reused_rollouts_;
351 confPtr_t target_new_;
356 int animate_endeffector_segment_number_;
360 boost::shared_ptr<StompStatistics> stomp_statistics_;
364 void calculateSmoothnessIncrements();
365 void calculateCollisionIncrements();
366 void calculateTotalIncrements();
367 void getFrames(
int segment,
const Eigen::VectorXd& joint_array,
Configuration& q);
368 bool getConfigObstacleCost(
int segment,
int dof,
Configuration& q);
369 bool performForwardKinematics();
370 void addIncrementsToTrajectory();
371 void updateFullTrajectory();
374 bool handleJointLimits();
376 void animateEndeffector(
bool print_cost =
false);
377 void animateTrajectoryPolicy();
378 void visualizeState(
int index);
379 double getTrajectoryCost();
380 double getSmoothnessCost();
381 double getCollisionCost();
382 void perturbTrajectory();
383 void getRandomMomentum();
384 void updateMomentum();
385 void updatePositionFromMomentum();
386 void calculatePseudoInverse();
388 void doChompOptimization();
390 void copyPolicyToGroupTrajectory();
391 void copyGroupTrajectoryToPolicy();
392 void clearAnimations();
397 void setGroupTrajectoryFromVectorConfig(
const std::vector<confPtr_t>& traj);
398 void setGroupTrajectoryToVectorConfig(std::vector<confPtr_t>& traj);
401 bool replaceEndWithNewConfiguration();
402 bool getManipulationHandOver();
403 bool getMobileManipHandOver();
404 bool getNewTargetFromHandOver();
405 double resampleParameters(std::vector<Eigen::VectorXd>& parameters);
406 double computeMove3DCost();
407 confPtr_t getConfigurationOnGroupTraj(
int ith);
409 void saveTrajectoryCostStats();
410 void saveCostFromConvergenceTraj();
411 void saveOptimToFile(std::string fileName);
418 extern boost::shared_ptr<stomp_motion_planner::StompOptimizer> optimizer;
void setSharedPtr(boost::shared_ptr< StompOptimizer > &ptr)
Functions to set the shared pointer.
Definition: stompOptimizer.cpp:2122
Contains information about a planning group.
Definition: chompPlanningGroup.hpp:38
void setTimeLimit(double time)
Set the maximal time for optimization in second.
Definition: stompOptimizer.hpp:112
Robot * getRobot()
Get the robot.
Definition: stompOptimizer.hpp:207
bool getPolicy(boost::shared_ptr< stomp_motion_planner::Policy > &policy)
Get the Policy object of this Task.
Definition: stompOptimizer.cpp:2062
void initHandover()
Initializes the handover generator.
Definition: stompOptimizer.cpp:296
void testMultiVariateGaussianSampler()
Test the noisy trajectory sampler.
Definition: stompOptimizer.cpp:1741
void draw()
Draw function to be called outside.
Definition: stompOptimizer.cpp:1722
Definition: stompParameters.hpp:47
bool setPolicy(const boost::shared_ptr< stomp_motion_planner::Policy > policy)
Sets the Policy object of this Task.
Definition: stompOptimizer.cpp:2068
void setPassiveDofs(std::vector< confPtr_t > passive_dofs)
Set the passive Dofs.
Definition: stompOptimizer.hpp:117
Definition: stompOptimizer.hpp:71
bool getControlCostWeight(double &control_cost_weight)
Gets the weight of the control cost.
Definition: stompOptimizer.cpp:2073
Represents a discretized joint-space trajectory for CHOMP.
Definition: chompTrajectory.hpp:60
This class holds a the robot represented by a kinematic chain.
Definition: robot.hpp:42
bool execute(std::vector< Eigen::VectorXd > ¶meters, Eigen::VectorXd &costs, const int iteration_number, bool resample=false)
Executes the task for the given policy parameters, and returns the costs per timestep.
Definition: stompOptimizer.cpp:1898
int getJointLimitViolations()
Get the current joint violation.
Definition: stompOptimizer.hpp:149
void setUseOtp(bool use_otp)
Set compute handover position.
Definition: stompOptimizer.hpp:100
const ChompPlanningGroup * getPlanningGroup() const
Returns the planning group of the optimizer.
Definition: stompOptimizer.hpp:202
void generateNoisyTrajectory(const API::Trajectory &traj, std::vector< std::vector< confPtr_t > > &noisy_trajectory)
Generate the noisy trajectories.
Definition: stompOptimizer.cpp:689
void setSource(confPtr_t q)
Retreive source and target.
Definition: stompOptimizer.hpp:217
Definition: CollisionSpace.hpp:27
bool initializeFromNewTrajectory(const API::Trajectory &traj)
Initializes from a new trajectory.
Definition: stompOptimizer.cpp:251
Definition: trajectory.hpp:40
double getCollisionSpaceCost(Configuration &q)
Get the current configuration collision cost.
Definition: stompOptimizer.cpp:1029
void setUseTimeLimit(bool use_limit)
Set the use of a time limit.
Definition: stompOptimizer.hpp:106
Classe représentant une Configuration d'un Robot.
Definition: configuration.hpp:25
Definition: ConfGenerator.h:51
void runDeformation(int nbIteration, int idRun=0)
Main optimizer function.
Definition: stompOptimizer.cpp:415
API::Trajectory getBestTraj()
Retreive best trajectory.
Definition: stompOptimizer.hpp:225