LeRobot + ugo Nova
This package connects the ugo Nova humanoid to Hugging Face's LeRobot. Once installed, the robot type ugo_nova is available to the LeRobot CLI tools. It reads Nova's joint states and cameras and sends joint position commands over ROS 2.
Installation
pip install lerobot_robot_ugo_nova
Requires Python 3.12. This installs lerobot==0.6.1; add the LeRobot extras your policy needs.
On the robot, install into an environment that can see ROS 2 Jazzy's rclpy, e.g. a venv created with python3 -m venv --system-site-packages after source /opt/ros/jazzy/setup.bash.
Check Installed Version
python -c "from importlib.metadata import version; print(version('lerobot_robot_ugo_nova'))"
Quick Start
Setup Variables
export REPO_ID="username/my_dataset"
export TASK_NAME="Pick up the cup"
Inference
lerobot-rollout \
--strategy.type=base \
--robot.type=ugo_nova \
--policy.path=<checkpoint> \
--inference.type=rtc \
--task="$TASK_NAME" \
--duration=60
Replay
lerobot-replay \
--robot.type=ugo_nova \
--dataset.repo_id=$REPO_ID \
--dataset.episode=0
Dataset Viewer
lerobot-dataset-viz \
--repo-id $REPO_ID \
--episode-index 0
Policy Training
lerobot-train \
--dataset.repo_id=$REPO_ID \
--policy.type=act \
--policy.device=cuda \
--policy.push_to_hub=false \
--output_dir=outputs/train/my_policy \
--job_name=my_policy
Configuration
Override any field with --robot.<field>=..., e.g. --robot.exclude_joints='[waist_j1, waist_j2, waist_j3]'.
| Field | Default | Description |
|---|---|---|
joint_names |
22 joints (waist, chest, neck, both arms and grippers) | Names and order of the joints in observations and actions |
exclude_joints |
[] |
Joints that receive no command (they keep their current target) |
joint_states_topic |
/joint_states |
Joint state topic |
camera_topics |
hand_left, hand_right, head (see below) |
Camera name → JPEG topic |
camera_shapes |
hands (1200, 1920), head (720, 1280) (the cameras' own size) |
Camera name → (height, width) of the returned image. Smaller shapes are resized; exactly half is the fastest |
command_topic |
/upper_body_position_controller/commands |
Command topic |
connect_timeout_s |
10.0 |
How long connect() waits for every topic |
joint_max_age_s / camera_max_age_s |
0.2 / 0.5 |
Older joint states / images raise an error instead of being used |
See config_ugo_nova.py for the full joint list.
ROS 2 Interface
| Topic | Type | |
|---|---|---|
| Joint states | /joint_states |
sensor_msgs/JointState |
| Cameras | /camL/image_raw/compressed, /camR/image_raw/compressed, /head/image_raw/compressed |
sensor_msgs/CompressedImage |
| Commands | /upper_body_position_controller/commands |
std_msgs/Float64MultiArray |
- Observation: joint positions (rad) keyed by
<joint>.pos(e.g.arm_r_j1.pos), and one RGB image per camera. - Action: target joint positions (rad) keyed by
<joint>.pos, published as one array injoint_namesorder. Excluded joints are sent asNaN, which the controller treats as "keep the current target".
Development
git clone https://github.com/ugo-plus/lerobot-robot-ugo-nova.git
cd lerobot-robot-ugo-nova
pip install -e .
License
Apache-2.0. See LICENSE.
Metadata
Release files for lerobot-robot-ugo-nova 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lerobot_robot_ugo_nova-0.1.0.tar.gz | 10.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lerobot_robot_ugo_nova-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.9 kB
Release files / lerobot_robot_ugo_nova-0.1.0.tar.gz
| Download URL | lerobot_robot_ugo_nova-0.1.0.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e64f1366965e49e4b1819bfca23d5074628f8212b951835f0de7965c7bf5c33c
|
|
BLAKE2b-256 checksum How to use checksums |
b1f03b5e7468404c54c1d6d431c8d45f41033c4532b92de26006a81c37cfe6f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency logRelease files / lerobot_robot_ugo_nova-0.1.0-py3-none-any.whl
| Download URL | lerobot_robot_ugo_nova-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
58f619d6be4372bbba8ddf68b28db089502d3f68272962cb26e8b3ef2a205385
|
|
BLAKE2b-256 checksum How to use checksums |
84293a141e332b04556bcc82455c9bda9beff6cd2c774063d9b32a50c0251af3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.
Transparency log