Skip to content

System Architecture

Simulation and real G1 robot modes, data flow, and network topology.

Two modes: simulation (Isaac Sim on workstation) and real robot (Unitree G1 with Jetson Orin). The workstation is only used for simulation and training — the real G1 runs autonomously on its onboard Orin.


flowchart TD
    subgraph WS["Workstation — RTX 3090"]
        direction LR
        subgraph SIM["Isaac Sim 5.1"]
            G1S["Simulated G1<br/>cameras, IMU, joints"]
            BRIDGE["ROS 2 Bridge"]
        end
        subgraph ROS["Isaac ROS Container"]
            PERC["GPU Perception<br/>cuVSLAM, AprilTag, nvblox"]
            VIZ["Foxglove Bridge :8765<br/>H.264 NVENC republisher"]
        end
    end
    FOX["Foxglove Studio<br/>(any browser)"]

    BRIDGE -- "UDP DDS" --> ROS
    ROS -- "UDP DDS" --> BRIDGE
    VIZ -- "WebSocket :8765" --> FOX

Data Flow (Sim)

  1. Isaac Sim renders scene + simulates physics for G1 robot
  2. Bundled ROS 2 bridge publishes camera, IMU, joint state topics via DDS
  3. Isaac ROS container receives topics over UDP DDS (FastDDS SHM disabled)
  4. GPU perception runs on RTX 3090: SLAM, AprilTag, nvblox
  5. H.264 NVENC republisher encodes camera feeds for remote viewing
  6. foxglove-bridge exposes all topics over WebSocket on port 8765
  7. Foxglove Studio connects from browser (Mac via Tailscale)

Isaac Lab Training

  • Isaac Lab runs headless in the isaaclab conda env
  • Trains RL policies for G1 locomotion, manipulation
  • No Isaac ROS container needed during training (pure sim loop)
  • Trained policies deploy to real G1 via unitree_ros2
flowchart TD
    subgraph G1["Unitree G1 — Jetson Orin"]
        direction LR
        SENS["Onboard Sensors<br/>stereo cameras, IMU, depth"]
        G1SW["unitree_sdk2 + unitree_ros2<br/>CycloneDDS"]
        PERC["Onboard Perception<br/>cuVSLAM, AprilTag, nvblox"]
        FOX["Foxglove Bridge :8765"]
    end
    STUDIO["Foxglove Studio<br/>(any browser)"]

    SENS --> PERC
    PERC --> G1SW
    FOX -- "WebSocket :8765" --> STUDIO

Data Flow (Real)

  1. G1's Orin runs everything onboard — no workstation involved
  2. Onboard sensors publish camera, IMU, joint state topics via CycloneDDS
  3. Perception runs on Orin's GPU (cuVSLAM, AprilTag, nvblox)
  4. Trained RL policies (from Isaac Lab) control locomotion and manipulation
  5. foxglove-bridge on the Orin provides remote visualization
  6. Foxglove Studio connects from any browser on the network

G1 Network Topology

Device IP Role
Development PC (workstation) 192.168.123.99 SSH, debugging, log collection (sim/training only)
G1 internal RockChip 192.168.123.161 Low-level motor control
G1 internal Orin 192.168.123.164 High-level control, sensors, perception, ROS 2

G1 ROS 2 Topics

Topic Type Publisher
/lowstate unitree_hg::LowState Orin (joint state feedback)
/lowcmd unitree_hg::LowCmd Orin (motor commands from RL policy)
/api/sport/request High-level motion Orin (locomotion controller)
Camera topics sensor_msgs/Image Orin (onboard stereo cameras)
IMU topics sensor_msgs/Imu Orin (onboard IMU)

DDS Configuration

G1 uses CycloneDDS (not FastDDS). Set in the Isaac ROS container:

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces>
  <NetworkInterface name="eth0" priority="default" multicast="default"/>
</Interfaces></General></Domain></CycloneDDS>'

ros2_jazzy base image ships with rmw_cyclonedds_cpp pre-installed.

Workstation vs Orin

The workstation (RTX 3090) is for simulation and training only. The real G1 runs autonomously on its Jetson Orin.

Task Where Notes
Simulation Workstation Isaac Sim + Isaac ROS container
RL Training Workstation Isaac Lab headless, GPU-accelerated
Real robot operation G1 Orin Perception, control, all onboard
Visualization Any browser Foxglove connects to whichever is running

Isaac ROS Container -- What's Inside

Base: Full NVIDIA Image

nvcr.io/nvidia/isaac/ros:noble-ros2_jazzy_<hash>-amd64

Includes ROS 2 Jazzy (50+ packages), TensorRT, PyTorch, nav2, rviz2, foxglove-bridge, slam_toolbox, OpenCV, CUDA dev tools, VPI, CV-CUDA, and Triton.

Custom Dockerfile Additions

Package Purpose
ros-jazzy-isaac-ros-apriltag GPU AprilTag detection
ros-jazzy-isaac-ros-visual-slam cuVSLAM
ros-jazzy-isaac-ros-nvblox GPU 3D reconstruction
ros-jazzy-foxglove-compressed-video-transport H.264 NVENC for Foxglove
ros-jazzy-ffmpeg-encoder-decoder ffmpeg NVENC support
ffmpeg CLI tool
FastDDS no-SHM XML Fix SHM transport for sim mode
Entrypoint: 50-foxglove-bridge.sh Auto-start foxglove-bridge
Entrypoint: 60-h264-republisher.sh Auto-start H.264 NVENC republisher

What's NOT Needed in the Container

  • Unitree SDK -- runs on the G1's Orin, not the workstation
  • Unitree ROS 2 packages -- G1 publishes standard ROS 2 topics, container just subscribes
  • System ROS 2 on host -- conflicts with Isaac Sim's bundled Python 3.11 rclpy
  • Separate Unitree Docker container -- G1 is a standard ROS 2 robot from the container's perspective

Unitree Software Stack (Reference)

The Unitree repos have different jobs. Do not treat them as interchangeable.

Package Location Purpose
unitree_ros Workstation/source repo URDFs, meshes, and robot descriptions. Old ROS/Gazebo flavored, but still useful as model source.
unitree_model Unitree model dataset Preconverted USD assets for Isaac/Omniverse. GitHub repo is deprecated in favor of Hugging Face.
unitree_rl_lab Workstation Isaac Lab RL training, playback, and policy export.
unitree_sim_isaaclab Workstation Rich Isaac Sim validation/control app with DDS, sensors, task scenes, replay, and data generation.
unitree_mujoco Workstation or dev machine Lightweight SDK2/MuJoCo simulator for sim-to-real controller validation.
unitree_sdk2 G1 or direct-control dev machine C++ SDK for real robot DDS/CycloneDDS communication and control.
unitree_sdk2_python G1 or direct-control dev machine Python SDK2 bindings.
unitree_ros2 G1 or direct-control dev machine ROS 2 package layer using Unitree DDS messages and topics.
CycloneDDS 0.10.2+ G1 / Unitree control path DDS middleware used by Unitree SDK2 and compatible with ROS 2 DDS concepts.

Simulation Equivalents

Real Simulated
Unitree DDS/CycloneDDS topics unitree_sim_isaaclab DDS-style sim topics
Physical sensors Simulated cameras, IMU, and lidar in Isaac Sim
unitree_sdk2 or unitree_ros2 controller Isaac Sim physics plus action provider
Physical G1 Canonical G1 29DOF URDF/USD asset

For the full developer workflow, see Unitree Developer Workflow.

Key Repos