so some pseudo-code would be…..
// assuming "up arrow" means move forward
MyPhysicsBox.Body.Velocity += Vector.Transform( Vector.Forward, MyPhysicsBox.Body.Orientation );
now, that code might not work as copied and pasted, but, the idea is to ADD to the velocity. Avoid outright assignments ( = ) and instead use ( += ).
The physics system will decide if you are 'allowed' to move forward or not …. if you are already against another box that is immovable, then you won't be able to move forward, but it will 'SLIDE' you along if the friction and direction allows.
Now, you might have seen some methods "ApplyForce" and others like that. To date, i've never seen those work properly, maybe i'm using it wrong, but i've been using the engine for over 8 months now (full time) and my game works just fine using Body.Velocity…… plus, by doing that assignment, you are avoiding method calls which take more time to execute than assignments.