Physics 2d biped using box2d

Started by
7 comments, last by Ryan Neal Blake 10 years, 11 months ago

Hello all

I am finally asking for help with this, when I started investigating if 2d skeletal animation was possible via physics, I came across numerous sources which basically stated its doable, but it’s very hard problem. I thought I would give it a shot any way. I now know it is a very very hard problem. I came across simbcon I finally thought I had found the light, little did I know converting from simbicon to box2d still seemed a bit tricky.

Anyhow I have been working with this in box2d for sometime now, and I would like some advice on what to do next, I have read so many research papers on how to achieve forms of locomotion in 2d, but me and maths do not gel, I know this pretty much goes hand in hand with what I am trying to achieve, so I have done my best to understand the basic fundamentals.

I am currently at a stage where I have got a neat code base where I can load in the models via JSON, can basiclly then import various animations poses which contain joint angles, the biped will simply try to reach those positions via joint motors. Once all joints are in range of the target position, the next pose is driven towards.

Now This works, but as any who has tried to do this before will know, there will be some oscillations which just make the movement look silly and unstable.

What I think I need to do now is reduce the ground force when a foot is in contact with the ground and also add PD controllers, If this is the case I would like to implement the easiest one first, or if there is anything else I can do next, to reach my goal, or even if my current approach is seriously flawed point me in the right direct.

Is there anything in Box2d preventing me from achieving walk motions like simbicon, from what I gather the majority of variables are available to get a simbicon style biped in box2d

My experience is also competent as programmer, I just find those research papers hard to convert the formulas with the symbols into useable code.

Thanks for reading this, and I am a long term lurker, go easy on me ;)

­­

I am hoping to open source all this if I can achieve something worthwhile.

Advertisement
Finally made some progress, got this walker moving and even back flipping (he dont land on his feet yet though )let the fun begin


I'll get a video up soon.

Well done - looking forward to seeing the video!

Checkout the backflip, framerate is smoother just the slow pc jing recording

http://screencast.com/t/6kWnOTVpGn

Also the walking

http://screencast.com/t/nxFTu8wL

Any feedback welcome!

Also the walking

http://screencast.com/t/nxFTu8wL

Great to see the progress. You seem to be driving towards world space target angles, but using external forces rather than (or perhaps as well as) joint drives. That will make the motion look quite artificial - I guess the goal is to have the character moving naturally when he gets external interactions. The real challenge is to do it all with joint drives - and no cheat forces! That's what I/we do at NaturalMotion - in 3D that's pretty tricky, but in 2D it should be a lot easier (though still not easy!).

Also the walking

http://screencast.com/t/nxFTu8wL

Great to see the progress. You seem to be driving towards world space target angles, but using external forces rather than (or perhaps as well as) joint drives. That will make the motion look quite artificial - I guess the goal is to have the character moving naturally when he gets external interactions. The real challenge is to do it all with joint drives - and no cheat forces! That's what I/we do at NaturalMotion - in 3D that's pretty tricky, but in 2D it should be a lot easier (though still not easy!).

I am only using joint motors to move the limbs at the moement, no external forces, what do you mean by world space target angles, thanks for the reply as well, NaturalMotion looks like pretty cool tech too!

Also another video of smoother walking, looks more jerky then it actually is

http://screencast.com/t/WbBXZ08uhXaF

I am only using joint motors to move the limbs at the moement, no external forces...

By external forces I mean forces or torques that are applied to one body part without the inverse being applied to another. So any kind of force or torque being applied to stabilise the character (e.g. a damping torque (or just velocity damping) applied to the pelvis) would count. It looks like that's what you're doing, because the upper body isn't rotating or reacting during the walk, and also when you pick him up with the mouse he moves linearly, but doesn't rotate.

The thing to aim for (if you're that way inclined!) is to drive the ragdoll only using the joint motors that joint body arts - e.g. the hip/knee/ankle joints etc, rather than joint motors between the parts and the world (which is what it looks to me like you're doing... but please correct me if necessary!). Then you need to write controllers that follow an input animation (or a procedural sequence), but use feedback to modify the targets so as to prevent the character from falling over.

- Danny

OK great, I'll have a go , if I can achieve what you say, should be a cool little piece of tech, with the pelvis, box2d allows body parts to be a fixed angle, I done this intially so I could keep him up right, making him balance and walk without having the a fixed angle will be tricky, but I like the challenge.

Thanks again!

Ill keep you posted with my progress.

Hi MrRowl,

I have been tackling the pelvis in regards to what you said previously, he can walk backwards for a bit which is promising!

http://screencast.com/t/bxUind4yx

This topic is closed to new replies.

Advertisement