-
Hello IsaacLab team, I would like to create a dynamic task in IsaacLab for RL training. However, from what I see, the RigidBody class in IsaacLab does not seem to support modeling a conveyor belt or allowing a rigid body to move by itself (without being driven by joints or external forces). Is there a recommended way to achieve this kind of environment setup in IsaacLab? Thanks! |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 5 replies
-
Thank you for posting this. To create a dynamic conveyor belt that transfers motion via friction to a cube in IsaacLab, you’re correct that the I'll move this post to our Discussions section for the team and others to follow up. Apply a Surface Velocity to the Conveyor BeltThe standard method—also used in Isaac Sim and Omniverse—is to use a collider with a surface velocity. Instead of animating the conveyor geometry, you define a static or kinematic plane (the belt’s surface), then apply a tangential surface velocity at the collider level. Physics engines (including those underlying Isaac Sim) treat any objects in contact with this collider as if the surface is moving, properly transferring frictional motion. How To Do This in IsaacLab
Sample code snippet: from omni.isaac.lab.sim.physics import set_collider_surface_velocity
# Assume `env` is your IsaacLab task environment
# Assume `belt_prim_path` is the path to your belt collider in the stage
surface_velocity_vector = [0.5, 0, 0] # Moves along +X at 0.5m/s
set_collider_surface_velocity(
stage=env.stage, # or sim.stage depending on your initialization
prim_path=belt_prim_path,
velocity=surface_velocity_vector
)
Resources1. Conveyor Belt Setup & Surface Velocity
2. Setting Friction and Materials
3. Example Tutorials
Footnotes
|
Beta Was this translation helpful? Give feedback.
-
Thank you for your prompt reply, your explanation was very clear. I am now able to use a collider with a surface velocity in the UI to simulate the conveyor belt functionality. However, I would like to know how this can be implemented directly in IsaacLab through code. I am using the latest version of IsaacLab, but I could not find the function set_collider_surface_velocity (e.g., from omni.isaac.lab.sim.physics import set_collider_surface_velocity does not work). I also tried another approach: pre-creating the conveyor belt as a static or kinematic rigid body in USD, setting the surface velocity parameter of the collider there, and then importing it through code as follows:
But in this case, the surface of the conveyor belt does not actually move after loading. Is there a recommended way to achieve this behavior via code in IsaacLab? Thanks again! |
Beta Was this translation helpful? Give feedback.
I got it working by bypassing the conveyor extension and directly running the velocity commands. I had Claude Code summarize it:
Hey! Got the conveyor physics working in Isaac Lab - turns out PhysX surface velocity only works with specific settings:
The key insight was that surface velocity is incompatible with GPU/Fabric physics - it's a CPU-only feature. Once we…