Hello,
I’m working on my graduation project and building a simulation scene in Isaac Sim with RTX 5060. I aim to train reinforcement learning grasping policy for my custom gripper robotic arm imported from URDF.
I need to construct a grape vine orchard environment, where grapes are sheltered and occluded by branches and leaves. A camera will help the robot complete obstacle avoidance and fruit picking tasks.
I cannot find ready-made grape vine assets in official library. I hope to get guidance on two questions:
- How to properly model grape vines, branches and leaves to build a realistic occluded orchard scene.
- How to configure physics settings to keep grapes attached on vines and detachable when grasped by the gripper.
I’m still a beginner of Isaac Sim. Relevant tutorials, example scenes or practical suggestions will be highly appreciated.
Hi @gengjunjun2007, welcome to the Isaac Sim community, and good luck with your graduation project! Here is some practical guidance for both of your questions.
1. Building the Grape Vine Orchard Scene
Since there are no ready-made grape vine assets in the official NVIDIA Asset Library, you have a few options:
- External 3D asset sources: Download grape vine / orchard assets from sites like Sketchfab, TurboSquid, or Fab.com (many offer free assets). Look for assets in FBX, OBJ, or USD format. USD is preferred for Isaac Sim — you can convert FBX/OBJ to USD using the built-in asset importer (
File > Import) or via the omni.kit.asset_converter extension.
- Blender workflow: Model or modify grape vine assets in Blender (free), then export as FBX or directly as USD using the Blender USD exporter. This gives you full control over branch/leaf geometry and occlusion layout.
- Instancing for performance: Once you have a base vine asset, use USD instancing in Isaac Sim to populate the orchard efficiently without multiplying memory cost — important for RL training.
For the camera sensor used in obstacle avoidance and fruit detection, Isaac Sim’s RTX-based camera (omni.isaac.sensor.Camera) supports RGB, depth, and segmentation outputs, which integrate well with RL observation pipelines.
2. Physics Configuration for Attached-but-Detachable Grapes
This is a classic “breakable joint” use case in PhysX:
- Make each grape a rigid body (
RigidBodyAPI) with a collision mesh (CollisionAPI).
- Attach each grape to the vine using a Fixed Joint (
UsdPhysics.FixedJoint) between the grape prim and the vine/stem prim.
- Set the joint’s break force and break torque thresholds on the joint (properties
physics:breakForce and physics:breakTorque). When the gripper applies a force exceeding these thresholds, the joint breaks and the grape detaches naturally.
- Tune the break force values to match your gripper’s expected grasping force — start with small values (e.g., 5–20 N) and iterate.
A minimal Python snippet to add a breakable fixed joint:
from pxr import UsdPhysics, Gf
import omni.usd
stage = omni.usd.get_context().get_stage()
joint_path = "/World/Vine/Grape_01/FixedJoint"
joint = UsdPhysics.FixedJoint.Define(stage, joint_path)
joint.CreateBody0Rel().SetTargets(["/World/Vine/Stem"])
joint.CreateBody1Rel().SetTargets(["/World/Vine/Grape_01"])
joint.GetPrim().GetAttribute("physics:breakForce").Set(10.0) # Newtons
joint.GetPrim().GetAttribute("physics:breakTorque").Set(5.0) # Newton-meters
Getting Started Resources
Feel free to follow up if you run into specific issues with the URDF import or physics setup!
Hello!
We noticed that this topic hasn’t received any recent updates from anyone reporting this issue, so we are closing it for now to help keep the forum organized.
If you are still experiencing this issue or have related questions, please create a GitHub Discussion or Issue in the Isaac Sim repository and include a link to this topic along with updated details. Mentioning or linking to this original topic provides helpful context and makes it easier for others to assist you.
Thank you for being part of the NVIDIA Isaac Sim community.
Best regards,
The NVIDIA Isaac Sim Forum Team