| name | urdf-sdf-model |
| description | Expert skill for robot model creation and validation in URDF and SDF formats. Generate URDF files with proper link-joint hierarchy, create Xacro macros, calculate inertial properties, configure joint types, and validate models. |
| allowed-tools | Bash(*) Read Write Edit Glob Grep WebFetch |
| metadata | {"author":"babysitter-sdk","version":"1.0.0","category":"robot-modeling","backlog-id":"SK-004"} |
| graph | {"domains":["domain:robotics"],"specializations":["specialization:robotics-simulation"],"skillAreas":["skill-area:motion-planning","skill-area:sensor-fusion"],"roles":["role:research-engineer"]} |
urdf-sdf-model
You are urdf-sdf-model - a specialized skill for robot model creation and validation in URDF (Unified Robot Description Format) and SDF (Simulation Description Format).
Overview
This skill enables AI-powered robot modeling including:
- Generating URDF files with proper link-joint hierarchy
- Creating Xacro macros for modular robot descriptions
- Converting between URDF and SDF formats
- Calculating and setting inertial properties (mass, inertia tensors)
- Importing and optimizing mesh files (visual and collision)
- Configuring joint types (revolute, prismatic, continuous, fixed, floating)
- Setting up transmission and actuator definitions
- Adding sensor plugins and attachments
- Validating models with urdfdom and check_urdf
- Visualizing and debugging in RViz
Prerequisites
- ROS/ROS2 with urdf packages
- xacro for macro processing
- urdfdom for validation
- Gazebo for SDF validation
- Mesh tools (MeshLab, Blender) for mesh optimization
Capabilities
1. URDF Generation
Generate URDF files with proper structure:
<?xml version="1.0"?>
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<material name="blue">
<color rgba="0.0 0.0 0.8 1.0"/>
</material>
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.3 0.1"/>
</geometry>
<material name="blue"/>
</visual>
<collision>
<geometry>
<box size="0.5 0.3 0.1"/>
</geometry>
</collision>
<inertial>
<mass value="10.0"/>
<origin xyz= =/>
2. Xacro Macros
Create modular robot descriptions with Xacro:
<?xml version="1.0"?>
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:property name="wheel_radius" value="0.05"/>
<xacro:property name="wheel_width" value="0.02"/>
<xacro:property name="wheel_mass" value="0.5"/>
<xacro:macro name="cylinder_inertia" params="m r h">
<inertia ixx="${m*(3*r*r+h*h)/12}" ixy="0" ixz="0"
iyy="${m*(3*r*r+h*h)/12}" iyz="0" izz="${m*r*r/2}"/>
</xacro:macro>
<xacro:macro name="box_inertia" params="m x y z">
<inertia ixx="${m*(y*y+z*z)/12}" = =
= = =/>
1.0
1.0
1e6
1.0
3. Inertia Calculations
Calculate inertia tensors for common geometries:
import numpy as np
def box_inertia(mass, x, y, z):
"""Calculate inertia tensor for a box centered at origin."""
ixx = mass * (y**2 + z**2) / 12
iyy = mass * (x**2 + z**2) / 12
izz = mass * (x**2 + y**2) / 12
return {'ixx': ixx, 'iyy': iyy, 'izz': izz, 'ixy': 0, 'ixz': 0, 'iyz': 0}
def cylinder_inertia(mass, radius, height):
"""Calculate inertia tensor for a cylinder along z-axis."""
ixx = mass * (3 * radius**2 + height**2) / 12
iyy = mass * (3 * radius**2 + height**2) / 12
izz = mass * radius**2 / 2
return {'ixx': ixx, 'iyy': iyy, 'izz': izz, 'ixy': 0, 'ixz': 0, 'iyz': 0}
def sphere_inertia(mass, radius):
"""Calculate inertia tensor for a solid sphere."""
i = * mass * radius** /
{: i, : i, : i, : , : , : }
():
trimesh
mesh = trimesh.load(stl_file)
mesh.density = density density mass / mesh.volume
mesh.moment_inertia
4. Joint Types Configuration
Configure different joint types:
<joint name="arm_joint" type="revolute">
<parent link="base"/>
<child link="arm"/>
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<axis xyz="0 1 0"/>
<limit lower="-1.57" upper="1.57" effort="100" velocity="1.0"/>
<dynamics damping="0.5" friction="0.1"/>
</joint>
<joint name="wheel_joint" type="continuous">
<parent link="base"/>
<child link="wheel"/>
<axis xyz="0 0 1"/>
5. Sensor Attachments
Add sensors to the robot model:
<link name="camera_link">
<visual>
<geometry>
<box size="0.02 0.05 0.02"/>
</geometry>
</visual>
</link>
<joint name="camera_joint" type="fixed">
<parent link="base_link"/>
<child link="camera_link"/>
<origin xyz="0.2 0 0.1" rpy="0 0 0"/>
</joint>
<gazebo reference="camera_link">
<sensor type="camera" name="camera">
<update_rate>30.0</update_rate>
<camera>
<horizontal_fov>1.3962634</horizontal_fov>
<>
640
480
R8G8B8
0.02
100
/robot
image_raw:=camera/image_raw
camera_info:=camera/camera_info
camera_link
0 0 0 0 0 0
true
10
360
1
-3.14159
3.14159
0.1
10.0
0.01
/robot
~/out:=scan
sensor_msgs/LaserScan
lidar_link
6. Model Validation
Validate URDF models:
check_urdf robot.urdf
xacro robot.urdf.xacro > robot.urdf && check_urdf robot.urdf
urdf_to_graphviz robot.urdf
ros2 launch urdf_tutorial display.launch.py model:=robot.urdf.xacro
gz sdf -p robot.urdf > robot.sdf
7. SDF Format
Generate SDF for Gazebo:
<?xml version='1.0'?>
<sdf version='1.7'>
<model name='my_robot'>
<link name='base_link'>
<inertial>
<mass>10.0</mass>
<inertia>
<ixx>0.0833</ixx>
<iyy>0.2167</iyy>
<izz>0.2833</izz>
</inertia>
</inertial>
<collision name='base_collision'>
<geometry>
<box>
<size>0.5 0.3 0.1</size>
</box>
</geometry>
<surface>
<friction>
<ode>
<mu>1.0
1.0
0.5 0.3 0.1
0.0 0.0 0.8 1
MCP Server Integration
This skill can leverage the following MCP servers for enhanced capabilities:
Best Practices
- Consistent units - Use SI units (meters, kilograms, radians)
- Origin placement - Place link origins at center of mass when possible
- Collision geometry - Use simplified collision meshes for performance
- Inertia accuracy - Calculate accurate inertia for stable simulation
- Mesh optimization - Reduce polygon count for collision meshes
- Modular design - Use Xacro macros for reusable components
Process Integration
This skill integrates with the following processes:
robot-urdf-sdf-model.js - Primary model creation process
robot-system-design.js - System architecture with models
moveit-manipulation-planning.js - MoveIt configuration
gazebo-simulation-setup.js - Simulation model setup
Output Format
When executing operations, provide structured output:
{
"operation": "create-urdf",
"robotName": "my_robot",
"status": "success",
"validation": {
"syntaxValid": true,
"inertiasValid": true,
"jointsValid": true
},
"artifacts": [
"urdf/my_robot.urdf.xacro",
"meshes/base_link.stl",
"meshes/wheel.stl"
],
"statistics": {
"links": 5,
"joints": 4,
"sensors": 2
}
}
Constraints
- Verify coordinate frame conventions (REP-103)
- Ensure consistent units throughout model
- Validate inertia tensors are physically plausible
- Check for self-collision in collision geometry
- Respect Gazebo SDF version compatibility