From d6ec25978666516badb13684e191369900a58c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Caron?= Date: Fri, 20 Jun 2025 11:36:10 +0200 Subject: [PATCH 1/5] Add BamBot URDF description --- CHANGELOG.md | 6 ++++-- README.md | 25 ++++++++++++------------ robot_descriptions/_descriptions.py | 3 +++ robot_descriptions/_repositories.py | 5 +++++ robot_descriptions/bambot_description.py | 21 ++++++++++++++++++++ 5 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 robot_descriptions/bambot_description.py diff --git a/CHANGELOG.md b/CHANGELOG.md index a24575a..7bf16fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,10 @@ All notable changes to this project will be documented in this file. ### Added -- Description: SO ARM 101 (URDF/MJCF) (thanks to @haixuantao) -- Add `pull` in the CLI to pull `robot_description` and cache it. (thanks to @haixuantao) +- CLI: Add `pull` command to `robot_description` and cache it (thanks to @haixuantao) +- Description: BamBot (URDF) +- Description: SO ARM 101 (MJCF) (thanks to @haixuantao) +- Description: SO ARM 101 (URDF) (thanks to @haixuantao) ## [1.18.0] - 2025-06-19 diff --git a/README.md b/README.md index c78e017..fcf4f38 100644 --- a/README.md +++ b/README.md @@ -255,18 +255,19 @@ The DOF column denotes the number of actuated degrees of freedom. ### Mobile manipulators -| Name | Robot | Maker | DOF | Format | -|-------------------------------|-----------------------|--------------------------|-----|------------| -| `eve_r3_description` | Eve R3 | Halodi | 23 | URDF | -| `fetch_description` | Fetch | Fetch Robotics | 14 | URDF | -| `ginger_description` | Ginger | Paaila Technology | 49 | URDF | -| `pepper_description` | Pepper | SoftBank Robotics | 17 | URDF | -| `pr2_description` | PR2 | Willow Garage | 32 | URDF | -| `reachy_description` | Reachy | Pollen Robotics | 21 | URDF | -| `stretch_description` | Stretch RE1 | Hello Robot | 14 | URDF | -| `sretch_mj_description` | Stretch 2 | Hello Robot | 14 | MJCF | -| `sretch_3_mj_description` | Stretch 3 | Hello Robot | 14 | MJCF | -| `tiago_description` | TIAGo | PAL Robotics | 48 | URDF | +| Name | Robot | Maker | Format | License | +|-------------------------------|-----------------------|--------------------------|------------|---------| +| `bambot_description` | BamBot | Tim Qian | URDF | [Apache-2.0](https://github.com/timqian/bambot/blob/04d902653794f9f72eeabb09ec90a9af8e397c5b/LICENSE) | +| `eve_r3_description` | Eve R3 | Halodi | URDF | Apache-2.0 | +| `fetch_description` | Fetch | Fetch Robotics | URDF | MIT | +| `ginger_description` | Ginger | Paaila Technology | URDF | BSD | +| `pepper_description` | Pepper | SoftBank Robotics | URDF | BSD-2-Clause | +| `pr2_description` | PR2 | Willow Garage | URDF | BSD | +| `reachy_description` | Reachy | Pollen Robotics | URDF | Apache-2.0 | +| `stretch_description` | Stretch RE1 | Hello Robot | URDF | CC-BY-SA-4.0 ✖️ | +| `sretch_mj_description` | Stretch 2 | Hello Robot | MJCF | Clear BSD | +| `sretch_3_mj_description` | Stretch 3 | Hello Robot | MJCF | Apache-2.0 | +| `tiago_description` | TIAGo | PAL Robotics | URDF | Apache-2.0 | ### Quadrupeds diff --git a/robot_descriptions/_descriptions.py b/robot_descriptions/_descriptions.py index 2d8c5b9..cbbc031 100644 --- a/robot_descriptions/_descriptions.py +++ b/robot_descriptions/_descriptions.py @@ -80,6 +80,9 @@ def has_urdf(self) -> bool: "atlas_v4_description": Description(Format.URDF, tags={"humanoid"}), "b1_description": Description(Format.URDF, tags={"quadruped"}), "b2_description": Description(Format.URDF, tags={"quadruped"}), + "bambot_description": Description( + Format.URDF, tags={"mobile_manipulator"} + ), "barrett_hand_description": Description( Format.URDF, tags={"end_effector"} ), diff --git a/robot_descriptions/_repositories.py b/robot_descriptions/_repositories.py index 10f0f44..c6b2b06 100644 --- a/robot_descriptions/_repositories.py +++ b/robot_descriptions/_repositories.py @@ -46,6 +46,11 @@ class Repository: commit="6adc14720aab583613975e5a9d6d4fa3cfcdd081", cache_path="anymal_d_simple_description", ), + "bambot": Repository( + url="https://github.com/timqian/bambot.git", + commit="04d902653794f9f72eeabb09ec90a9af8e397c5b", + cache_path="bambot", + ), "baxter_common": Repository( url="https://github.com/RethinkRobotics/baxter_common.git", commit="6c4b0f375fe4e356a3b12df26ef7c0d5e58df86e", # v1.2.0 diff --git a/robot_descriptions/bambot_description.py b/robot_descriptions/bambot_description.py new file mode 100644 index 0000000..2fb7182 --- /dev/null +++ b/robot_descriptions/bambot_description.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2025 Inria + +"""BamBot description.""" + +from os import getenv as _getenv +from os import path as _path + +from ._cache import clone_to_cache as _clone_to_cache + +REPOSITORY_PATH: str = _clone_to_cache( + "bambot", + commit=_getenv("ROBOT_DESCRIPTION_COMMIT", None), +) + +PACKAGE_PATH: str = _path.join(REPOSITORY_PATH, "website", "public", "URDF") + +URDF_PATH: str = _path.join(PACKAGE_PATH, "bambot_v0.urdf") From 5f414ea6b5512379c49b06ce7c2d33a0d175b42c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Caron?= Date: Mon, 23 Jun 2025 13:31:28 +0200 Subject: [PATCH 2/5] Add missing SO arm 101 entries to _descriptions.py --- robot_descriptions/_descriptions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/robot_descriptions/_descriptions.py b/robot_descriptions/_descriptions.py index cbbc031..372dac8 100644 --- a/robot_descriptions/_descriptions.py +++ b/robot_descriptions/_descriptions.py @@ -194,6 +194,8 @@ def has_urdf(self) -> bool: "skydio_x2_mj_description": Description(Format.MJCF, tags={"drone"}), "so_arm100": Description(Format.URDF, tags={"arm"}), "so_arm100_mj_description": Description(Format.MJCF, tags={"arm"}), + "so_arm101": Description(Format.URDF, tags={"arm"}), + "so_arm101_mj_description": Description(Format.MJCF, tags={"arm"}), "solo_description": Description(Format.URDF, tags={"quadruped"}), "spot_mj_description": Description(Format.MJCF, tags={"quadruped"}), "spryped_description": Description(Format.URDF, tags={"biped"}), From 40650a73506c91ef26111bd80c53130095dd9da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Caron?= Date: Mon, 23 Jun 2025 13:49:07 +0200 Subject: [PATCH 3/5] Fix so_arm101_description entry in _descriptions.py --- robot_descriptions/_descriptions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_descriptions/_descriptions.py b/robot_descriptions/_descriptions.py index 372dac8..b1cbaf3 100644 --- a/robot_descriptions/_descriptions.py +++ b/robot_descriptions/_descriptions.py @@ -194,7 +194,7 @@ def has_urdf(self) -> bool: "skydio_x2_mj_description": Description(Format.MJCF, tags={"drone"}), "so_arm100": Description(Format.URDF, tags={"arm"}), "so_arm100_mj_description": Description(Format.MJCF, tags={"arm"}), - "so_arm101": Description(Format.URDF, tags={"arm"}), + "so_arm101_description": Description(Format.URDF, tags={"arm"}), "so_arm101_mj_description": Description(Format.MJCF, tags={"arm"}), "solo_description": Description(Format.URDF, tags={"quadruped"}), "spot_mj_description": Description(Format.MJCF, tags={"quadruped"}), From 0610b5e9a37593dfa2faf81df7a41e599d1326c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Caron?= Date: Mon, 23 Jun 2025 13:50:16 +0200 Subject: [PATCH 4/5] Rename so_arm100 to so_arm100_description for consistency Consistency with other URDF descriptions. --- README.md | 2 +- robot_descriptions/_descriptions.py | 2 +- robot_descriptions/{so_arm100.py => so_arm100_description.py} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename robot_descriptions/{so_arm100.py => so_arm100_description.py} (100%) diff --git a/README.md b/README.md index fcf4f38..ddc15c9 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ The DOF column denotes the number of actuated degrees of freedom. | `piper_mj_description` | PiPER | AgileX | MJCF | MIT | | `poppy_ergo_jr_description` | Poppy Ergo Jr | Poppy Project | URDF | GPL-3.0 | | `sawyer_mj_description` | Sawyer | Rethink Robotics | MJCF | Apache-2.0 | -| `so_arm100` | SO-ARM100 | The Robot Studio | URDF | Apache-2.0 | +| `so_arm100_description` | SO-ARM100 | The Robot Studio | URDF | Apache-2.0 | | `so_arm100_mj_description` | SO-ARM100 | The Robot Studio | MJCF | Apache-2.0 | | `so_arm101_description` | SO-ARM101 | The Robot Studio | URDF | Apache-2.0 | | `so_arm101_mj_description` | SO-ARM101 | The Robot Studio | MJCF | Apache-2.0 | diff --git a/robot_descriptions/_descriptions.py b/robot_descriptions/_descriptions.py index b1cbaf3..3f40674 100644 --- a/robot_descriptions/_descriptions.py +++ b/robot_descriptions/_descriptions.py @@ -192,7 +192,7 @@ def has_urdf(self) -> bool: ), "skydio_x2_description": Description(Format.URDF, tags={"drone"}), "skydio_x2_mj_description": Description(Format.MJCF, tags={"drone"}), - "so_arm100": Description(Format.URDF, tags={"arm"}), + "so_arm100_description": Description(Format.URDF, tags={"arm"}), "so_arm100_mj_description": Description(Format.MJCF, tags={"arm"}), "so_arm101_description": Description(Format.URDF, tags={"arm"}), "so_arm101_mj_description": Description(Format.MJCF, tags={"arm"}), diff --git a/robot_descriptions/so_arm100.py b/robot_descriptions/so_arm100_description.py similarity index 100% rename from robot_descriptions/so_arm100.py rename to robot_descriptions/so_arm100_description.py From ebde63df35c8e238f5fe5580e424c30b0884fc8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Caron?= Date: Mon, 23 Jun 2025 13:53:04 +0200 Subject: [PATCH 5/5] Rename `leap_hand_v1` to `leap_hand_v1_description` --- CHANGELOG.md | 5 +++++ README.md | 2 +- robot_descriptions/_descriptions.py | 4 +++- .../{leap_hand_v1.py => leap_hand_v1_description.py} | 0 4 files changed, 9 insertions(+), 2 deletions(-) rename robot_descriptions/{leap_hand_v1.py => leap_hand_v1_description.py} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bf16fd..12c4bc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ All notable changes to this project will be documented in this file. - Description: SO ARM 101 (MJCF) (thanks to @haixuantao) - Description: SO ARM 101 (URDF) (thanks to @haixuantao) +### Changed + +- Rename `leap_hand_v1` to `leap_hand_v1_description` +- Rename `so_arm100` to `so_arm100_description` + ## [1.18.0] - 2025-06-19 ### Added diff --git a/README.md b/README.md index ddc15c9..65e9155 100644 --- a/README.md +++ b/README.md @@ -214,7 +214,7 @@ The DOF column denotes the number of actuated degrees of freedom. | `allegro_hand_description` | Allegro Hand | Wonik Robotics | URDF | [BSD](https://github.com/RobotLocomotion/models/blob/5c027ea961473cb558da30e1a749272a8a9fa3eb/allegro_hand_description/LICENSE.TXT) | | `allegro_hand_mj_description` | Allegro Hand | Wonik Robotics | MJCF | [BSD-2-Clause](https://github.com/google-deepmind/mujoco_menagerie/blob/main/wonik_allegro/LICENSE) | | `barrett_hand_description` | BarrettHand | Barrett Technology | URDF | [BSD](https://github.com/jhu-lcsr-attic/bhand_model/blob/937f4186d6458bd682a7dae825fb6f4efe56ec69/manifest.xml) | -| `leap_hand_v1` | LEAP Hand v1 | Carnegie Mellon University | URDF | MIT | +| `leap_hand_v1_description` | LEAP Hand v1 | Carnegie Mellon University | URDF | MIT | | `leap_hand_mj_description` | LEAP Hand | Carnegie Mellon University | MJCF | MIT | | `robotiq_2f85_description` | Robotiq 2F-85 | Robotiq | URDF | BSD-2-Clause | | `robotiq_2f85_mj_description` | Robotiq 2F-85 | Robotiq | MJCF | BSD-2-Clause | diff --git a/robot_descriptions/_descriptions.py b/robot_descriptions/_descriptions.py index 3f40674..5f26196 100644 --- a/robot_descriptions/_descriptions.py +++ b/robot_descriptions/_descriptions.py @@ -137,7 +137,9 @@ def has_urdf(self) -> bool: "jvrc_description": Description(Format.URDF, tags={"humanoid"}), "jvrc_mj_description": Description(Format.MJCF, tags={"humanoid"}), "laikago_description": Description(Format.URDF, tags={"quadruped"}), - "leap_hand_v1": Description(Format.URDF, tags={"end_effector"}), + "leap_hand_v1_description": Description( + Format.URDF, tags={"end_effector"} + ), "leap_hand_mj_description": Description( Format.MJCF, tags={"end_effector"} ), diff --git a/robot_descriptions/leap_hand_v1.py b/robot_descriptions/leap_hand_v1_description.py similarity index 100% rename from robot_descriptions/leap_hand_v1.py rename to robot_descriptions/leap_hand_v1_description.py