rigid_body_velocity
The velocity of a dynamic rigid-body controls how fast it is moving in time. The velocity is applied at the center-of-mass of the rigid-body, and is composed of two independent parts:
- The linear velocity is specified as a vector representing the direction and magnitude of the movement.
- In 3D, the angular velocity is given as a vector representing the rotation
axis multiplied by the rotation angular speed in
rad/s(axis-angle representation). In 2D, the angular velocity is given as a real representing the angular speed inrad/s.
info
The velocity is only relevant to dynamic rigid-bodies. It has no effect on fixed rigid-bodies, and the velocity of kinematic rigid-bodies are automatically computed at each timestep based on their next kinematic positions.
The velocity of a rigid-body is automatically updated by the physics pipeline after taking forces, contacts, and joints into account. It can be set when the rigid-body is created or after its creation:
# Set the velocities when the rigid-body is created.
rigid_body = (
rp.RigidBody.dynamic()
# The linear velocity of this body.
# Default: zero velocity.
.linvel((1.0, 3.0, 4.0))
# The angular velocity of this body.
# Default: zero velocity.
.angvel((3.0, 0.0, 0.0))
# All done, actually build the rigid-body.
.build()
)
# Set the velocities after the rigid-body creation.
rigid_body = world.rigid_bodies[rigid_body_handle]
# Setting these properties automatically wakes the rigid-body up.
rigid_body.linvel = (1.0, 3.0, 4.0)
rigid_body.angvel = (3.0, 0.0, 0.0)
assert rigid_body.linvel == rp.Vec3(1.0, 3.0, 4.0)
assert rigid_body.angvel == rp.Vec3(3.0, 0.0, 0.0)
Alternatively, the velocity of a dynamic rigid-body can be altered indirectly by applying a force or an impulse.