travel_time_step_cost_estimator.cpp
Go to the documentation of this file.
00001 #include <vigir_footstep_planning_default_plugins/step_cost_estimators/travel_time_step_cost_estimator.h>
00002 
00003 
00004 
00005 namespace vigir_footstep_planning
00006 {
00007 TravelTimeStepCostEstimator::TravelTimeStepCostEstimator()
00008   : StepCostEstimatorPlugin("travel_time_cost_estimator")
00009 {
00010 }
00011 
00012 bool TravelTimeStepCostEstimator::loadParams(const vigir_generic_params::ParameterSet& params)
00013 {
00014   if (!StepCostEstimatorPlugin::loadParams(params))
00015     return false;
00016 
00017   params.getParam("travel_time_cost_estimator/sway/parabol_a", a_sway_inv, 0.0);
00018   a_sway_inv = 1.0/a_sway_inv;
00019   params.getParam("travel_time_cost_estimator/sway/parabol_b", b_sway_inv, 0.0);
00020   b_sway_inv = 1.0/b_sway_inv;
00021   params.getParam("travel_time_cost_estimator/sway/const_time", const_sway_time, 0.0);
00022 
00023   params.getParam("travel_time_cost_estimator/swing/parabol_a", a_swing_inv, 0.0);
00024   a_swing_inv = 1.0/a_swing_inv;
00025   params.getParam("travel_time_cost_estimator/swing/parabol_b", b_swing_inv, 0.0);
00026   b_swing_inv = 1.0/b_swing_inv;
00027   params.getParam("travel_time_cost_estimator/swing/const_time", const_swing_time, 0.0);
00028 
00029   return true;
00030 }
00031 
00032 bool TravelTimeStepCostEstimator::getCost(const State& left_foot, const State& right_foot, const State& swing_foot, double& cost, double& cost_multiplier, double& risk, double& risk_multiplier) const
00033 {
00034   cost_multiplier = 1.0;
00035   risk = 0.0;
00036   risk_multiplier = 1.0;
00037 
00038   const State& stand_foot = swing_foot.getLeg() == LEFT ? right_foot : left_foot;
00039   const State& swing_foot_before = swing_foot.getLeg() == LEFT ? left_foot : right_foot;
00040 
00041   tf::Transform sway = swing_foot_before.getPose().inverse() * stand_foot.getPose();
00042   tf::Transform swing = swing_foot_before.getPose().inverse() * swing_foot.getPose();
00043 
00044   double sway_duration = parabol(sway.getOrigin().x(), sway.getOrigin().y(), a_sway_inv, b_sway_inv) + const_sway_time;
00045   double step_duration = parabol(swing.getOrigin().x(), swing.getOrigin().y(), a_swing_inv, b_swing_inv) + const_swing_time;
00046 
00047   cost = sway_duration + step_duration;
00048 
00049   return true;
00050 }
00051 }
00052 
00053 #include <pluginlib/class_list_macros.h>
00054 PLUGINLIB_EXPORT_CLASS(vigir_footstep_planning::TravelTimeStepCostEstimator, vigir_footstep_planning::StepCostEstimatorPlugin)


vigir_footstep_planning_default_plugins
Author(s): Alexander Stumpf
autogenerated on Fri Apr 7 2017 02:59:40