Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ros2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ jobs:
name: 'ROS 2 CI (${{ matrix.build_name }})'
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- build_name: 'source deps'
Expand Down
28 changes: 28 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,34 @@
Changelog for package urdfdom
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

6.0.0 (2026-04-20)
-----------
* Support for URDF Specification 1.2
* Extend parsing of acceleration, deceleration and jerk limits from ``limit`` tag (`#212 <https://github.com/ros/urdfdom/issues/212>`_)
* Update default limits for the joint limits and safety limits (`#249 <https://github.com/ros/urdfdom/issues/249>`_)
* Add invalid data checks to the Geometry data (`#242 <https://github.com/ros/urdfdom/issues/242>`_)
* Require urdfdom_headers 3.0.0 (`#257 <https://github.com/ros/urdfdom/issues/257>`_)
* Use URDF_MAJOR_VERSION for SOVERSION (`#248 <https://github.com/ros/urdfdom/issues/248>`_)
* Contributors: Jose Luis Rivero, Sai Kishor Kothakota, Steve Peters

5.1.2 (2026-04-18)
-----------
* Revert "Extend parsing of acceleration, deceleration and jerk limits from `limit` tag (`#212 <https://github.com/ros/urdfdom/issues/212>`_)"
This was a breaking change that will be released in 6.0.0
* Contributors: Steve Peters

5.1.1 (2026-04-15)
------------------

* Prevent CI from failing fast to allow all builds to complete (`#254 <https://github.com/ros/urdfdom/issues/254>`_)
* Remove ``urdf_world/types.h`` deprecation (`#251 <https://github.com/ros/urdfdom/issues/251>`_)
* Extend parsing of acceleration, deceleration and jerk limits from ``limit`` tag (`#212 <https://github.com/ros/urdfdom/issues/212>`_)
* ROS 2 CI: build urdfdom_headers from source (`#246 <https://github.com/ros/urdfdom/issues/246>`_)
* Disable system workflow because ``urdfdom_headers`` isn't available on Ubuntu 24.04 (`#240 <https://github.com/ros/urdfdom/issues/240>`_)
* Fix ROS 2 CI workflow by updating Ubuntu version and checkout action (`#239 <https://github.com/ros/urdfdom/issues/239>`_)

* Contributors: Alejandro Hernández Cordero, Sai Kishor Kothakota, Steve Peters

5.1.0 (2026-02-06)
------------------
* Support for URDF Specification 1.1
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

find_package(TinyXML2 REQUIRED)

find_package(urdfdom_headers 2.1.0 REQUIRED)
find_package(urdfdom_headers 3.0.0 REQUIRED)
find_package(console_bridge_vendor QUIET) # Provides console_bridge 0.4.0 on platforms without it.
find_package(console_bridge REQUIRED)

Expand Down
39 changes: 35 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
urdfdom
===========
# urdfdom

The URDF (U-Robot Description Format) library provides core data structures and a simple XML parsers for populating the class data structures from an URDF file.
The URDF (U-Robot Description Format) library provides core data structures and simple XML parsers for populating the class data structures from a URDF file.

For now, the details of the URDF specifications reside on http://ros.org/wiki/urdf
Like the accompanying `urdfdom_headers`, this repository is a **custom fork** that includes an implementation of a C++ parser with specialized support for **constraint descriptions** to safely model closed-loop kinematics (e.g., for parallel robots).

## Constraints Feature

This fork introduces `constraint` elements representing "cut joints" or "cut links" allowing the description of closed kinematic loops without breaking surrounding packages.
- It parses constraints exactly like the standard URDF `joint` element structure but includes a `child_frame` origin and a `child` axis to effectively describe the two frames of the cut element.
- The constraint structure depends on the custom types (`UNKNOWN`, `REVOLUTE`, `PRISMATIC`, `UNIVERSAL`, `SPHERICAL`, and `LINK`).

For now, the details of the general URDF specifications reside on http://ros.org/wiki/urdf

### Using with ROS

Expand Down Expand Up @@ -110,6 +117,13 @@ Version 1.2 extends the URDF specification with extended joint limits:
- **Deceleration limit**: The `deceleration` attribute specifies the maximum joint deceleration
- **Jerk limit**: The `jerk` attribute specifies the maximum joint jerk (rate of change of acceleration)

Version 1.2 also relaxes some requirements on the existing joint limit attributes:
- `lower` and `upper` are optional for non-`revolute`/non-`prismatic` joints and default to `-infinity` and `infinity` when omitted
- for `revolute` and `prismatic` joints, both `lower` and `upper` must be provided
- `effort` and `velocity` become optional and default to infinity when omitted
- `effort`, `velocity`, `acceleration`, `deceleration`, and `jerk` must all be non-negative when provided
- when both are specified, `upper` must be greater than or equal to `lower`

All three attributes are optional and default to infinity (no limit). If `acceleration` is specified but `deceleration` is not, `deceleration` defaults to the acceleration value. All values must be non-negative.

**Extended Joint Limits Example:**
Expand All @@ -132,6 +146,23 @@ All three attributes are optional and default to infinity (no limit). If `accele
| `deceleration` | Maximum joint deceleration (rad/s² or m/s²) | Same as `acceleration`, or infinity if `acceleration` is not set | Must be non-negative |
| `jerk` | Maximum joint jerk (rad/s³ or m/s³) | Infinity | Must be non-negative |

#### Joint Limit Semantics By Version

The parser keeps legacy behavior for older URDF versions and only applies the relaxed defaults starting in version 1.2.

| Attribute | Version 1.0 / 1.1 | Version 1.2 |
|-----------|-------------------|-------------|
| `lower` | Optional, defaults to `0.0` when omitted | Optional for non-revolute/non-prismatic joints, defaults to `-infinity` when omitted |
| `upper` | Optional, defaults to `0.0` when omitted | Optional for non-revolute/non-prismatic joints, defaults to `infinity` when omitted |
| `effort` | Required, parsing fails if omitted | Optional, defaults to `infinity` when omitted |
| `velocity` | Required, parsing fails if omitted | Optional, defaults to `infinity` when omitted |
| `acceleration` | Ignored with warning if provided | Optional, defaults to `infinity` when omitted |
| `deceleration` | Ignored with warning if provided | Optional, defaults to `acceleration` if set, otherwise infinity |
| `jerk` | Ignored with warning if provided | Optional, defaults to `infinity` when omitted |

For all supported versions, invalid numeric values still fail parsing. In version 1.2, negative values for `effort`, `velocity`, `acceleration`, `deceleration`, and `jerk` are rejected.
In version 1.2, `revolute` and `prismatic` joints additionally require both `lower` and `upper`, and `upper` cannot be smaller than `lower`.

#### Compatibility and Parsing Behavior

| Scenario | Behavior |
Expand Down
2 changes: 1 addition & 1 deletion package.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<package format="2">
<name>urdfdom</name>
<version>5.1.0</version>
<version>6.0.0</version>
<description>A library to access URDFs using the DOM model.</description>

<maintainer email="clalancette@openrobotics.org">Chris Lalancette</maintainer>
Expand Down
5 changes: 4 additions & 1 deletion urdf_parser/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ macro(add_urdfdom_library)
endif()
set_target_properties(${add_urdfdom_library_LIBNAME} PROPERTIES
DEFINE_SYMBOL URDFDOM_EXPORTS
SOVERSION ${URDF_MAJOR_MINOR_VERSION})
SOVERSION ${URDF_MAJOR_VERSION}
VERSION ${URDF_VERSION})
endmacro()

if(TARGET console_bridge::console_bridge)
Expand All @@ -45,6 +46,7 @@ add_urdfdom_library(
src/model.cpp
src/link.cpp
src/joint.cpp
src/constraint.cpp
src/world.cpp)

add_urdfdom_library(
Expand All @@ -54,6 +56,7 @@ add_urdfdom_library(
src/pose.cpp
src/model.cpp
src/link.cpp
src/constraint.cpp
src/joint.cpp)

add_urdfdom_library(
Expand Down
3 changes: 2 additions & 1 deletion urdf_parser/include/urdf_parser/urdf_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,11 @@
#include <vector>

#include <urdf_model/model.h>
#include <urdf_model/constraint.h>
#include <urdf_model/color.h>
#include <urdf_model/utils.h>
#include <urdf_sensor/sensor.h>
#include <urdf_world/types.h>
#include <urdf_model/types.h>

#include "exportdecl.h"

Expand Down
Loading