Taking Your Custom Mobile Robot from CAD to Isaac Sim
TL;DR: Bringing your custom robot into NVIDIA’s Isaac Sim for realistic simulations doesn’t have to be painful. In this post, I’ll walk you step-by-step using MoMo, a modular research robot
To follow along comfortably, ensure you have:
- Basic knowledge of Isaac Sim and ROS2.
- Familiarity with CAD modeling.
- Access to Onshape, a free browser-based CAD tool ideal for this workflow.
- NVIDIA Isaac Sim installed (version 4.5).
Why I’m Writing This Post
When I started working alongside Markus Knitt on MoMo, our modular mobile robot at the Institut für Technische Logistik (ITL), TU Hamburg , the goal was to create a versatile robot platform for diverse research experiments. The idea was simple, to allow researchers to quickly swap out top modules for various tasks like navigation, manipulation, or perception experiments.
While we made strong progress on MoMo over the last year, getting it to behave accurately in Isaac Sim was still a challenge.
The Struggle
Have you ever imported your custom robot into Isaac Sim, only to witness it spectacularly fall apart? Here’s MoMo falling apart in one of the early attempts:
The problem wasn’t Isaac Sim itself, but rather the lack of consolidated, clear instructions online. While information is available, it’s scattered across forums, tutorials, videos, and documentation, making it hard to know what steps to take and in which order.
After several frustrating weeks spent piecing together scattered information, it became clear that a comprehensive, step-by-step guide didn’t yet exist. This guide is created specifically to save you (and future me) from experiencing those same struggles.
URDF Conversion
To simulate your robot in Isaac Sim, you need a URDF (Unified Robot Description Format) file, a standardized format for robot descriptions.
I’ve been using SolidWorks for years and have become deeply familiar with its capabilities. I’ve worked with various URDF exporters like fusion2urdf for Fusion 360 and sw2urdf for SolidWorks, and I’ve always been confident in SolidWorks as my go-to tool. That said, I was genuinely impressed by Onshape, despite never considering a switch.
Specifically, Onshape’s approach to mating parts using mate connectors made the URDF export straightforward, clear, and less error-prone.
Meet MoMo: The Modular Mobile Robot
For this guide, I’ll use MoMo as a concrete example. MoMo is open-source, modular, and features mecanum wheels ideal for omnidirectional movement. Here’s what MoMo looks like in Onshape:
MoMo CAD model in Onshape
You can explore MoMo’s full documentation and GitHub repository to learn more or replicate this setup yourself. It serves as an ideal example for demonstrating a realistic and practical workflow from CAD to Isaac Sim.
Step-by-Step: From CAD to URDF to Isaac Sim
We’re preparing the robot model specifically for the onshape-to-robot tool. This tool converts an Onshape CAD assembly into a URDF that simulation tools like Isaac Sim can understand.
Here’s how to smoothly take your robot from CAD to Isaac Sim simulation:
1. Preparing Your Robot in Onshape
If you’re unfamiliar with Onshape assemblies, I recommend watching this YouTube playlist.
Already assembled your robot in another CAD tool? No worries. You can import your assembled model directly into Onshape. Just zip your assembly files and import them. Onshape will load the robot as it is, but keep in mind: mates and joints won’t be preserved during the import.
To avoid reassembling everything from scratch:
- Group all static (non-moving) components using the Group Mate.
- Add only the revolute and prismatic mates for movable joints.
To make this work correctly, the tool expects a certain naming convention and structure in the Onshape model. Checkout the design time considerations for more details. The creator of onshape-to-robot provides clear instructions in this video. Although slightly outdated, it still offers valuable insights.
Follow these naming conventions for URDF compatibility:
- Links:
link_<link_name>
- Frames:
frame_<frame_name>
- Joints:
dof_<joint_name>
Using this naming pattern ensures that the exporter recognizes and handles each part correctly when generating your URDF. If you assign materials to parts in your Onshape model, the onshape-to-robot
tool will automatically include those material properties in the generated URDF.
After assigning your links, frames, and joints in Onshape, your model should look something like this:
MoMo Onshape model after defining links, frames, and joints.
To easily follow along, you can directly access MoMo’s fully set-up Onshape model here:👉 MoMo Robot Onshape Model
2. Generating and Verifying Your URDF
Use onshape-to-robot to generate your URDF. After exporting your URDF, always verify it quickly using the Online URDF Viewer. You can drag and drop your generated folder into the viewer to visualize the URDF.
Config file to generate URDF
# This config.json file is used to generate the URDF from Onshape
# Replace the URL with your own Onshape document URL
{
"url": "https://cad.onshape.com/documents/0f7ba08d49760d832652e76c/w/f802382a554ac4e5d967eb06/e/176c79e9883e5c00c7190ba1",
"output_format": "urdf",
}
# In case you want to use scad manual approximation (as explained in the video), it will be as follows:
{
"url": "https://cad.onshape.com/documents/0f7ba08d49760d832652e76c/w/f802382a554ac4e5d967eb06/e/176c79e9883e5c00c7190ba1",
"output_format": "urdf",
"use_scads": true,
"post_import_commands": [
"cp momo_urdf/scad/*.scad momo_urdf/assets/"
]
}
Ensure:
- Correct joint rotation direction.
- Collision meshes are defined.
Here’s how your verified URDF should look, with joint sliders working correctly:
URDF verification showing functional joint sliders
Also, you can define the collision meshes in your URDF. This is important for accurate physics simulation in Isaac Sim. The online URDF viewer allows you to visualize the collision meshes.
Here’s how the collision meshes should appear in the URDF verification. Here, the collision meshes are simplified using OpenSCAD manual approximation so that the simulation runs smoothly without complexity:
URDF verification showing collision meshes clearly
3. Importing the Robot into Isaac Sim
This tutorial targets Isaac Sim version 4.5 and is intended for wheeled mobile robots. The steps may slightly vary for other types of robots.
Steps to import:
- Open Isaac Sim and click
File → Import
. - Choose your
.urdf
file. - Set import settings:
- Reference your model (recommended)
- Choose movable base for mobile robots.
- For actuated revolute joints (wheels), set Target to Velocity. Passive wheels (casters or rollers) set Target to None.
- Keep everything else as default.
Here’s the Isaac Sim import dialog box with all correct options selected:
Isaac Sim import dialog with correct options selected
After importing, a folder structure with .usd
files appears:
robot_base.usd
(appearance)robot_physics.usd
(physical properties)robot_sensor.usd
(sensor setups)robot.usd
(main model referencing others)
If the Collision From Visuals
box is checked, collisions will be defined based on the meshes. The robot_base.usd
in Isaac Sim appears as follows (collisions are enabled for visualization):
robot_base.usd in Isaac Sim
Adjust the articulation root from base_link
to the main robot prim (/world/robot_name
). Check Isaac Sim documentation for more details about the articulation root.
✅ Verifying Wheel Actuation
Before proceeding further, it’s a good idea to test if your joints and articulation are working correctly.
- Open
robot.usd
in Isaac Sim and create a ground plane so that the robot doesn’t fall through the floor. - In the Stage panel, select any of the actuated revolute joints (e.g., one of the wheels).
- Set a Target Angular Velocity.
- Start the simulation.
If the wheel rotates as expected, everything is working perfectly.
Repeat this for all the wheels to make sure joint configurations are correct and that your robot is able to move.
Customizing Appearance, Physics, and Sensors
- Customize appearance in
robot_base.usd
(appearance tutorial). - Adjust friction, mass, and center-of-gravity settings in
robot_physics.usd
. - Define sensors (cameras, lidars) in
robot_sensor.usd
.
MoMo model in Isaac Sim
4. Connecting to ROS 2 Using Omnigraph in Isaac Sim
Omnigraph, Isaac Sim’s visual scripting tool, makes integration with ROS2 straightforward. For mecanum-wheeled mobile robots like MoMo, you’ll typically need:
- Omnigraph nodes for Lidar and Camera.
- ROS2 Clock, ROS2 TF and Odometry graphs.
- A Holonomic Controller to enable omnidirectional movement (specify wheel radius and wheel distance).
Omnigraph shortcuts
To enable communication between your simulated robot and ROS 2, Isaac Sim provides a set of Omnigraph nodes under the Robotics menu. These nodes make it easy to hook up sensors, time, and transformations with your ROS 2 system. Here’s a high-level overview of what you’ll need:
RTX LiDAR
Go to Tools → Robotics → ROS2 Omnigraphs → RTX LiDAR
and select the LiDAR prim. Make sure the LiDAR prim (Create → Sensors → RTX LiDAR → Rotating
) already exists in your scene. You can configure topic names, frame IDs, and other parameters directly in the Omnigraph node.
ROS Clock
Add a clock node via Tools → Robotics → ROS2 Omnigraphs → Clock
to sync simulation time with ROS 2.
ROS TF Publisher
To publish the robot’s TF tree, use Tools → Robotics → ROS2 Omnigraphs → TF Publisher
. Select your robot’s articulation root (e.g., /World/momo
) as the target prim. This will include all joints in the TF tree.
To include sensors like LiDAR or cameras in the TF tree:
- Open the ROS TF Omnigraph.
- Duplicate the
ROS2PublishTransformTree
node. - Set
parentPrim
to something like/World/momo/base_link
. - Set
targetPrim
to the sensor path, e.g.,/World/momo/base_link/velodyne
. - You can add more sensors by clicking +Add Target and selecting the sensor prims.
Holonomic Control Setup
In the Holonomic control Omnigraph (check out the o3dyn
robot model for reference), select the USD Setup Holonomic Robot
node.
In the properties panel, set:
comPrimPath
to/World/momo/base_link
robotPrimPath
to/World/momo
(the prim with the articulation root)
Articulation Controller
node and set the targetPrim
to /World/momo
in the property panel.
Important Note on Holonomic Controllers:
To make the Holonomic Controller work properly, you must explicitly define the angles of your wheels relative to the robot frame. I found a helpful forum post that clearly explains how to set this up correctly:
→ Setting wheel angles for holonomic robots
TL;DR
Click on the actuated wheel joints in the Stage, then go to Add → Attribute
- For wheel angles:
- Name:
isaacmecanumwheel:angle
- Type:
Float
- Name:
- For wheel radius:
- Name:
isaacmecanumwheel:radius
- Type:
Float
- Name:
Set the wheel radius and the angles in the joint properties .The wheel radius for MoMo is 0.1015 m
and the wheel angles are:
- Front Left: -135 degrees
- Front Right: -45 degrees
- Back Left: -45 degrees
- Back Right: -135 degrees
Ensure you follow these steps precisely, as incorrect wheel angle definitions can prevent the robot from moving as intended in simulation.
5. Testing Your Robot in Realistic Environments
Here’s MoMo simulated in a realistic warehouse environment within Isaac Sim, highlighting its potential for logistics or warehouse-based robotics research:
MoMo in a realistic warehouse simulation environment
6. Final Check in RViz
Confirm your setup visually in RViz. Your data visualization should appear organized and correct, like this:
Data visualization in RViz
7. See your robot in action!
Finally, here’s MoMo moving smoothly and realistically within Isaac Sim, demonstrating a successful integration.
The velocity commands are sent from ROS 2 via the /cmd_vel
topic.
MoMo moving in Isaac Sim simulation.
Congratulations! You’ve successfully brought your mobile robot from CAD into Isaac Sim for simulation.
Final Thoughts
I created this detailed yet conversational guide because I wished something like this had existed when I started working on MoMo simulation. Hopefully, this guide simplifies your robotics journey, saving you from weeks of frustration.
Have questions, comments, or experiences you’d like to share? I’d love to hear from you!
Additional Resources
If you are also working with mecanum-wheeled robots, I highly recommend checking out the o3dyn robot model available in Isaac Sim. It’s a great reference for omnidirectional mobile robot simulation.There’s an excellent ROSCon Talk that dives deep into:
- Simulation modeling of highly dynamic omnidirectional mobile robots
- Design insights for accurate behavior in Isaac Sim
- Techniques to bridge the gap between simulation and real-world performance (sim2real)
They also published a paper that explores how various simulation parameters affect sim2real outcomes.
For additional context, this YouTube tutorial also does a great job explaining how to simulate wheeled mobile robots in Isaac Sim.
Happy simulating!