Skip to content

FAQ

Why is the command sending code commented out in the original source?

Section titled “Why is the command sending code commented out in the original source?”

For safety reasons. Developers must first confirm that the SDK communicates correctly with the robot and that control commands are correct before uncommenting send_cmd->SendCmd(robot_joint_cmd).

How to check if the SDK is receiving robot data?

Section titled “How to check if the SDK is receiving robot data?”
  • Observe whether the terminal prints No data from the robot was received!!!!!!
  • Uncomment cout << robot_data->imu.acc_x << endl; to check for IMU data output
  • Register a callback function and check whether is_message_updated_ is set to true

If no valid command is sent for more than 50ms, the low-level controller will take back control. You need to call send_cmd->ControlGet(SDK) again to regain control, and call send_cmd->RobotStateInit() to reinitialize.

How to compile and run on the motion host?

Section titled “How to compile and run on the motion host?”

Use ARM compilation:

Terminal window
cmake .. -DBUILD_PLATFORM=arm
make -j

Copy the generated Lite_motion executable along with libdeeprobotics_legged_sdk_aarch64.so to the motion host to run.

How to switch between position control and torque control?

Section titled “How to switch between position control and torque control?”

In the SwingToAngle function of motionexample.cpp, change if(true) to if(false) to switch to torque control mode.

Because main.cpp currently defaults to:

RemoteCommandType::kRetroidGamepad

Change RemoteCommandType::kRetroidGamepad to RemoteCommandType::kKeyBoard in main.cpp.

Gamepad data is received by RetroidGamepadPublisher in lite3_transfer via UDP port 12121 and published to /GAMEPAD_DATA. Ensure lite3_transfer is running and the gamepad is connected.

Because BUILD_PLATFORM in CMakeLists.txt determines the onnxruntime directory and toolchain:

set(BUILD_PLATFORM "x86" CACHE STRING "Target platform (x86 or arm)")

Why distinguish between /JOINTS_CMD and /JOINTS_DATA?

Section titled “Why distinguish between /JOINTS_CMD and /JOINTS_DATA?”

/JOINTS_CMD is for control output, /JOINTS_DATA is for robot feedback. The simulation node and control node use these two topics for closed-loop control.

What is the relationship between lite3_transfer and lite3_sdk_service?

Section titled “What is the relationship between lite3_transfer and lite3_sdk_service?”

lite3_sdk_service is the management layer that remotely controls the start/stop of lite3_transfer (hardware layer) via UDP. lite3_transfer is not registered as a standalone systemd service; it is started and stopped on demand by lite3_sdk_service.

What to do if emergency stop doesn’t work?

Section titled “What to do if emergency stop doesn’t work?”
  • Ensure lite3_transfer is running
  • Check if the /EMERGENCY_STOP service exists: ros2 service list | grep EMERGENCY_STOP
  • Confirm /EMERGENCY_STOP_SIGNAL has active subscribers (i.e., Lite3_sdk_deploy has called InitEmergencyStopListener())

How to modify the topic publish frequency?

Section titled “How to modify the topic publish frequency?”
  • Adjust via the Retroid gamepad App interface
  • Or via UDP command: echo "50" | nc -u 127.0.0.1 12122
Terminal window
sudo lsof -i:12122
sudo kill <pid>

Check if minSdkVersion meets the requirement (minimum 24).

Ensure the gamepad is paired and supports the HID protocol.