简体中文文档: 点此查看
This guide documents the practical steps to deploy perception and motion-control components on Unitree robots (Go2 / Go2W / B2) using the InternNav project (https://github.com/InternRobotics/InternNav). The focus is on edge-side (robot-side) deployment and debugging. For server-side setup and model serving, consult the InternNav documentation.
Compatibility and scope:
- Target hardware: Unitree Go2 (onboard compute box) and compatible edge devices
- Recommended OS: Ubuntu 20.04 LTS (tested with ROS 2 Foxy)
- Python: 3.8+
- Camera: Intel RealSense series (recommended D455)
- Update the robot firmware to the latest version to ensure compatibility and stability.
- Set the robot's motion mode to AI mode via the Unitree mobile app — this reduces torso motion and improves visual stability.
- Connection options:
- Onboard compute box: uses the robot's internal network (no additional hardware required).
- External compute (NUC / Jetson): connect via Ethernet. Default robot subnet:
192.168.123.x. See Unitree SDK2 docs for interface setup.
- Recommended model: Intel RealSense D455 (global shutter reduces motion blur).
- Use the provided 3D-print mounts for better forward ground view: https://github.com/InternRobotics/InternNav/tree/main/assets/3d_printing_files
- Use a USB 3.2 Gen 1 (or better) data cable and plug into the front-panel Type-C port of the compute box to avoid bandwidth issues.
cd ~
sudo apt update
sudo apt install -y python3-pip git
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip3 install -e .Install the librealsense system packages and the Python bindings. See the official docs for Jetson-specific steps.
# Add RealSense key and repo (example)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
sudo apt-get install -y librealsense2-utils librealsense2-dev
# Python binding
pip3 install pyrealsense2git clone https://github.com/InternRobotics/InternNav.git
cd InternNav
pip3 install numpy requests Pillow casadiIf you encounter "Could not locate cyclonedds" when installing SDKs, compile CycloneDDS and set CYCLONEDDS_HOME:
cd ~
git clone https://github.com/eclipse-cyclonedds/cyclonedds -b releases/0.10.x
cd cyclonedds
mkdir build install && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install
cmake --build . --target install
# Use absolute path on export
export CYCLONEDDS_HOME="/home/<user>/cyclonedds/install"
cd ~/unitree_sdk2_python
pip3 install -e .Key modules in InternNav/onboard:
start_robot.sh— single script to start driver, ROS 2 bridge, and camera node; includes simple supervision and configurable network interface.unitree_driver.py— low-level UDP driver (port 8899) wrapping Unitree SDK calls.ros_bridge.py— ROS 2 bridge publishing/odom_bridgeand forwarding/cmd_vel_bridgeto the driver.realsense_publisher.py— publishes RGB and aligned depth (640×480 @30fps) and implements auto-reconnect logic.
- Make the launcher executable:
cd onboard
chmod +x start_robot.sh- Edit network interface in
start_robot.shif your interface is noteth0:
ROBOT_IF="eth0" # change to enp3s0, wlan0, etc. as needed- Start the system:
./start_robot.sh- Configure and start the navigation client:
Configure the inference server address:
cd InternNav
nano scripts/realworld/http_internvla_client.pyFind the following line and replace 127.0.0.1 with the actual server IP:
url='http://127.0.0.1:5801/eval_dual' # replace 127.0.0.1 with the inference server IPThen start the robot-side modules:
Terminal 1 (robot):
cd InternNav/onboard
./start_robot.shTerminal 2 (onboard or remote client):
cd InternNav
python3 scripts/realworld/http_internvla_client.pyIf running a local inference server, on the server machine:
python3 scripts/realworld/http_internvla_server.pySubscribe with RViz2 to validate topics:
| Topic | Type | Description |
|---|---|---|
/camera/camera/color/image_raw |
sensor_msgs/Image |
RGB image |
/camera/camera/aligned_depth_to_color/image_raw |
sensor_msgs/Image |
Aligned depth image |
/odom_bridge |
nav_msgs/Odometry |
Robot odometry |
Example RViz2 visualization:
- Camera not detected: check USB cable (USB 3.2 Gen1), ensure front Type-C port, run
rs-enumerate-devices. - Network issues: verify interface with
ifconfig/ip addr,ping 192.168.123.161, and ensure UDP 8899 is reachable. - ROS 2 no topics: check
echo $ROS_DOMAIN_IDand ensure sameROS_DOMAIN_IDacross devices;ros2 topic listto inspect.
- InternNav docs: https://internrobotics.github.io/user_guide/internnav/
- InternNav repo: https://github.com/InternRobotics/InternNav/
- Unitree SDK2: https://github.com/unitreerobotics/unitree_sdk2
- Intel RealSense: https://github.com/IntelRealSense/librealsense

