-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Increase stability for warm / worn-out robots #1414
Comments
Small Idea Input from my side: What we did back in 2019 was that we let the robot "optimize" the gyro balancing parameters for the walking. Our default ankle pitch gyro balancing values are 0.05. If interesting I can write some information how the optimization works. We also still use it, even tho I dont know if it is still needed (dont break a working system 🤷 ) |
A few other ideas: If the robot is tilted too far back, the interpolation for the feet can be slowed downAs a simplified example the interpolation of the walk variables can be done with two values: the current time in the step What we do (we got the idea from HTWK: https://github.com/NaoHTWK/HTWKMotion/blob/master/walking_engine.cpp#L297), is that we slow down this interpolation, by increasing
So if the robot is tilted too far back, we don't increase Reduced walk speed for non-strikersOnly for the robots that want to play the ball the maximum (allowed) walking speed is used. (*In the ready state and when searching the ball in a corner kick the maximum is used for all robots). All other robots use a smaller walking speed. The forward speed is reduced down to 175 mm/s. Turn and side speed are as much reduced as the forward speed is percentage wise reduced. Reduce walk speed for worn-out robotsWe calculate a value for worn-out robot dynamically while the robots walk. The value is between 1 and 0, 1 for good robots and 0 for worn-out ones. With it we can reduce the maximum walk speed of the robots to ensure stability. In theory we can also scale some balancing parameters. Dynamically adjusting the gyro balancingSince 2019 we dynamically adjust the gyro balancing parameters in the walk. For a few walking steps nothing is adjusted and we just measure the peaks of the y-gyro. Afterwards we repeat it with a sligthly reduced balancing value and slightly increased one. The size of change is random, but within a given range. With it we noticed, that 0.05 for the gyro values seem to be a good fit for all most robots (new ones and slightly worn-out). But also, once the joints heat up and reach a threshold where the stiffness is reduced by the robots software (at about 76°C), the gyro balancing values are increased in a short time, to something between 0.075 and 0.1. This helped a lot back in 2019 to keep playing with warm robots. More standing stillOur robots stand still a lot. Here the energy saving mode can reduce the currents in the joints to a minimum and prevent heating up further. In the round robin games after every first half all robots were below 60°C (except one, which did a lot of walking work). The goalie was always < 45°C and the defenders around the 50°C mark. This made it possible to change the goalie and one of the field players (inclusiv jersey number), e.g. the goalie became a field player and the field player the goalie for the second half. Increase the interpolation time of the step heightThe step height is a parabolic curve (from rUNSWift. I think you still use it too?). What we do it interpolate to the maximum after 125 ms (half of the default step duration of 250 ms). But for side steps, but also for worn-out robots, we increase the duration, so the step height it reduce a bit slower than normally. This prevents the swing foot (especially the tip of the toe) colliding with the ground too early. Increasing the time is done automatically with the value to decide how worn-out a robot is. Side hip shiftFor side steps we shift the hip away from the support leg if the legs are moving together again. Otherwise the momentum is often too large and the robot either falls sideways/diagonally, or needs to stabilize itself for a few steps. This hip shifting is also the reason why our robots can kick the ball without a problem after large side steps. In previous years we often had the problem that the leg would not even reach the ball because it would collide with the ground too early. Reset the start variables of the walkAfter each walk step we do a sligth reset of the walk parameters. For example the translations have a starting value like forwardL0, forwardR0, sideL0 and sideR0 (same as rUNSWift). Those define where the translations of the feet are at the beginning of the walk step. What we do it to use the measured positions of the soles. In specific situations we reset the starting positions to the measured positions. This is partially helpful for errors in the x-translation (forward/backward) after the robot was struggling (e.g. was close to falling backward or forward). But this is very helpful with side walking and turning. Worn-out robots like to have large errors in the hip rolls. If you reset the requested positions closer to the measured ones, the legs start to move more like as if it was a new robot. A video for comparision is shown below (sorry for back quality, there is a 10 MB limit :( ) The robot in the top half is really struggling to not fall, as the joints do not as requested. The same robot in the bottom half still has some struggles, but walks a lot better, because the code accepts that the joints did not as requested and resets the starting variables. *NOTE: we have a convertion function from joint positions to walk variables. Otherwise the kind of reset would not work. Stretch swing footThis feature is a "bit" overengineering. Based on the center of mass position in the soles, we decide at the start of a walk phase whether the robot might fall to the side of the swing, if we would not pull the leg together. In such a case we quickly stretch the leg out (in case the kinematic allows for it). This prevents a large amount of falls when walking close to other robots, as those often give smalles pushes from the side. Below is an example from the impact: WalkDelaySide2.mp4Other smaller differencesWe use a walk height of 230 mm (from sole/ground to origin of the robot between the hips). Also our lift height is 13 mm. |
Thanks for the input! @philipniklas-r |
Another thing I noticed, after watching one of the games, is that you seem to have either no acceleration limit, or there is a bug that the robot is allowed to execute a large backward step after walking forward. I recommend a restriction to force the robot to execute a step with 0 x-translation size when changing the walk direction, or reduce it down to a minimum (which we are doing). Additionally check if a acceleration for the x-translation is actually used (which also could be scaled based on the robot worn-out state). |
This is a large but important topic. I'd argue we could have gotten 2nd place in RC24 if we hadn't had as severe problems with walking stability on worn-out hardware. Feel free to add your own ideas, comments, or to-dos.
The text was updated successfully, but these errors were encountered: