I’ll be honest. I had some problems getting my bouncing ball running model working. Oh, here is the model.
https://www.wired.com/story/how-is-a-runner-like-a-bouncing-ball/
Basically, this models the speed of a running human by assuming they are bouncing ball. When the human impacts the ground, there is some maximum impact force and an impact time. The impact time decreases with horizontal velocity such that eventually, all the force is used in the vertical direction to keep the human off the ground long enough to switch feet in the air. The end.
As I was making this model, I took some notes because I couldn’t get it to work. Here are my notes. Hopefully you can use this to see how to troubleshoot a program.
Running model notes
I think I mostly have it working:
http://www.glowscript.org/#/user/rhettallain/folder/blog_posts/program/runningbouncemodel/edit
Here is basically how it works. Two big ideas:
- Humans can push off the ground with some maximum force. This force does two things – gets them off the ground and in the air so legs can move and pushes them forward
- The contact time with the ground is small and gets smaller as horizontal speed increases
- This means as the human speeds up, the ground force eventually gets to where it can only push up and not forward
Here is what it looks like so far
Here is a graph of speed vs. time
- This model reaches a max speed of about 3.5 m/s in just a couple of strides – that doesn’t seem right
- I think my Fv calc is wrong – it gives back the same speed not the needed vertical speed to get the stride time
- Need to recalcualte Fv based on pfinal
- If you want to be in the air for ts seconds, then your initial vertical velocity must be -g=dv/dt. dv=g*dt dv = 2vstart. start=(½)gdt
- Now to calculate the force. I know tc (contact time) so F = dp/dt = m*(vy2-vy1)/tc – this is the total force = Fv-mg so Fv = that stuff +mg
Something isn’t right. Here is a plot of position vs. time
It’s getting higher and higher (and going lower – weird)
- I’m getting stride (in air) times of 0.09 to 0.13 – that’s wrong
Ok – I think I know the problem. I need to set the force push time loop and forget about while human.pos.y<R – I think that’s my problem
How about this
- Once human hits the ground – calculate Fv, Fx, and tc set tcount = 0
- While tcount < tc – set human.pos.y = ground. And set the forces
- When tcount = tc, turn off the forces and stop holding the person
It appears there is something wrong with my Fx.
- Fx is some value for the first push – but after that it goes to zero and the Fv is maxed out.
- Werid
- There is a problem with both Fv and Fx
The problem is the time of impact – it gets too small such that the required force is HUGE
- How about a min time – and it can’t go lower?
Fmax = m*2v/t
t=m*2*v/Fmax
I think the problem is that during the contact time, the horizontal force is too much so that the human ends up going faster than the theoretical speed.
I can use the time and force and velocity to estimate the average velocity and then recalculate the time
This is the paper
https://www.physiology.org/doi/pdf/10.1152/japplphysiol.00947.2009
It has this plot.
This shows a decrease in contact time with speed
Here is what I get for a fit
This gives a contact time function of
Although this “blows up” at v= 0. Maybe I should say tc = 0.3612 for v < 2 and this expression for v>=2
End of notes – it finally worked.