Skip to content

Commit 5bd2970

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 3109088 + e266d97 commit 5bd2970

23 files changed

+404
-42
lines changed

.github/ISSUE_TEMPLATE/feature_request.md

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@
22
name: 💡 Feature request
33
about: Suggest an idea to improve Upkie
44
title: ''
5-
labels: ''
5+
labels: 'enhancement'
66
assignees: ''
77

88
---
99

10-
⚠️ **Please open a discussion in the [Ideas](https://github.com/robot-descriptions/robot_descriptions.py/discussions/categories/ideas) forum rather than an issue.**
10+
# Current limitation
1111

12-
Make sure your proposal checks out the following questions:
12+
Please describe the problem that the proposed feature would address. For instance: "I'm always frustrated when..."
1313

14-
- [ ] Is your feature request related to a problem? Please describe, *e.g.* "I'm always frustrated when..."
15-
- [ ] Describe (concisely) the solution you'd like.
16-
- [ ] Describe alternatives you've considered.
17-
- [ ] Do you have screenshots or sketches to illustrate your proposal?
14+
# Proposed solution
15+
16+
Describe (as concisely as possible) the solution you'd like.
17+
18+
Do you have screenshots or sketches to illustrate it?
19+
20+
# Additional context
21+
22+
Describe any additional context, alternatives you can think of, ...

CHANGELOG.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,42 @@ All notable changes to this project will be documented in this file.
44

55
## [Unreleased]
66

7+
## [1.19.0] - 2025-07-03
8+
9+
### Added
10+
11+
- CLI: Add `pull` command to `robot_description` and cache it (thanks to @haixuantao)
12+
- Description: BamBot (URDF)
13+
- Description: Booster T1 (MJCF)
14+
- Description: Booster T1 (URDF)
15+
- Description: Fourier GR-1 (URDF)
16+
- Description: SO ARM 101 (MJCF) (thanks to @haixuantao)
17+
- Description: SO ARM 101 (URDF) (thanks to @haixuantao)
18+
- Description: WL P311D (URDF)
19+
- Description: WL P311E (URDF)
20+
21+
### Changed
22+
23+
- Rename `leap_hand_v1` to `leap_hand_v1_description`
24+
- Rename `so_arm100` to `so_arm100_description`
25+
26+
## [1.18.0] - 2025-06-19
27+
728
### Added
829

930
- Description: Dynamixel 2R (MJCF)
31+
- Description: Fourier N1 (MJCF)
32+
- Description: Fourier N1 (URDF)
33+
- Description: RSK omnidirectional robot (MJCF)
1034
- Description: YAM (MJCF) (thanks to @kevinzakka)
1135
- Description YAM (URDF)
1236
- Description RBY1 Mobile Manipulatior (URDF)
1337

38+
### Changed
39+
40+
- Update `piper_mj_description` to load `piper.xml` instead of `scene.xml` (thanks to @jonzamora)
41+
- Allow passing `kwargs` to `yourdfpy.load_robot_description` (thanks to @sea-bass)
42+
1443
## [1.17.0] - 2025-05-08
1544

1645
### Added
@@ -468,7 +497,9 @@ This initial release includes 33 robot descriptions:
468497
- Contributing instructions
469498
- This changelog
470499

471-
[unreleased]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.17.0...HEAD
500+
[unreleased]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.19.0...HEAD
501+
[1.19.0]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.18.0...v1.19.0
502+
[1.18.0]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.17.0...v1.18.0
472503
[1.17.0]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.16.0...v1.17.0
473504
[1.16.0]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.15.0...v1.16.0
474505
[1.15.0]: https://github.com/robot-descriptions/robot_descriptions.py/compare/v1.14.0...v1.15.0

CITATION.cff

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cff-version: 1.2.0
22
message: "If you find this code helpful, please cite it as below."
33
title: "robot_descriptions.py: Robot descriptions in Python"
4-
version: 1.17.0
4+
version: 1.19.0
55
date-released: 2025-05-08
66
url: "https://github.com/robot-descriptions/robot_descriptions.py"
77
license: "Apache-2.0"
@@ -32,3 +32,8 @@ authors:
3232
- family-names: "Traversaro"
3333
given-names: "Silvio"
3434
orcid: "https://orcid.org/0000-0002-9283-6133"
35+
- family-names: "Castro"
36+
given-names: "Sebastian"
37+
orcid: "https://orcid.org/0000-0001-5754-9959"
38+
- family-names: "Tao"
39+
given-names: "Haixuan Xavier"

README.md

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,12 @@ Importing a description for the first time automatically downloads and caches fi
1515

1616
### From conda-forge
1717

18-
[![Conda Version](https://img.shields.io/conda/vn/conda-forge/robot_descriptions.svg)](https://anaconda.org/conda-forge/robot_descriptions)
19-
2018
```console
2119
conda install -c conda-forge robot_descriptions
2220
```
2321

2422
### From PyPI
2523

26-
[![PyPI version](https://img.shields.io/pypi/v/robot_descriptions)](https://pypi.org/project/robot_descriptions/)
27-
2824
```console
2925
pip install robot_descriptions
3026
```
@@ -153,8 +149,10 @@ The DOF column denotes the number of actuated degrees of freedom.
153149
| `piper_mj_description` | PiPER | AgileX | MJCF | MIT |
154150
| `poppy_ergo_jr_description` | Poppy Ergo Jr | Poppy Project | URDF | GPL-3.0 |
155151
| `sawyer_mj_description` | Sawyer | Rethink Robotics | MJCF | Apache-2.0 |
156-
| `so_arm100` | SO-ARM100 | The Robot Studio | URDF | Apache-2.0 |
152+
| `so_arm100_description` | SO-ARM100 | The Robot Studio | URDF | Apache-2.0 |
157153
| `so_arm100_mj_description` | SO-ARM100 | The Robot Studio | MJCF | Apache-2.0 |
154+
| `so_arm101_description` | SO-ARM101 | The Robot Studio | URDF | Apache-2.0 |
155+
| `so_arm101_mj_description` | SO-ARM101 | The Robot Studio | MJCF | Apache-2.0 |
158156
| `ur10_description` | UR10 | Universal Robots | URDF | Apache-2.0 |
159157
| `ur10e_mj_description` | UR10e | Universal Robots | MJCF | BSD-3-Clause |
160158
| `ur3_description` | UR3 | Universal Robots | URDF | Apache-2.0 |
@@ -217,7 +215,7 @@ The DOF column denotes the number of actuated degrees of freedom.
217215
| `allegro_hand_description` | Allegro Hand | Wonik Robotics | URDF | [BSD](https://github.com/RobotLocomotion/models/blob/5c027ea961473cb558da30e1a749272a8a9fa3eb/allegro_hand_description/LICENSE.TXT) |
218216
| `allegro_hand_mj_description` | Allegro Hand | Wonik Robotics | MJCF | [BSD-2-Clause](https://github.com/google-deepmind/mujoco_menagerie/blob/main/wonik_allegro/LICENSE) |
219217
| `barrett_hand_description` | BarrettHand | Barrett Technology | URDF | [BSD](https://github.com/jhu-lcsr-attic/bhand_model/blob/937f4186d6458bd682a7dae825fb6f4efe56ec69/manifest.xml) |
220-
| `leap_hand_v1` | LEAP Hand v1 | Carnegie Mellon University | URDF | MIT |
218+
| `leap_hand_v1_description` | LEAP Hand v1 | Carnegie Mellon University | URDF | MIT |
221219
| `leap_hand_mj_description` | LEAP Hand | Carnegie Mellon University | MJCF | MIT |
222220
| `robotiq_2f85_description` | Robotiq 2F-85 | Robotiq | URDF | BSD-2-Clause |
223221
| `robotiq_2f85_mj_description` | Robotiq 2F-85 | Robotiq | MJCF | BSD-2-Clause |
@@ -234,18 +232,23 @@ The DOF column denotes the number of actuated degrees of freedom.
234232
| `atlas_drc_description` | Atlas DRC (v3) | Boston Dynamics | URDF | BSD-3-Clause |
235233
| `atlas_v4_description` | Atlas v4 | Boston Dynamics | URDF | MIT |
236234
| `berkeley_humanoid_description` | Berkeley Humanoid | Hybrid Robotics | URDF | BSD-3-Clause |
235+
| `booster_t1_description` | Booster T1 | Booster Robotics | URDF | [Apache-2.0](https://github.com/BoosterRobotics/booster_gym/blob/687a33d08b08875fe45dc8d91b54db83766df8b9/LICENSE) |
236+
| `booster_t1_mj_description` | Booster T1 | Booster Robotics | MJCF | [Apache-2.0](https://github.com/google-deepmind/mujoco_menagerie/blob/66384c6b8581c811a7b1eb63bcf4fa944fa43602/booster_t1/LICENSE) |
237237
| `draco3_description` | Draco3 | Apptronik | URDF | BSD-2-Clause |
238238
| `elf2_description` | Elf2 | BXI Robotics | URDF | [Apache-2.0](https://github.com/bxirobotics/robot_models/blob/eabe24ce937f8e633077a163b883e92e8996c36e/LICENSE) |
239239
| `elf2_mj_description` | Elf2 | BXI Robotics | MJCF | [Apache-2.0](https://github.com/bxirobotics/robot_models/blob/eabe24ce937f8e633077a163b883e92e8996c36e/LICENSE) |
240240
| `ergocub_description` | ergoCub | IIT | URDF | BSD-3-Clause |
241241
| `g1_description` | G1 | UNITREE Robotics | URDF | BSD-3-Clause |
242242
| `g1_mj_description` | G1 | UNITREE Robotics | MJCF | BSD-3-Clause |
243+
| `gr1_description` | GR-1 | Fourier | URDF | [GPL-3.0](https://github.com/FFTAI/Wiki-GRx-Models/blob/351245ac8fa4bf6f4b0c41556e1e6976a438bcef/LICENSE) |
243244
| `h1_description` | H1 | UNITREE Robotics | URDF | BSD-3-Clause |
244245
| `h1_mj_description` | H1 | UNITREE Robotics | MJCF | BSD-3-Clause |
245246
| `icub_description` | iCub | IIT | URDF | CC-BY-SA-4.0 ✖️ |
246247
| `jaxon_description` | JAXON | JSK | URDF | CC-BY-SA-4.0 ✖️ |
247248
| `jvrc_description` | JVRC-1 | AIST | URDF | BSD-2-Clause |
248249
| `jvrc_mj_description` | JVRC-1 | AIST | MJCF | BSD-2-Clause |
250+
| `n1_description` | N1 | Fourier | URDF | [Apache-2.0](https://github.com/FFTAI/Wiki-GRx-Models/blob/f8e683f00d1d99deb882deb9dfce6030095b466a/LICENSE) |
251+
| `n1_mj_description` | N1 | Fourier | MJCF | [Apache-2.0](https://github.com/google-deepmind/mujoco_menagerie/blob/f3475402a11acf5ba767a8bec03cc9bea9819d8d/fourier_n1/LICENSE) |
249252
| `op3_mj_description` | OP3 | ROBOTIS | MJCF | Apache-2.0 |
250253
| `r2_description` | Robonaut 2 | NASA JSC Robotics | URDF | NASA-1.3 |
251254
| `romeo_description` | Romeo | Aldebaran Robotics | URDF | BSD-3-Clause |
@@ -256,18 +259,19 @@ The DOF column denotes the number of actuated degrees of freedom.
256259

257260
### Mobile manipulators
258261

259-
| Name | Robot | Maker | DOF | Format |
260-
|-------------------------------|-----------------------|--------------------------|-----|------------|
261-
| `eve_r3_description` | Eve R3 | Halodi | 23 | URDF |
262-
| `fetch_description` | Fetch | Fetch Robotics | 14 | URDF |
263-
| `ginger_description` | Ginger | Paaila Technology | 49 | URDF |
264-
| `pepper_description` | Pepper | SoftBank Robotics | 17 | URDF |
265-
| `pr2_description` | PR2 | Willow Garage | 32 | URDF |
266-
| `reachy_description` | Reachy | Pollen Robotics | 21 | URDF |
267-
| `stretch_description` | Stretch RE1 | Hello Robot | 14 | URDF |
268-
| `sretch_mj_description` | Stretch 2 | Hello Robot | 14 | MJCF |
269-
| `sretch_3_mj_description` | Stretch 3 | Hello Robot | 14 | MJCF |
270-
| `tiago_description` | TIAGo | PAL Robotics | 48 | URDF |
262+
| Name | Robot | Maker | Format | License |
263+
|-------------------------------|-----------------------|--------------------------|------------|---------|
264+
| `bambot_description` | BamBot | Tim Qian | URDF | [Apache-2.0](https://github.com/timqian/bambot/blob/04d902653794f9f72eeabb09ec90a9af8e397c5b/LICENSE) |
265+
| `eve_r3_description` | Eve R3 | Halodi | URDF | Apache-2.0 |
266+
| `fetch_description` | Fetch | Fetch Robotics | URDF | MIT |
267+
| `ginger_description` | Ginger | Paaila Technology | URDF | BSD |
268+
| `pepper_description` | Pepper | SoftBank Robotics | URDF | BSD-2-Clause |
269+
| `pr2_description` | PR2 | Willow Garage | URDF | BSD |
270+
| `reachy_description` | Reachy | Pollen Robotics | URDF | Apache-2.0 |
271+
| `stretch_description` | Stretch RE1 | Hello Robot | URDF | CC-BY-SA-4.0 ✖️ |
272+
| `sretch_mj_description` | Stretch 2 | Hello Robot | MJCF | Clear BSD |
273+
| `sretch_3_mj_description` | Stretch 3 | Hello Robot | MJCF | Apache-2.0 |
274+
| `tiago_description` | TIAGo | PAL Robotics | URDF | Apache-2.0 |
271275
| `rby1_description` | RBY1 | Rainbow Robotics | 24 | URDF |
272276

273277

@@ -302,7 +306,10 @@ The DOF column denotes the number of actuated degrees of freedom.
302306
| Name | Robot | Maker | Format | License |
303307
|-------------------------------|-----------------------|--------------------------|------------|---------|
304308
| `rsk_description` | RSK Omnidirectional | Robot Soccer Kit | URDF | MIT |
309+
| `rsk_mj_description` | RSK Omnidirectional | Robot Soccer Kit | MJCF | MIT |
305310
| `upkie_description` | Upkie | Stéphane Caron | URDF | Apache-2.0 |
311+
| `wl_p311d_description` | WL P311D | LimX Dynamics | URDF | [Apache-2.0](https://github.com/limxdynamics/robot-description/blob/a097533372a08298d45af391cbdfc2fd2dc3da6f/LICENSE) |
312+
| `wl_p311e_description` | WL P311E | LimX Dynamics | URDF | [Apache-2.0](https://github.com/limxdynamics/robot-description/blob/a097533372a08298d45af391cbdfc2fd2dc3da6f/LICENSE) |
306313

307314
## Contributing
308315

@@ -319,10 +326,10 @@ If you use this project in your works, please cite as follows:
319326
```bibtex
320327
@software{robot_descriptions_py,
321328
title = {{robot_descriptions.py: Robot descriptions in Python}},
322-
author = {Caron, Stéphane and Romualdi, Giulio and Kozlov, Lev and Ordoñez Apraez, Daniel Felipe and Tadashi Kussaba, Hugo and Bang, Seung Hyeon and Zakka, Kevin and Schramm, Fabian and Uru\c{c}, Jafar and Traversaro, Silvio},
329+
author = {Caron, Stéphane and Romualdi, Giulio and Kozlov, Lev and Ordoñez Apraez, Daniel Felipe and Tadashi Kussaba, Hugo and Bang, Seung Hyeon and Zakka, Kevin and Schramm, Fabian and Uru\c{c}, Jafar and Traversaro, Silvio and Castro, Sebastian and Tao, Haixuan Xavier},
323330
license = {Apache-2.0},
324331
url = {https://github.com/robot-descriptions/robot_descriptions.py},
325-
version = {1.17.0},
332+
version = {1.19.0},
326333
year = {2025}
327334
}
328335
```

robot_descriptions/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88

99
from ._descriptions import DESCRIPTIONS
1010

11-
__version__ = "1.17.0"
11+
__version__ = "1.19.0"
1212

1313
__all__ = ["DESCRIPTIONS"]

robot_descriptions/__main__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,16 @@ def get_argument_parser() -> argparse.ArgumentParser:
4848
help="list all available robot descriptions",
4949
)
5050

51+
# pull ----------------------------------------------------------------
52+
parser_pull = subparsers.add_parser(
53+
"pull",
54+
help="load given robot description from the web and save it in cache",
55+
)
56+
parser_pull.add_argument(
57+
"name",
58+
help="name of the robot description",
59+
)
60+
5161
# show_in_meshcat --------------------------------------------------------
5262
parser_meshcat = subparsers.add_parser(
5363
"show_in_meshcat",
@@ -126,6 +136,22 @@ def list_descriptions():
126136
print(f"- {name} [{formats}]")
127137

128138

139+
def pull(name: str) -> None:
140+
"""Pull a robot description from the web and save it in cache.
141+
142+
Args:
143+
name: Name of the robot description.
144+
"""
145+
try:
146+
module = import_module(f"robot_descriptions.{name}")
147+
except ModuleNotFoundError:
148+
module = import_module(f"robot_descriptions.{name}_description")
149+
if hasattr(module, "URDF_PATH"):
150+
print(module.URDF_PATH)
151+
elif hasattr(module, "MJCF_PATH"):
152+
print(module.MJCF_PATH)
153+
154+
129155
def show_in_meshcat(name: str) -> None:
130156
"""Show a robot description in MeshCat.
131157
@@ -283,6 +309,8 @@ def main(argv=None):
283309
args = parser.parse_args(argv)
284310
if args.subcmd == "list":
285311
list_descriptions()
312+
elif args.subcmd == "pull":
313+
pull(args.name)
286314
elif args.subcmd == "show_in_meshcat":
287315
show_in_meshcat(args.name)
288316
elif args.subcmd == "show_in_mujoco":

0 commit comments

Comments
 (0)