Safety Requirements#
ROBOTO ORIGIN is a highly dynamic biped robot. Before starting the real robot, safety requirements must always come first.
Pre-Startup Checklist#
- You have read and understood the official Safety Operation Guide, Product Disclaimer, and Safety Notice.
- During first zero calibration, reset, and inference tests, the robot must use a reliable load-bearing suspension or safety rope.
- The battery voltage must not be lower than 50 V. If it is below this value, charge the battery first and do not continue debugging.
- The ankle links, main fasteners, limit parts, and wiring have no looseness, interference, or wear.
- The gamepad is paired, is in XInput mode, and the X button can be used to enable or disable the motors.
- Someone on site is ready to trigger emergency stop at any time. If the software loses control, prioritize the physical emergency stop to cut off main power.
Choose the Hardware and Main Controller Route#
New users should prioritize the V2.0 hardware materials. V2.0 is the currently recommended version. Compared with V1.0, it adds improvements such as structural reinforcement, an integrated board, waist limit parts, pin calibration, and a backplate switch. V1.0 is mainly for maintenance by existing users, and new reproduction projects are not recommended to start from V1.0.
| Main controller | System | Notes |
|---|---|---|
| RDK X5 | Ubuntu 22.04, kernel 6.1.83 | The official preinstalled real-time kernel image can be used. Suitable for quick startup. |
| Orange Pi 5 Plus | Ubuntu 22.04, kernel 5.10 | Requires installing the real-time kernel deb packages provided in the repository assets. |
If your goal is to run the real robot as quickly as possible, the RDK X5 route is recommended first.
Prepare RDK X5 or Orange Pi#
RDK X5#
- Prepare the RDK X5, an SD card, two Type-C cables, RDK Studio, and the RDK X5 system image provided by RoboParty.
- Follow the RDK X5 flashing process to enter flashing mode, then select the correct storage device in RDK Studio and flash the image.
- After flashing, restart the main controller and create a device connection through RDK Studio.
The default username and password are usually both:
sunriseWhen debugging ROS 2 DDS and high-volume logs, Ethernet is recommended. The commonly used addresses in the official documentation are:
RDK X5: 192.168.127.10
PC: 192.168.127.1If SSH reports a host key conflict, clear the old record on the PC:
ssh-keygen -R 192.168.127.10Orange Pi 5 Plus#
Orange Pi 5 Plus requires Ubuntu 22.04 and the 5.10 real-time kernel. After pulling the deployment repository, run the following commands in the repository root:
cd assets
sudo apt install ./*.deb
cd ..After installation, restart the main controller before continuing with real-time permission configuration.
Ethernet is also recommended when debugging Orange Pi 5 Plus. Connect the Orange Pi 5 Plus and the debugging PC to the same wired network, or configure both devices with fixed IP addresses in the same subnet. Check the Ethernet address on Orange Pi with ip a, then connect from the PC:
ssh orangepi@<Orange Pi IP>Pull the Deployment Code#
After installing Git on the main controller, pull the real-robot deployment repository and initialize its submodules.
git clone --recursive https://github.com/Roboparty/roboparty_deploy.git
cd roboparty_deploy
git submodule update --init --recursiveAfter cloning, read the repository README first. This page keeps only the quick-start path; script names and dependency versions should follow the latest roboparty_deploy README. After installing ROS 2 Humble, install the deployment dependencies:
sudo apt update
sudo apt install -y ccache libfmt-dev libspdlog-dev libeigen3-dev screen
sudo apt install -y ros-humble-joy
sudo apt install -y python3-yaml python3-numpyConfigure real-time permissions:
sudo nano /etc/security/limits.confAdd the following two lines to the end of the file. Replace the username with the current main controller user. The default RDK X5 user is sunrise, and a common Orange Pi user is orangepi.
sunrise - rtprio 98
sunrise - memlock unlimitedAfter restarting, verify the configuration:
ulimit -rIf the output is 98, the real-time priority configuration is successful.
Configure CAN, IMU, and Gamepad#
Before connecting the hardware, finish setting the motor IDs, IMU baud rate, and IMU frequency. For motor ID definitions, refer to the Product Installation Manual and the Damiao Motor Step-by-Step Debugging Process document, then write the IDs with the Damiao host software or the corresponding hardware vendor's host software. For robot wiring, refer to the Wiring Instructions.
- Default IMU baud rate: 921600.
- Default IMU frequency: 500 Hz.
- If you change to another frequency, it is recommended to keep it above 200 Hz.
- If you change the IMU baud rate, update
src/inference/config/robot.yamlaccordingly.
The default CAN mapping is shown below. The numbering follows the order in which USB-to-CAN devices are connected to the main controller:
| CAN interface | Corresponding part |
|---|---|
| can0 | Left leg |
| can1 | Right leg + waist |
| can2 | Left arm |
| can3 | Right arm |
Recommendations:
- Connect USB-to-CAN devices to USB 3.0 ports or a USB 3.0 hub.
- Connect the IMU and gamepad to USB 2.0 ports.
- Prefer using udev rules to fix device mapping and avoid CAN numbering changes caused by plug-in order. However, the repository-provided rules can be used directly only when the actual wiring is consistent with the Wiring Instructions.
If you only need to debug CAN manually, use:
sudo ip link set can0 up type can bitrate 1000000
sudo ip link set can0 txqueuelen 1000In actual use, complete the configuration for can0, can1, can2, and can3.
Using the udev rules in the repository is recommended. RDK X5 uses 99-auto-up-devs-sunrise.rules, and Orange Pi uses 99-auto-up-devs-orangepi.rules. If the actual USB ports, hub, or wiring differ from the Wiring Instructions, use udevadm monitor to confirm the KERNELS value first, then update the rule file instead of applying the default rule directly. Example:
# Watch device plug/unplug events to confirm KERNELS
sudo udevadm monitor
# RDK X5 uses assets/99-auto-up-devs-sunrise.rules
# Orange Pi uses assets/99-auto-up-devs-orangepi.rules
sudo cp assets/99-auto-up-devs-sunrise.rules /etc/udev/rules.d/
sudo udevadm control --reload
sudo udevadm triggerAfter restarting, check whether CAN is automatically brought up:
ip aFirst Zero Calibration#
After first assembly, maintenance, motor replacement, or zero-position loss, zero calibration must be performed again. During zero calibration, the robot must be suspended, and its posture should be as close as possible to the zero position required by the official documentation.
cd roboparty_deploy
colcon build --symlink-install
source /opt/ros/humble/setup.bash
source install/setup.bash
python3 scripts/set_zero.py- After manually moving the current motor to the zero position, press Enter to write the zero position.
- If the current motor zero position is already correct, press Space to skip it.
- Do not let the robot leave the suspension during calibration.
When the software has started and the motors have been initialized, you can also write the current zero position through ROS 2 services:
source /opt/ros/humble/setup.bash
source install/setup.bash
./tools/start_robot.sh
ros2 service call /init_motors std_srvs/srv/Trigger
ros2 service call /set_zeros std_srvs/srv/TriggerFor first assembly, scripts/set_zero.py is still recommended because it is more suitable for manually confirming each motor one by one.
Start the Robot#
Final Check Before Startup#
- The robot is still suspended or protected by a safety rope.
- The battery voltage is normal.
- Emergency stop is reachable.
- CAN, IMU, and gamepad are all connected.
- The
motor_zero_offsetinsrc/inference/config/robot.yamlmatches the actual calibration method.
About the zero offset of waist yaw:
- If waist yaw was rotated to the limit block for calibration, keep the default offset value.
- If a printed part was used to fix waist yaw during calibration, set the corresponding offset to
0.0as required by the deployment documentation.
Start the Software#
./tools/start_robot.shThe script automatically builds the workspace and starts background screen sessions:
screen -r inference_session
screen -r joy_sessionStop Background Components#
screen -S inference_session -X quit
screen -S joy_session -X quitBefore Power-Off#
- Reconnect the suspension or safety rope.
- Press X to disable the motors.
- After confirming that the robot is stable, cut off the main power.
Python SDK and ROS 2 Services#
If you want to write scripts to control the hardware, first complete the build and source the environment:
colcon build --symlink-install
source /opt/ros/humble/setup.bash
source install/setup.bashThe deployment repository provides three Python modules:
| Module | Purpose |
|---|---|
| imu_py | Reads IMU quaternion, angular velocity, linear acceleration, temperature, and other data. |
| motors_py | Initializes motors, switches control modes, and sends MIT, position, or velocity control commands. |
| robot_py | Reads configuration files uniformly and controls whole-robot motors and IMU. |
Common ROS 2 services:
ros2 service call /init_motors std_srvs/srv/Trigger
ros2 service call /deinit_motors std_srvs/srv/Trigger
ros2 service call /start_inference std_srvs/srv/Trigger
ros2 service call /stop_inference std_srvs/srv/Trigger
ros2 service call /clear_errors std_srvs/srv/Trigger
ros2 service call /reset_joints std_srvs/srv/Trigger
ros2 service call /refresh_joints std_srvs/srv/Trigger
ros2 service call /read_joints std_srvs/srv/Trigger
ros2 service call /read_imu std_srvs/srv/TriggerApplication Module References#
In addition to basic deployment and real-robot startup, ROBOTO ORIGIN provides several application and extension modules for reference. This section mainly explains that each module exists, what it can roughly do, and where to look. For detailed installation, configuration, runtime commands, and parameters, refer to the corresponding repository or module README.
| Application direction | Module / repository | Reference method |
|---|---|---|
| Navigation and localization | roboparty_navigation | Used for navigation, localization, and related ROS 2 application modules in RPO experiments. If you need mobile navigation or localization adaptation, read this repository's README first. |
| XR teleoperation | roboparty_xr_teleop | Used for XR teleoperation applications in RPO experiments. If you need remote operation, human-robot interaction, or XR control links, refer to this repository's README. |
| Policy training and export | roboparty_train | Used for Isaac Lab / RSL-RL training, evaluation, ONNX export, and Sim2Sim validation. If you need to train or replace policies, start with this repository's README. |
| Model and simulation description | rpo_description | Provides robot description files such as URDF and MJCF. Refer to it for simulation, visualization, dynamics checks, or integration with other simulation tools. |
| Appearance parts and industrial design | rpo_appearance | Provides appearance parts, shell design materials, and prototype appearance descriptions. This module is mainly for static display and design reference, and direct printing is not recommended. |
| Firmware and board images | roboparty_firmware | Contains USB2CAN firmware and Orange Pi / RDK image build systems. Refer to it when flashing, maintaining low-level firmware, or customizing system images. |
| Deployment scripts and SDK examples | roboparty_deploy/scripts | Provides script examples for zero calibration, hardware control, Python SDK, and more. Refer to it when writing your own control scripts based on the deployment framework. |
If this is your first time starting the robot, you do not need to read all these modules immediately. It is recommended to first complete environment setup, zero calibration, and startup according to this article. After confirming that the robot can run stably, choose the corresponding README for deeper study based on your goal.
Reading List#
| Goal | Next step |
|---|---|
| Reproduce or check the hardware version | Read the V2.0 mechanical and PCB directories in rpo_hardware. |
| Flash or maintain USB2CAN | Read roboparty_firmware/roboto_usb2can. |
| Build RDK X5 / Orange Pi images | Read x5-rdk-gen and orangepi-build in roboparty_firmware. |
| Train your own policy | Read roboparty_train and install Isaac Sim / Isaac Lab first. |
| Check appearance parts or industrial design materials | Read rpo_appearance and the "Industrial Design" page in the official knowledge base. |
| Perform simulation and model checks | Read the URDF/MJCF materials in rpo_description. |
| Work on navigation or XR teleoperation | Read roboparty_navigation and roboparty_xr_teleop. |
| Contribute code or documentation | Submit issues or PRs to the corresponding sub-repository. The main repository only handles aggregation-layer issues. |
Quick Troubleshooting#
ulimit -r Is Not 98#
Check whether the username in /etc/security/limits.conf is wrong. The default RDK X5 user is usually sunrise, and a common Orange Pi user is orangepi. Restart after making changes.
CAN Interface Not Found#
First check whether the USB-to-CAN device is recognized by the system:
dmesg | grep gs_usb
ip link show type canIf using udev rules, check whether the rule file has been copied to /etc/udev/rules.d/, then reload the rules and reconnect the device.
CAN Bus Error or Motor Not Responding#
Check the following first:
- Whether CAN_H / CAN_L are reversed.
- Whether the 120 ohm termination resistors at both ends of the bus are correct.
- Whether the baud rate is 1 Mbps.
- Whether the CAN mapping matches the actual wiring.
- Whether the motor IDs match the configuration file.
Abnormal Robot Posture After Inference Starts#
Immediately press X to disable the motors, and use the physical emergency stop if necessary. Then check:
- Whether the zero position is correct.
- Whether
motor_zero_offsetmatches the calibration method. - Whether
screen -r inference_sessionshows error logs. - Whether the battery voltage and motor error codes are normal.
- Whether joints, links, or wiring have mechanical interference.
SSH Reports a Host Key Conflict#
If the main controller has been reinstalled, the PC may have stored an old host key. This page recommends Ethernet debugging first. For RDK X5 Ethernet, clear the Ethernet address. If you actually use the board Wi-Fi hotspot, clear the hotspot address instead:
# RDK X5 Ethernet connection
ssh-keygen -R 192.168.127.10
# RDK X5 Wi-Fi hotspot connection
ssh-keygen -R 192.168.12.1GitHub Repository Entry Points#
| Goal | Recommended entry | Purpose |
|---|---|---|
| View the unified project introduction | RoboParty/ROBOTO ORIGIN | Main repository, aggregating core sub-repository snapshots and resource pointers. |
| Read the official knowledge base | ROBOTO ORIGIN documentation | Documentation for safety, assembly, wiring, calibration, deployment, SDK, FAQ, and more. |
| Run real-robot deployment code | Roboparty/roboparty_deploy | ROS 2 deployment framework, hardware drivers, inference, gamepad control, Python SDK. |
| Check hardware drawings and BOM | Roboparty/rpo_hardware | Mechanical structure, PCB, and manufacturing materials. |
| Check firmware and images | Roboparty/roboparty_firmware | USB2CAN firmware and Orange Pi / RDK image build systems. |
| Check training workflows | Roboparty/roboparty_train | Isaac Lab, RSL-RL, AMP, BeyondMimic, Parkour, Sim2Sim. |
| Check robot description files | Roboparty/rpo_description | URDF/MJCF, models, and simulation descriptions. |
| Check appearance parts and industrial design | Roboparty/rpo_appearance | RPO appearance parts, shell structure, visual references, and prototype appearance descriptions. |
| Check navigation and localization applications | Roboparty/roboparty_navigation | RPO experiment-related navigation, localization, and application modules. |
| Check XR teleoperation applications | Roboparty/roboparty_xr_teleop | RPO experiment-related XR teleoperation applications. |
ROBOTO ORIGIN is the main repository and snapshot aggregation repository, making it convenient to pull all resources at once. Module-level issues, code changes, and PRs should be submitted to the corresponding sub-repositories instead of all being placed in the main repository.
Current materials may still contain legacy path identifiers. The product name is standardized as RPO; runtime deployment is roboparty_deploy, hardware materials are rpo_hardware, training materials are roboparty_train, and robot description is rpo_description.