step_dynamics_post_process.cpp
Go to the documentation of this file.
2 
3 #include <tf/tf.h>
4 
5 
6 
8 {
10  : PostProcessPlugin("step_dynamics_post_processor")
11 {
12 }
13 
14 bool StepDynamicsPostProcess::loadParams(const vigir_generic_params::ParameterSet& params)
15 {
16  if (!PostProcessPlugin::loadParams(params))
17  return false;
18 
19  params.getParam("swing_height", default_swing_height);
20  params.getParam("sway_duration", default_sway_duration);
21  params.getParam("step_duration", default_step_duration);
22  return true;
23 }
24 
25 void StepDynamicsPostProcess::postProcessStepForward(const State& left_foot, const State& right_foot, State& swing_foot) const
26 {
27  const State& swing_foot_before = swing_foot.getLeg() == LEFT ? left_foot : right_foot;
28  const State& stand_foot = swing_foot.getLeg() == LEFT ? right_foot : left_foot;
29 
30  determineStepAttributes(swing_foot_before, stand_foot, swing_foot);
31  determineTravelDistance(swing_foot_before, stand_foot, swing_foot);
32  determineTimings(swing_foot_before, stand_foot, swing_foot);
33  determineDynamics(swing_foot_before, stand_foot, swing_foot);
34 }
35 
36 void StepDynamicsPostProcess::postProcessStepBackward(const State& /*left_foot*/, const State& /*right_foot*/, State& /*swing_foot*/) const
37 {
38  ROS_WARN_ONCE("[StepDynamicsPostProcessPlugin] postProcessStepBackward not implemented yet!");
39 }
40 
41 void StepDynamicsPostProcess::determineStepAttributes(const State& /*swing_foot_before*/, const State& /*stand_foot*/, State& swing_foot_after) const
42 {
43  swing_foot_after.setSwingHeight(default_swing_height);
44 }
45 
46 void StepDynamicsPostProcess::determineTravelDistance(const State& swing_foot_before, const State& stand_foot, State& swing_foot_after) const
47 {
48  // determine sway distance
49  tf::Transform dsway;
50  getDeltaStep(stand_foot.getPose(), swing_foot_after.getPose(), dsway);
51  swing_foot_after.setSwayDistance(sqrt(dsway.getOrigin().x()*dsway.getOrigin().x() + dsway.getOrigin().y()*dsway.getOrigin().y() + dsway.getOrigin().z()*dsway.getOrigin().z()));
52 
53  // determine swing distance
54  tf::Transform dswing;
55  getDeltaStep(swing_foot_before.getPose(), swing_foot_after.getPose(), dswing);
56  swing_foot_after.setSwingDistance(sqrt(dswing.getOrigin().x()*dswing.getOrigin().x() + dswing.getOrigin().y()*dswing.getOrigin().y() + dswing.getOrigin().z()*dswing.getOrigin().z()));
57 }
58 
59 void StepDynamicsPostProcess::determineTimings(const State& /*swing_foot_before*/, const State& /*stand_foot*/, State& swing_foot_after) const
60 {
61  swing_foot_after.setSwayDuration(default_sway_duration);
62  swing_foot_after.setStepDuration(default_step_duration);
63 }
64 
65 void StepDynamicsPostProcess::determineDynamics(const State& swing_foot_before, const State& /*stand_foot*/, State& swing_foot_after) const
66 {
67  if (swing_foot_after.getSwingDistance() > 0.0)
68  {
69  geometry_msgs::Vector3 body_vel;
70 
71  // determine swing direction
72  //double swing_vel = swing_foot_after.getStepDuration() > 0.0 ? 0.5*swing_foot_after.getSwingDistance()/swing_foot_after.getStepDuration() : 0.0;
73  //double norm_factor = swing_vel/swing_foot_after.getSwingDistance();
74  double norm_factor = swing_foot_after.getStepDuration() > 0.0 ? 0.5/swing_foot_after.getStepDuration() : 0.0;
75 
76  body_vel.x = (swing_foot_after.getX() - swing_foot_before.getX()) * norm_factor;
77  body_vel.y = (swing_foot_after.getY() - swing_foot_before.getY()) * norm_factor;
78  body_vel.z = (swing_foot_after.getZ() - swing_foot_before.getZ()) * norm_factor;
79 
80  swing_foot_after.setBodyVelocity(body_vel);
81  }
82 }
83 }
84 
85 #include <pluginlib/class_list_macros.h>
86 PLUGINLIB_EXPORT_CLASS(vigir_footstep_planning::StepDynamicsPostProcess, vigir_footstep_planning::PostProcessPlugin)
void postProcessStepForward(const State &left_foot, const State &right_foot, State &swing_foot) const override
void postProcessStepBackward(const State &left_foot, const State &right_foot, State &swing_foot) const override
virtual void determineTimings(const State &swing_foot_before, const State &stand_foot, State &swing_foot_after) const
virtual void determineTravelDistance(const State &swing_foot_before, const State &stand_foot, State &swing_foot_after) const
bool loadParams(const vigir_generic_params::ParameterSet &params=vigir_generic_params::ParameterSet()) override
virtual void determineDynamics(const State &swing_foot_before, const State &stand_foot, State &swing_foot_after) const
virtual void determineStepAttributes(const State &swing_foot_before, const State &stand_foot, State &swing_foot_after) const
#define ROS_WARN_ONCE(...)


vigir_footstep_planning_default_plugins
Author(s): Alexander Stumpf
autogenerated on Sun Nov 17 2019 03:30:01