Skip to content
Merged
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
4 changes: 2 additions & 2 deletions .github/workflows/models.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,14 @@ jobs:
libgl1-mesa-dri python3-pyqt5 python3-pil \
ros-${ROS_DISTRO}-launch-ros ros-${ROS_DISTRO}-rviz2 \
ros-${ROS_DISTRO}-joint-state-publisher-gui
- name: Build four packages and relocate the install
- name: Build the description and MoveIt packages and relocate the install
shell: bash
run: |
source /opt/ros/${ROS_DISTRO}/setup.bash
task_ws=${RUNNER_TEMP}/description_ros2_ws
mkdir -p "${task_ws}/src"
colcon list --names-only --base-paths "${GITHUB_WORKSPACE}" > "${task_ws}/packages.txt"
python3 -c 'import pathlib,sys; assert set(pathlib.Path(sys.argv[1]).read_text().split()) == {"par6_description","parol6_description","msg_description","ssg48_description","par6_moveit_config","parol6_moveit_config"}' "${task_ws}/packages.txt"
python3 -c 'import pathlib,sys; assert set(pathlib.Path(sys.argv[1]).read_text().split()) == {"par6_description","parol6_description","msg_description","ssg48_description","raft_description","par6_moveit_config","parol6_moveit_config"}' "${task_ws}/packages.txt"
cp -a urdf/. "${task_ws}/src/"
cd "${task_ws}"
colcon build --merge-install --event-handlers console_cohesion+
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog - Source Robotics robot descriptions

## 2.19.0 - 2026-11-06

- Added RAFT, the teleoperation leader arm for PAR6: `mujoco/raft` and `urdf/raft_description`, with PAR6's joint names,
torque actuators, the trigger, the optional J2 counterbalance tendon, `home`/`parked` keyframes, ROS 2 display support
and two downloadable ZIPs. Joint ranges come from the measured mechanical stops and a CAD sweep.
- Built from RAFT's model reference (`source/raft/`, imported from the RAFT repository by `tools/import_raft_reference.py`),
the same source as RAFT's firmware model; both formats are checked against its kinematics and gravity torques.
- RAFT's printed parts, servos, horns and screws are separate visual pieces coloured by the shared palette: new keys
`raft_structure`, `raft_trigger`, `raft_horns`, `raft_fasteners`; the servos follow `motors` or the `raft_motors` override.
- Linux ROS 2 checks and the release now include `raft_description` and the two RAFT ZIPs.

## 2.18.1 - 2026-11-03

- Organized reports by appearance, dynamics, grippers, kinematics, package checks and historical milestones; moved generated JSON out of the tools folder.
Expand Down
6 changes: 3 additions & 3 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
cff-version: 1.2.0
message: "If you use Source Robotics robot descriptions in your work, please cite it as below."
title: "Source Robotics robot descriptions: URDF and MuJoCo models of PAR6, PAROL6, MSG and SSG-48"
title: "Source Robotics robot descriptions: URDF and MuJoCo models of PAR6, PAROL6, RAFT, MSG and SSG-48"
type: software
authors:
- name: Source Robotics
website: https://source-robotics.com
- given-names: Petar
family-names: Crnjak
abstract: "URDF and MuJoCo models, meshes and generation tools for the Source Robotics arms and grippers, each robot with its end-effector configurations, ready for simulation."
version: v2.18.1
date-released: 2026-11-03
version: v2.19.0
date-released: 2026-11-06
repository-code: https://github.com/Source-Robotics/robot_descriptions
url: https://github.com/Source-Robotics/robot_descriptions
license:
Expand Down
15 changes: 9 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,17 @@ collision geometry, joints and mass properties, ready to open without a CAD buil

## Meet the models

| **[PAR6](guides/par6.md)** | **[PAROL6](guides/parol6.md)** |
| :---: | :---: |
| ![PAR6 with MSG Soft TPU jaws, isometric view](docs/images/robots/par6_msg_soft_tpu_isometric.png) | ![PAROL6 with pneumatic gripper, isometric view](docs/images/robots/parol6_pneumatic_isometric.png) |
| Six end-effector configurations | Six end-effector configurations |
| **[PAR6](guides/par6.md)** | **[PAROL6](guides/parol6.md)** | **[RAFT leader arm](guides/raft.md)** |
| :---: | :---: | :---: |
| ![PAR6 with MSG Soft TPU jaws, isometric view](docs/images/robots/par6_msg_soft_tpu_isometric.png) | ![PAROL6 with pneumatic gripper, isometric view](docs/images/robots/parol6_pneumatic_isometric.png) | ![RAFT teleoperation leader arm, isometric view](docs/images/robots/raft_isometric.png) |
| Six end-effector configurations | Six end-effector configurations | Teleoperation leader for PAR6, with a trigger |

| **[MSG gripper](guides/msg.md)** | **[SSG48 gripper](guides/ssg48.md)** |
| :---: | :---: |
| ![Standalone MSG with Soft TPU jaws](source/grippers/previews/msg_soft_tpu.png) | ![Standalone SSG48 with Fin-ray jaws](source/grippers/previews/ssg48_fin_ray.png) |
| Solid jaws · Soft TPU jaws | Solid jaws · Fin-ray jaws |

Both arms support **Flange only**, **MSG / Solid jaws**, **MSG / Soft TPU jaws**,
PAR6 and PAROL6 support **Flange only**, **MSG / Solid jaws**, **MSG / Soft TPU jaws**,
**SSG48 / Solid jaws**, **SSG48 / Fin-ray jaws** and **Pneumatic gripper**.
Standalone gripper downloads include both of that gripper's jaw options.
MSG and SSG48 default to Solid jaws.
Expand All @@ -36,6 +38,7 @@ needed.** The product guides list every scene and URDF filename.
| **[PAROL6](guides/parol6.md)** | [parol6_mujoco.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/parol6_mujoco.zip) | [parol6_urdf.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/parol6_urdf.zip) |
| **[MSG — gripper only](guides/msg.md)** | [msg_mujoco.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/msg_mujoco.zip) | [msg_urdf.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/msg_urdf.zip) |
| **[SSG48 — gripper only](guides/ssg48.md)** | [ssg48_mujoco.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/ssg48_mujoco.zip) | [ssg48_urdf.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/ssg48_urdf.zip) |
| **[RAFT — leader arm](guides/raft.md)** | [raft_mujoco.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/raft_mujoco.zip) | [raft_urdf.zip](https://github.com/Source-Robotics/robot_descriptions/releases/latest/download/raft_urdf.zip) |

The [latest release](https://github.com/Source-Robotics/robot_descriptions/releases/latest)
also includes the dimensioned review PDF, checksums and optional MoveIt packages.
Expand Down Expand Up @@ -69,7 +72,7 @@ The [PAR6](guides/par6.md), [PAROL6](guides/parol6.md), [MSG](guides/msg.md) and
<details>
<summary><strong>Using ROS 2, RViz or MoveIt?</strong></summary>

All four URDF packages install with colcon and provide RViz views and joint
All five URDF packages install with colcon and provide RViz views and joint
sliders. Follow the [ROS 2 setup guide](docs/ROS2.md) for Humble or Jazzy, then run:

```bash
Expand Down
16 changes: 8 additions & 8 deletions REPOSITORY_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
```text
robot_descriptions/
guides/ Product-specific getting-started pages
mujoco/ Four portable MuJoCo model packages
urdf/ Four portable URDF/ROS description packages
mujoco/ Five portable MuJoCo model packages
urdf/ Five portable URDF/ROS description packages
moveit/ Two optional MoveIt configuration packages
docs/ Usage guides, images, PDF, maintenance notes and releases
source/ Editable inputs, original exports and checked caches
Expand Down Expand Up @@ -56,17 +56,17 @@ See [the move list](docs/maintenance/FOLDER_CHANGES.md) for older paths.

| Format | Packages |
| --- | --- |
| MuJoCo | `mujoco/par6`, `mujoco/parol6`, `mujoco/msg`, `mujoco/ssg48` |
| URDF | `urdf/par6_description`, `urdf/parol6_description`, `urdf/msg_description`, `urdf/ssg48_description` |
| MuJoCo | `mujoco/par6`, `mujoco/parol6`, `mujoco/msg`, `mujoco/ssg48`, `mujoco/raft` |
| URDF | `urdf/par6_description`, `urdf/parol6_description`, `urdf/msg_description`, `urdf/ssg48_description`, `urdf/raft_description` |
| MoveIt | `moveit/par6_moveit_config`, `moveit/parol6_moveit_config`; each uses its matching URDF package. |

The arm packages include all six tool configurations. Standalone gripper
packages contain both jaw options. Runtime meshes are repeated where necessary
so each model package can be downloaded or moved independently.

Hardware repositories contain ordinary product-guide folders named
`par6_description`, `parol6_description`, `msg_description` and
`ssg48_description`. Those are guide pages and previews. The actual model
`par6_description`, `parol6_description`, `msg_description`,
`ssg48_description` and `raft_description`. Those are guide pages and previews. The actual model
packages with those names live under this repository's `urdf/` folder.

## Inside a MuJoCo package
Expand Down Expand Up @@ -106,11 +106,11 @@ SSG48.

Detailed notes are grouped in `docs/`, which has its own clickable index.
Only the README, license, package metadata and model/scene entry files stay at
the root. This layout is shared by all eight runtime packages.
the root. This layout is shared by all ten runtime packages.

## Inside a URDF package

The four folders are `urdf/par6_description/`, `urdf/parol6_description/`,
The five folders are `urdf/par6_description/`, `urdf/parol6_description/`,
`urdf/msg_description/` and `urdf/ssg48_description/`.

| File or folder | Purpose |
Expand Down
15 changes: 10 additions & 5 deletions docs/COLORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
[Back to the repository](../README.md)

**Edit one file: [`source/appearance/colors.json`](../source/appearance/colors.json).**
The build applies it to PAR6, PAROL6, standalone MSG and standalone SSG48, in
both URDF and MuJoCo, including every tool/jaw option and the grasp fixtures.
The build applies it to PAR6, PAROL6, standalone MSG, standalone SSG48 and RAFT,
in both URDF and MuJoCo, including every tool/jaw option and the grasp fixtures.
The starting palette keeps the existing appearance.

## Quick example
Expand Down Expand Up @@ -38,7 +38,7 @@ python tools/build.py --models-only --render

This uses the existing CAD meshes, applies the palette, rebakes the badge,
refreshes the dimensioned review snapshots, validates the models and exports
all eight packages to `dist/`. `--render` needs working OpenGL. Normal builds
all ten packages to `dist/`. `--render` needs working OpenGL. Normal builds
reuse the checked snapshots without OpenGL; refresh them after changing colors.
If you also changed CAD/geometry, omit `--models-only`.

Expand All @@ -57,7 +57,7 @@ arrays; replacing one with a HEX color is fine.
| Key inside `colors` | Parts controlled |
| --- | --- |
| `structure` | Both robot housings, MSG/SSG48 bodies, flange and the PAR6 badge's surrounding cover |
| `motors` | J1/J2/J3 motor + gearbox and the MSG motor |
| `motors` | J1/J2/J3 motor + gearbox, the MSG motor and RAFT's seven servos |
| `camera_lens` | MSG lens |
| `msg_solid_jaws` | MSG Solid jaws, including the moving carriage geometry |
| `msg_soft_holders` | MSG Soft TPU black holders and carriages |
Expand All @@ -66,6 +66,10 @@ arrays; replacing one with a HEX color is fine.
| `ssg48_fin_ray_jaws` | SSG48 Fin-ray jaws and carriage geometry |
| `pneumatic_body` | Pneumatic gripper housing |
| `pneumatic_jaws` | Both pneumatic fingers |
| `raft_structure` | RAFT's printed parts, except the trigger |
| `raft_trigger` | RAFT's printed trigger |
| `raft_horns` | RAFT's seven aluminium servo horns |
| `raft_fasteners` | RAFT's servo screws and its M3 stop and lid screws |

A color applies to an existing visual partition. For example, a jaw and its
carriage cannot get separate colors if they share one visual mesh.
Expand Down Expand Up @@ -100,7 +104,8 @@ blue:
```

Supported keys are `j1_motor`, `j2_motor`, `j3_motor`, `msg_motor`, `msg_body`,
`ssg48_body`, `flange`, `par6_structure`, `parol6_structure` and `par6_panel`.
`ssg48_body`, `flange`, `par6_structure`, `parol6_structure`, `par6_panel` and
`raft_motors` (RAFT's servos, which otherwise follow `motors`).
Remove an override to return that part to its common color. Tool colors stay
the same whether the tool is standalone or mounted on either robot.

Expand Down
5 changes: 3 additions & 2 deletions docs/ROS2.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[Back to the model instructions](../README.md)

The four URDF packages provide native `ament_cmake` installation and a ROS 2
The five URDF packages provide native `ament_cmake` installation and a ROS 2
`display.launch.py` launcher. Choose a tool or jaw option, then view it in RViz
and move its joints with sliders. Linux CI checks ROS 2 **Humble / Ubuntu 22.04**
and **Jazzy / Ubuntu 24.04**, including installed assets, TF, mimic joints and
Expand Down Expand Up @@ -55,7 +55,7 @@ colcon build --base-paths src/robot_descriptions/urdf
source install/setup.bash
```

This builds all four packages. Run colcon against the `urdf/` packages; there
This builds all five packages. Run colcon against the `urdf/` packages; there
is no need to run `tools/build.py` to use the committed models. After opening a
new terminal, source both `/opt/ros/<distro>/setup.bash` and your workspace's
`install/setup.bash` again.
Expand Down Expand Up @@ -93,6 +93,7 @@ ros2 launch msg_description display.launch.py jaws:=solid
ros2 launch msg_description display.launch.py jaws:=soft_tpu
ros2 launch ssg48_description display.launch.py jaws:=solid
ros2 launch ssg48_description display.launch.py jaws:=fin_ray
ros2 launch raft_description display.launch.py
```

Each launcher opens RViz and a joint-slider window. The two fingers retain
Expand Down
Binary file added docs/images/raft.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/robots/raft_isometric.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 7 additions & 3 deletions docs/maintenance/BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,17 @@ extracting each ZIP, so the organized downloads remain portable.
10. Exports independent MSG/SSG48 packages with both jaw options, compares
their tool-relative FK, inertials, controls and contacts against the mounted
models, and runs finite close/open cycles.
11. Generates native ROS 2 support for all four URDF packages, then separate
11. Builds RAFT's two packages from `source/raft` (RAFT's model reference, CAD
meshes and visual pieces) and checks both formats against the kinematics and
gravity torques in that reference. Generates native ROS 2 support for all
five URDF packages, then separate
`par6_moveit_config` / `parol6_moveit_config` packages. MoveIt adds planning
limits, SRDF groups/TCP/collision rules and mock-control launch support;
it does not rewrite the saved physical models.
12. Writes and extracts all eight model ZIPs: `par6_mujoco.zip`, `par6_urdf.zip`,
12. Writes and extracts all ten model ZIPs: `par6_mujoco.zip`, `par6_urdf.zip`,
`parol6_mujoco.zip`, `parol6_urdf.zip`, `msg_mujoco.zip`, `msg_urdf.zip`,
`ssg48_mujoco.zip` and `ssg48_urdf.zip`. Each uses only its own assets.
`ssg48_mujoco.zip`, `ssg48_urdf.zip`, `raft_mujoco.zip` and `raft_urdf.zip`.
Each uses only its own assets.
Also writes `par6_moveit_config.zip` and `parol6_moveit_config.zip`, which
require the matching URDF package and contain no duplicate geometry.

Expand Down
9 changes: 5 additions & 4 deletions docs/maintenance/RELEASING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Publishing a description release

This repository is the source for eight model distributions and two MoveIt
This repository is the source for ten model distributions and two MoveIt
configuration distributions. Model changes and
generation tools belong here. Hardware repositories contain product guides,
previews and release links. Software consumers can pin this repository as a
Expand Down Expand Up @@ -34,7 +34,7 @@ git push origin v2.13.0
```

The GitHub Actions workflow tests and builds that tag, checks every ZIP's
version against it, and publishes eight model ZIPs, two MoveIt ZIPs, the review PDF, a source
version against it, and publishes ten model ZIPs, two MoveIt ZIPs, the review PDF, a source
manifest and SHA-256 checksums. Only the tag's release job has repository
write permission. Release publishing waits for the portable build, ROS display
tests and MoveIt planning/mock-execution tests on both Humble and Jazzy.
Expand All @@ -50,6 +50,7 @@ Hardware repositories contain guide folders, without model copies or submodules:
| PAROL6 | `parol6_description/` |
| MSG | `msg_description/` |
| SSG48 | `ssg48_description/` |
| RAFT | `raft_description/` |

Keep the canonical guide in `guides/` here. After publishing the model release,
export its guide and local previews to the corresponding hardware checkout:
Expand All @@ -58,7 +59,7 @@ export its guide and local previews to the corresponding hardware checkout:
python tools/export_hardware_guide.py --product par6 --revision CENTRAL_COMMIT --output /path/to/PAR6-Collaborative-Robot-Arm/par6_description
```

Use `parol6`, `msg` or `ssg48` for the other products. `--revision` selects the
Use `parol6`, `msg`, `ssg48` or `raft` for the other products. `--revision` selects the
central commit/tag for documentation and model-file links. The tool exports
only README and preview images; it does not copy model packages. Review and
commit those documentation files in the hardware repository. Model ZIP links
Expand All @@ -77,7 +78,7 @@ git commit -m "Pin tested robot description models"
```

The application can select `external/robot_descriptions/mujoco/par6`,
`mujoco/parol6`, `mujoco/msg` or `mujoco/ssg48`, or the corresponding
`mujoco/parol6`, `mujoco/msg`, `mujoco/ssg48` or `mujoco/raft`, or the corresponding
`urdf/PRODUCT_description` package. Every path is relative to that submodule's
root. Clone these software consumers with `git clone --recurse-submodules URL`,
or initialize an existing clone with `git submodule update --init --recursive`.
Expand Down
1 change: 1 addition & 0 deletions docs/releases/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

[Changelog](../../CHANGELOG.md) · [Publishing instructions](../maintenance/RELEASING.md)

- [v2.19.0](v2.19.0.md)
- [v2.18.1](v2.18.1.md)
- [v2.18.0](v2.18.0.md)
- [v2.17.0](v2.17.0.md)
Expand Down
23 changes: 23 additions & 0 deletions docs/releases/v2.19.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# RAFT, the teleoperation leader arm for PAR6

This release adds RAFT, Source Robotics' teleoperation leader arm: PAR6's kinematic structure at 5/9 scale, with a
trigger on its handle that drives the follower's gripper.

- **Two new packages:** `mujoco/raft` and `urdf/raft_description`, downloadable as `raft_mujoco.zip` and
`raft_urdf.zip`. They use PAR6's joint names, so RAFT's joint angles map one to one onto PAR6's. The MuJoCo model
has torque actuators (RAFT's servos run in current mode), the trigger, the optional J2 counterbalance tendon and
`home` / `parked` keyframes. The URDF package has native ROS 2 display support:
`ros2 launch raft_description display.launch.py`.
- **Built from RAFT's own model reference** (`source/raft/`), the same source as RAFT's firmware model. Both formats
are checked against its forward kinematics and gravity torques. One end of every joint range is a mechanical stop
measured on the first arm; the other comes from a sweep of the CAD.
- **Colours from the shared palette:** RAFT's printed parts, servos, horns and screws are separate visual pieces.
New keys `raft_structure`, `raft_trigger`, `raft_horns` and `raft_fasteners`; RAFT's servos follow `motors` or the
new `raft_motors` override.
- **Guides and checks:** a RAFT product guide and a RAFT column in "Meet the models"; the Linux ROS 2 checks, the
packaging and the release include `raft_description`.

PAR6, PAROL6, MSG and SSG48 are unchanged: geometry, colors, kinematics, inertia, collision shapes, joint limits and
actuation settings stay as in v2.18.1.

Models/data/docs remain CC BY 4.0; support code remains Apache-2.0.
1 change: 1 addition & 0 deletions guides/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
| PAROL6 | [Get started](parol6.md) | Flange, both MSG jaws, both SSG48 jaws, pneumatic. |
| MSG | [Get started](msg.md) | Standalone or mounted; Solid and Soft TPU jaws. |
| SSG48 | [Get started](ssg48.md) | Standalone or mounted; Solid and Fin-ray jaws. |
| RAFT | [Get started](raft.md) | The teleoperation leader arm for PAR6, with its trigger. |

Download one complete model package for your simulator. You do not need the
authoring inputs or build tools to use it.
Expand Down
Loading