Integrating pathfinding with physics/ local object avoidance

I have a problem which is causing me a lot of grief.

We are building a simulation where several human characters moves about in a relatively small space. We’ve implemented a path finding system based on nodes and edges and use A* to navigate. Works fine. The problem starts when we want the AI to avoid one another. The solution we are attempting is to not try and predict where the AI are going to be but rather use local object avoidance to steer them around one another. This also works OK but the problem then is that the AI wander off their paths and into other static objects which sometimes cause them to wander even further off their paths and get caught in walls, walk over furniture and generally do stoopid looking things.

Does anyone know a good algorithm I can refer to for solving this? We only have half a dozen AI in teh scene so processing power isn’t too much of an issue.

Also is there a way to make sure that the collision boxes for the physics always take priority over the AI so that the AI never walk through walls or over furniture? My characters have collision capsules but if the AI code pushes them hard enough they still go through walls and over furniture (or each other) etc.

Any suggestions would be welcome!

regards,

Tony

Check out Reciprocal Velocity Obstacles:

http://gamma.cs.unc.edu/RVO/Library/

You might want to check out the UnitySteer project. It’s MIT licensed, and although it’s designed to work with AngryAnt’s Path implementation, it can work with other pathfinding implementations as well.

Essentially, it’s just a Unity-specific port of the OpenSteer library, and includes all kinds of steering behaviors. Among them are local obstacle-avoidance, which can easily be combined with path following to keep the units on track. There’s a demo video there of exactly that kind of situation, I believe.

I haven’t used UnitySteer personally since I’m also doing a custom implementation of steering behaviors, so I can’t provide specific feedback on it, but it looks well implemented from what I’ve seen so far.

.