PLEN
Contact us

Research & Development

We develop our own software to make working with Unitree robots easier for Polish universities, institutions and companies: a Polish voice-command module and a Polish-language training platform. This page describes the scope of this work and its limitations.

1. Unitree research ecosystem

The key public resources a university lab working with Unitree robots can use: third-party projects used under their own licences. We give links to the original sources only; we do not copy or re-host their content. As of 21.10.2026.

Where to start: by goal

Your goalStart withGood to know
Write your own control programunitree_sdk2 (C++) or unitree_sdk2_pythonThe SDK repository has example folders for G1, Go2, H2, B2, A2, As2 and other models. Its reference build environment is Ubuntu 20.04 on x86_64 or aarch64.
Connect the robot to your ROS 2 stackunitree_ros2Talks to the robot over its DDS layer, without wrapping the SDK. Tested by Unitree on Ubuntu 22.04 with ROS 2 Humble (recommended) and on Ubuntu 20.04 with Foxy; examples include G1 and Go2.
Test a program before it runs on the robotunitree_mujocoUses the same SDK2 interface as the real robot, so the same code can be checked in simulation first.
Train walking with reinforcement learningunitree_rl_gym, unitree_rl_labIsaac Gym or Isaac Lab for training, MuJoCo for checking, then the robot.
Collect demonstrations and train manipulationxr_teleoperate, unitree_sim_isaaclab, LeRobot, unitree_lerobotToday focused mainly on G1.

Before you start: the version matters

  • Your own software needs a version that allows it. Unitree lists secondary development (own software via the SDK) as supported on Go2 EDU and G1 EDU, basic on Go2 X, and not available on Go2 Air, Go2 Pro or the base G1 (Go2, G1).
  • Connecting a computer or payload. On the Go2, the extra Ethernet, power and SBUS interfaces are only on the EDU version, and an additional compute module is, according to the manufacturer, an EDU option (Go2 developer documentation, unitree.com/go2).
  • Simulation first. Programs written against SDK2 can be checked in unitree_mujoco before they touch the robot; on the real robot we run trials in stages (section 6).

Version and interface details checked against the Unitree sources on 22.10.2026.

SDKs, simulators and learning frameworks

  • unitree_sdk2 – the official C++ SDK (DDS): your own control programs, from high-level commands down to low-level control; folders for G1, Go2, H2, B2, A2, As2 and other models.
  • unitree_sdk2_python – the same SDK in Python: quick prototypes and teaching without compiling.
  • unitree_ros2 – ROS 2 interface and examples: connect the robot to your own ROS 2 stack (navigation, perception, data logging).
  • unitree_mujoco – a MuJoCo simulator that uses the same SDK2 interface as the real robot, so the same program can be tested in simulation first.
  • mujoco_menagerie (Google DeepMind) – a curated collection of MuJoCo models, including Unitree G1 and Go2: a starting point for your own simulation experiments.
  • unitree_rl_gym – reinforcement-learning locomotion training in Isaac Gym, a check in MuJoCo, then a trial on the robot; G1, Go2, H1, H1-2.
  • unitree_rl_lab – reinforcement-learning environments in Isaac Lab: Go2, H1 and G1 (29 DoF).
  • unitree_sim_isaaclab – manipulation and teleoperation tasks in Isaac Lab for G1 and H1-2: collecting data in simulation.
  • LeRobot (Hugging Face) – an imitation-learning library with native Unitree G1 support: record demonstrations and train policies.
  • LeRobot: Unitree G1 – how G1 is set up in LeRobot.
  • unitree_lerobot – Unitree's tools for converting data and training policies in the LeRobot format (G1).
  • xr_teleoperate – teleoperating a humanoid with an XR headset: collecting demonstrations for imitation learning.

Licences. The software, models and datasets mentioned here are third-party projects (e.g. Unitree Robotics, Hugging Face), published by their authors and used under their own licences. Licences differ between projects, and between code, model weights and datasets. Please check the licence in each project before use. NeoHumanoidX does not grant any licence to them. xr_teleoperate and teleimager (Unitree Robotics): Apache License 2.0 according to the projects' LICENSE files; they build on third-party components under their own licences.

How we use this: we track these resources in our technology watch (section 5) and use them in the modules of our training platform.

2. Polish voice commands for robots (work in progress)

Why: The stock Unitree voice assistant does not support Polish, and for some models the manufacturer's SDK offers no audio interface. So we are building our own speech module that does not depend on the cloud.

We are developing a Polish voice-command module designed to run on the robot with no internet connection.

What we are working on

  • Local processing. We combine speech recognition (faster-whisper), voice activity detection (Silero VAD) and speech synthesis on a ROS 2 Humble architecture, with no internet connection.
  • Closed command list. The list has 10 commands, including "stój" (stop), "dzień dobry" (hello), "kim jesteś" (who are you), "powtórz" (repeat), "mów głośniej" (louder), "pomachaj" (wave) and "obróć się w lewo" (turn left). We use a deterministic matcher to recognise commands: no language model and no randomness.
  • Safety before convenience. We design the module so that speech never drives motion directly: every motion command is to pass a safety gate and need spoken confirmation ("tak" within 5 seconds), and "stop" is to take priority, with no confirmation.
  • Two-stage stop. The design has a fast path that aborts the current action and a second path that confirms the command and blocks motion until it is manually released.
  • Motion in simulation only. The module has no connection to the robot's actuators; motion commands are only logged (dry-run).
  • Privacy. We design the module so that it does not store voice recordings by default.
  • Licences. We use only synthetic voices whose licences allow public use (RHVoice: CC0 and CC BY 4.0), chosen after a licence review.

Limitations:

  • the module has not been tested on recordings of real people, only on synthetic recordings;
  • while the robot itself is speaking, the fast stop path fires too often on other speech;
  • the module has not been tested on a robot.

3. Training platform with a robot simulator (in development)

R&D

NeoHumanoidX training platform. We are developing a Polish-language training platform with an in-browser robot simulator for teams that work with Unitree humanoid robots: research groups, teaching staff and their students.

What we are working on

  • Modules with introductory lessons, ranging from safety around robots, through setting up the environment and communicating with the robot (unitree_sdk2, DDS, ROS 2 Humble), motion control and reinforcement learning, Fast-LIO 2 odometry, to AI tools: LeRobot and Gemini Robotics-ER.
  • Module structure: learning objectives, prerequisites, an introductory lesson, sources with licences, and an "as of" date.
  • A glossary with search in the browser, with no server.
  • 3D simulator in the browser: the MuJoCo engine (WebAssembly) with the public model of a full-size Unitree humanoid (Unitree Robotics, BSD-3-Clause-style licence; see the model's LICENSE file) – no software to install and no GPU server.
  • Quality control: every change goes through automated unit and end-to-end tests, a link check, a dependency audit and a leaked-secrets scan.

The platform is not publicly available. Universities interested in a pilot can contact us: Ask about a pilot.

4. G1: two-handed box carrying (work in progress)

R&D in progress — no results yet

We are teaching the Unitree G1 humanoid to pick up a box with both hands, carry it a few metres and put it down. It is our first in-house project and a test bed for clients' logistics tasks. The task looks simple, but keeping the box stable and the robot balanced while walking needs careful work on grasping and gait, which makes it a good starting point for more complex tasks.

  1. 1. Approachstop in front of box
  2. 2. Grasptwo hands, side squeeze
  3. 3. Liftarm force control
  4. 4. Walkarms held fixed
  5. 5. Placestop, release
Our working sequence. These are stages, not achieved results.

How we approach it

  • We split the task into consecutive stages instead of one neural network covering everything, so each stage can be checked and improved on its own.
  • The robot stops before grasping, so walking and manipulation never happen at the same time.
  • While walking the arms hold a fixed pose and the gait controller treats the box as extra payload.
  • A known limit from the manufacturer data: G1 arm payload is about 2 kg (EDU about 3 kg, pose-dependent), so we start with light, rigid boxes.

Results

We do not publish results: no success rate, cycle time or videos.

Code

Illustrative code Illustrative code, not yet run on a robot. Two short sketches by our team showing how we plan to structure the task. They are deliberately independent of the Unitree SDK and ROS 2, so they do not stand for an integration we have not built yet.

Illustrative code 01_carry_state_machine.py · not yet run on a robot.
# ILLUSTRATIVE / PLANNED - not from our repo, not run on a robot.
# G1 two-handed box carry: the 5 stages as a fail-closed state machine.
# Licence: (c) NeoHumanoidX sp. z o.o., shown for illustration only.
from enum import Enum, auto

class Stage(Enum):
    APPROACH = auto(); GRASP = auto(); LIFT = auto()
    WALK = auto(); PLACE = auto(); DONE = auto(); STOPPED = auto()

NEXT = {Stage.APPROACH: Stage.GRASP, Stage.GRASP: Stage.LIFT,
        Stage.LIFT: Stage.WALK, Stage.WALK: Stage.PLACE,
        Stage.PLACE: Stage.DONE}

class CarryTask:
    def __init__(self, skills, safety):
        self.skills, self.safety = skills, safety   # injected; sim first
        self.stage = Stage.APPROACH

    def step(self):
        if self.safety.stop_requested():            # e-stop / voice stop
            self.stage = Stage.STOPPED              # latched until reset
            return self.stage
        if self.stage in (Stage.DONE, Stage.STOPPED):
            return self.stage
        ok = self.skills[self.stage].run()          # bounded, with timeout
        self.stage = NEXT[self.stage] if ok else Stage.STOPPED
        return self.stage
Illustrative code 02_arm_hold_while_walking.py · not yet run on a robot.
# ILLUSTRATIVE / PLANNED - not from our repo, not run on a robot.
# Keep both hands clamped on the box while the legs walk: hold a fixed
# arm pose with gentle stiffness and watch grip force for a slipping box.
# Licence: (c) NeoHumanoidX sp. z o.o., shown for illustration only.
from dataclasses import dataclass

@dataclass
class ArmHold:
    pose: list            # 14 arm joint targets [rad], left + right
    kp: float = 40.0      # soft enough to absorb walking sway
    kd: float = 1.5
    min_grip_n: float = 8.0

def hold_step(hold, read_state, send_arm_targets, on_slip):
    """One control tick (e.g. 100 Hz) during the WALK stage."""
    state = read_state()                       # joints + hand forces
    if min(state.grip_forces) < hold.min_grip_n:
        on_slip()                              # stop walking, set box down
        return False
    send_arm_targets(hold.pose, kp=hold.kp, kd=hold.kd)  # via the robot's SDK
    return True

5. Technology watch

We regularly review 27 sources: Unitree repositories, simulators, and AI libraries and models for robots. Change dates are read straight from repository history, and each finding is tagged as verified or inferred, with the date the source was accessed. Sample findings from October 2026:

  • Unitree G1 is supported in LeRobot (LeRobotDataset v3.0 format); H2 is not supported there yet.
  • The Unitree SDK offers an audio interface for G1 but not for every model – there, speech needs a custom solution.
  • MuJoCo 3.16.0 was released on 14.10.2026; new versions appear roughly every two weeks.

We share fresh technical news from the Unitree ecosystem and robotics research on our LinkedIn page.

6. How we work

  • No evidence, no claim. We publish only results backed by recorded measurement data, with the date and conditions.
  • Trials in stages. Simulation or recordings first, then a trial with the robot powered but not moving, and motion last – each step after quality-assurance sign-off, and for motion with an operator holding the emergency stop.
  • Independent quality control. Software changes are checked before they are merged into the main version.
  • Licences and rights. We check the licences of components, voices, models and data before we use them.

Contact

If you teach or do research with Unitree robots and would like to talk about this work, please contact us at contact@neohumanoidx.eu.

Unitree, G1 and H2 are trademarks of Unitree Robotics. Other product names belong to their owners.

Contact usAsk for price