It’s been over eight years since I first released this from NASA JPL but I wanted to share urdf-loader and the accompanying xacro-parser for processing URDF and Xacro file formats commonly used in robotics for defining the joints and mechanical structure. During my time at JPL we wrote tools for a large variety of robotics from high profile missions like the Mars Rovers to some research robotics like Robonaut or stand-in robotic arms like the Kinova Jaco.
Using generalized robotic formats like URDF meant we could more easily build one tool for many robotic systems. In the beginning many of these projects were in Unity (which is why a Unity parser is included in the repo) but we eventually moved to developing web tools using three.js, starting with the ATHLETE robot.
The All-Terrain-Hex-Limbed-Extra-Terrestial-Explorer robot in 6-legged, 3-legged, and climbing configurations.
The ATHLETE URDF model in multiple varieties is included as a sample model.
The URDF Parser processes the files into series of links and joints with built-in functions for assigning joint angles to the system. By connecting this model up to a live websocket streaming data from ROS or any other telemetry system you can pretty quickly have a visualization system for your robot.
Tools
For easy previews, the urdf-loader project includes a drag-and-drop demo page for previewing files along with direct manipulation controls for posing the model.
The ATHLETE URDF model in multiple varieties is included as a sample model.
If you have a VR headset you can jump in and directly manipulate the models with your controller, as well.
What is URDF, Xacro?
For those unfamiliar, URDF (or Universal Robot Description Format) is a format pioneered by the ROS platform that lets you define a variety of joints like (revolute, planar) and linkages between them with associated meshes, collision models, limits, and other properties. URDF has some limitations around parallel kinematic systems making them, ironically, not so universal but otherwise is well suited for more common robots.
More Models
Xacro on the other hand is an XML macro-style format that lets you define instructions for building a URDF (or other XML file) based on system variables. So structures like a robotic arm may only need to be defined once and then duplicated multiple times, linkage sizes can vary based on the construction of the real robot, or features like cameras or other hardware can be conditionally included in a visualization.
More complex models like JSC’s Robonaut and Valkyrie model use Xacro to abstractly define the robotic structure which can be built to a URDF using xacro-parser before being loaded with urdf-loader.
I’ve been pretty pleased to see the project get some pretty broad use across the community and even see screenshots pop up papers every once and awhile. If you’re interested in giving the project a try there are quite a few robotic models available online if you search for URDF, including URDF models of both the Mars Rover and Helicopter, which are used for driving operations and visualization at NASA JPL:




