HULKs / hulk

All your base are belong to us!
https://hulks.de/hulk
GNU General Public License v3.0
61 stars 50 forks source link

Request for Comments: Walking Engine next gen #411

Open schluis opened 1 year ago

schluis commented 1 year ago

Walking by inverted pendulum

Walking with staightend knees

Regarding Stabilization

philipniklas-r commented 1 year ago

As suggested by @schluis my thoughts for a next gen walking:

The coolest idea

Learned walk/motion like in https://arxiv.org/pdf/2304.13653.pdf

Learning simple predictions

Other ideas that are independent of what kind of a walk is implemented (except if it is learned)

Classical compensation. Disclaimer: I did NOT test this idea yet

Torso orientation estimation

Reducing the yaw direction rotation speed

philipniklas-r commented 1 year ago

Another idea:

Preprocessing the FSR Sensor Data. Deciding when to switch the swing and support foot is a hard problem!

Problems

I am currently writing this down for our (B-Human) Wiki and noticed, that in your current implementation you do:

let left_foot_pressure = context.sensor_data.force_sensitive_resistors.left.sum();
let right_foot_pressure = context.sensor_data.force_sensitive_resistors.right.sum();
let has_support_changed = match self.swing_side {
    Side::Left => left_foot_pressure > context.config.foot_pressure_threshold,
    Side::Right => right_foot_pressure > context.config.foot_pressure_threshold,
};
if has_support_changed && self.t > context.config.minimal_step_duration { ...

This check ignores that the swing foot could have like 200g pressure while the current support foot has 5000g pressure. The current code would initiate a support foot switch which might be too early. This could also explains why your robots very rapidly start new walking steps when falling backwards and occasionally fall randomly to the side/diagonal (but this is just a blind guess from my side).

Proposed Change