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)