Point 1 and 2: Not 100% sure what your problem is. If you want to move around bodies manually have a look at kinematic bodies. Should not moving to where other objects are happen automatically as part of the collision detection? Anyway if you want to test
against some kind of "invisible" object or trigger, you should use sensors exactly the way you described it.
Point 3: Yes this is done automatically upon the next timestep.
Point 4: There should already be some discussions here how you can get the impulse. Here is an excerpt from the box2d manual on how to determine the approach velocity in the PreSolve event (in C++):
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold)
b2PointState state1, state2;
b2GetPointStates(state1, state2, oldManifold, contact->GetManifold());
if (state2 == b2_addState)
const b2Body* bodyA = contact->GetFixtureA()->GetBody();
const b2Body* bodyB = contact->GetFixtureB()->GetBody();
b2Vec2 point = worldManifold.points;
b2Vec2 vA = bodyA->GetLinearVelocityFromWorldPoint(point);
b2Vec2 vB = bodyB->GetLinearVelocityFromWorldPoint(point);
float32 approachVelocity = b2Dot(vB � vA, worldManifold.normal);
if (approachVelocity > 1.0f)
Point 5: Running World::Step with a dt of 0 is perfectly fine. We use it in the testbed and the samples framework to pause the simulation. Adding and removing Bodies should not interfere with it and work like with any other timestep too.