# Service API
# Recalibrate IMU
Initiates IMU calibration. The robot must remain perfectly still on a hard, flat surface during this process.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/imu/recalibrate
This service call only triggers the calibration; the actual process typically takes 10 to 20 seconds to complete.
Once the calibration is finished, a notification will be sent via the /action WebSocket topic.
Sample Success Output:
{
"topic": "/action",
"timestamp": 1681733608.653,
"email": "",
"username": "",
"deviceName": "718220110000909",
"action": "recalibrate_imu",
"message": "IMU calibration succeeded"
}
Sample Failure Output:
{
"topic": "/action",
"timestamp": 1681733580.702,
"email": "",
"username": "",
"deviceName": "718220110000909",
"action": "recalibrate_imu",
"message": "error: IMU calibration failed. Failed to rotate to right"
}
# Set Control Mode
curl -X POST \
-H "Content-Type: application/json" \
-d '{"control_mode": "auto"}' \
http://192.168.25.25:8090/services/wheel_control/set_control_mode
Parameters
class SetControlModeRequest {
control_mode: 'auto' | 'manual' | 'remote';
}
Use the /wheel_state WebSocket topic to monitor the current control mode and wheel status.
$ wscat -c ws://192.168.25.25:8090/ws/v2/topics
> {"enable_topic": "/wheel_state"}
< {"topic": "/wheel_state", "control_mode": "auto", "emergency_stop_pressed": true }
# Set or Clear Emergency Stop
curl -X POST \
-H "Content-Type: application/json" \
-d '{"enable": true}' \
http://192.168.25.25:8090/services/wheel_control/set_emergency_stop
Parameters
class SetEmergencyStopRequest {
enable: boolean;
}
Use the /wheel_state WebSocket topic to monitor the emergency stop status.
$ wscat -c ws://192.168.25.25:8090/ws/v2/topics
> {"enable_topic": "/wheel_state"}
< {"topic": "/wheel_state", "control_mode": "auto", "emergency_stop_pressed": true }
# Restart Services
Restarts all software services on the robot.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/restart_service
# Shutdown or Reboot the Device
curl -X POST \
-H "Content-Type: application/json" \
-d '{"target": "main_power_supply", reboot: false}' \
http://192.168.25.25:8090/services/baseboard/shutdown
Parameters
class ShutdownRequest {
target:
| 'main_computing_unit' // Reboot or shutdown only the main computing board.
| 'main_power_supply'; // Reboot or shutdown the entire device.
reboot: boolean; // true to reboot, false to shutdown.
}
# Clear Wheel Errors
curl -X POST http://192.168.25.25:8090/services/wheel_control/clear_errors
# Clear Flip Error
Error 8004 (flip error) indicates a serious issue, such as the robot having tipped over.
This requires manual inspection. Once the issue is resolved, use this service to clear the error and restore the robot to an operational state.
curl -X POST http://192.168.25.25:8090/services/monitor/clear_flip_error
# Clear Slide Error
WARNING
Experimental Feature
Error 2008 (slide error) indicates that the robot may have had a significant impact with an invisible obstacle. Manual inspection is required before clearing this error.
curl -X POST http://192.168.25.25:8090/services/monitor/clear_slipping_error
# Power On or Off the Lidar
curl -X POST \
-H "Content-Type: application/json" \
-d '{"action": "power_on"}' \
http://192.168.25.25:8090/services/baseboard/power_on_lidar
Parameters
class PowerOnRequest {
action: 'power_on' | 'power_off';
}
# Power On or Off the Depth Camera
curl -X POST \
-H "Content-Type: application/json" \
-d '{"enable": true}' \
http://192.168.25.25:8090/services/depth_camera/enable_cameras
Parameters
class EnableDepthCameraRequest {
enable: boolean;
}
# Configure Wi-Fi
Switches the Wi-Fi between Access Point (AP) and Station mode.
curl -X POST \
-H "Content-Type: application/json" \
-d '{"mode": "station", "ssid":"xxxxxxxxx", "psk": "xxxxx"}' \
http://192.168.25.25:8090/services/setup_wifi
Parameters
interface SetupWifiRequest {
mode: 'ap' | 'station';
ssid?: string; // SSID, required for station mode
psk?: string; // Wi-Fi Protected Access Pre-Shared Key, required for station mode
route_mode?:
| 'eth0_first'
| 'wlan0_first'
| 'usb0_first'
| 'wlan0_usb0_auto_first';
}
# Set Route Mode
Configures the routing table rules for the robot's chassis.
curl -X POST \
-H "Content-Type: application/json" \
-d '{"mode": "xxx"}' \
http://192.168.25.25:8090/services/set_route_mode
Parameters
interface RouteModeRequest {
mode: 'eth0_first' | 'wlan0_first' | 'usb0_first' | 'wlan0_usb0_auto_first';
}
route_mode: Determines the priority of network interfaces in the routing table:
eth0_first: Setseth0as the default route, if available.wlan0_first: Setswlan0as the default route, if available.usb0_first: Setsusb0as the default route, if available.wlan0_usb0_auto_first: Based onpingresults: ifwlan0has internet connectivity, it is used as the default route; otherwise,usb0is used.
A static HTML page for network configuration is also available on the local network at: http://192.168.25.25:8090/wifi_setup

# Wake Up the Device
Wakes the robot from its sleep state. If the robot is already awake, this command has no effect.
curl -X POST http://192.168.25.25:8090/services/wake_up_device
Monitor the Sensor Manager State WebSocket topic for sleep, awake, or awakening status.
# Start Global Positioning
curl -X POST \
-H "Content-Type: application/json"
http://192.168.25.25:8090/services/start_global_positioning
Parameters
interface StartGlobalPositioningRequest {
use_barcode?: boolean; // default to true.
use_base_map_match?: boolean; // default to true.
}
Feedback can be monitored via the Global Positioning State WebSocket topic.
# Barcode

A barcode is a marker composed of interleaved reflective and non-reflective surfaces. Each barcode at a site contains a unique ID, allowing the robot to determine its exact location unambiguously upon detection.
When use_barcode is set to true, it takes priority over point-cloud-based matching. Detected barcode matches are always considered highly reliable.
To utilize this feature, barcodes and their corresponding poses must be collected and added to the map's overlays.
# Auto-Mapping
WARNING
Experimental Feature
When auto-mapping is enabled, the robot will automatically explore and map its environment. This feature is only available while the robot is in mapping mode.
curl -X POST \
-H "Content-Type: application/json" \
-d '{"enable": true}' \
http://192.168.25.25:8090/services/enable_auto_mapping
Parameters
interface EnableAutoMappingRequest {
enable: boolean;
}
# Recheck Errors
POST /services/monitor_recheck_errors
# Calibrate Depth Cameras
This service aligns the point clouds from the depth cameras with the point cloud from the horizontal Lidar.
Before initiating calibration, ensure that:
- The robot is on a flat, level surface.
- The robot is facing a wall corner or a large, rectangular object.

POST /services/calibrate_depth_cameras
# Calibrate Gyroscope Scale
Initiates gyroscope scale calibration. The robot must remain perfectly still on a hard, flat surface during this process.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/imu/calibrate_gyro_scale
This service call only triggers the calibration; the actual process typically takes about 20 seconds to complete.
Once the calibration is finished, a notification will be sent via the /action WebSocket topic.
Sample Success Output:
{
"topic": "/action",
"timestamp": 1681733608.653,
"email": "",
"username": "",
"deviceName": "718220110000909",
"action": "calibrate_gyro_scale",
"message": "Gyroscope scale calibration succeeded"
}
Sample Failure Output:
{
"topic": "/action",
"timestamp": 1681733580.702,
"email": "",
"username": "",
"deviceName": "718220110000909",
"action": "calibrate_gyro_scale",
"message": "error: Gyroscope scale calibration failed. Please remove nearby obstacles."
}
# Reset USB Devices
Resetting the USB hub can sometimes help recover malfunctioning hardware devices.
The format "1/3" represents the bus_id/dev_id in the device tree. For more information, see List USB Devices.
curl -X POST \
-H "Content-Type: application/json" \
-d '{"devices_to_reset": ["1/3", "8/1"]}' \
http://192.168.25.25:8090/services/reset_usb_devices
# Clear "System Down Unexpectedly" Alert
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/clear_system_down_unexpectedly
# Clear "Range Data All Zero" Error
If all Lidar points return a value of 0, it indicates that the Lidar device is malfunctioning or failing.
This service temporarily clears the associated error message.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/clear_range_data_all_zero_error
# Jack Device Up, Down, Self-Check
Raise or lower the jack device. The state of the jack device is available via the WebSocket Jack State.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/jack_up
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/jack_down
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/jack_self_check
# Step Time
Use this service to correct the system time if it is inaccurate.
WARNING
GET is used to detect time errors. Do not call it frequently. Use the WebSocket /alerts topic instead to monitor time errors.
curl http://192.168.25.25:8090/services/step_time
{
"should_step": false, // No need to correct time
"message": "there is no need to make step: system time is 0.000253560 seconds fast of NTP time"
}
POST is used to correct the time.
curl -X POST http://192.168.25.25:8090/services/step_time
{
"message": "Step time successfully"
}
# Get Nav. Thumbnail
Since 2.8.0, requires caps.supportsGetNavThumbnail.
Retrieves an image snapshot of the robot and its surroundings, including the map, costmap, point cloud, and virtual walls.
The image is 200x200 pixels and can be used for error reporting.
![]()
{
"stamp": 1707211001,
"map_name": "Ground Floor",
"map_uid": "xxxxx",
"map_version": 3,
"overlays_version": 8,
"map": {
"resolution": 0.05,
"size": [200, 200],
"origin": [12.12345, -3.12345],
"data": "iVBORw0KGgoAAAANS..." // base64 encoded PNG
}
}
# Get RGB Image
Since 2.8.0, requires caps.supportsGetRgbImage.
Retrieves the latest image from an RGB camera. This is similar to the WebSocket RGB Image Stream but is more efficient for use cases that only require occasional images.
curl -X POST \
-H "Content-Type: application/json" \
-d '{"topic": "/rgb_cameras/front/compressed"}' \
http://192.168.25.25:8090/services/get_rgb_image
The response format is identical to the WebSocket topic.
# Load/Unload Cargo with Roller
Since 2.9.0.
The state of the roller is available via the WebSocket Roller State.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/roller_load
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/roller_unload
# Start Rack Size Detection
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/start_rack_size_detection
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/stop_rack_size_detection
Detect the width and depth of a rack using the robot's laser scanner.
WARNING
It is generally more accurate to refer to the rack's technical specifications or measure it manually with a ruler. Use this service only as a last resort.
Steps to use:
- Position the robot directly in front of the rack.
- Call
/start_rack_size_detection. - Subscribe to the /detected_rack WebSocket topic.
- Slowly push the robot under the rack.
- Once successfully detected, stop pushing and record the rack dimensions.
- Enter the width and depth into the system settings.
# Clear Jack Errors
The jack device will report an error if it becomes overloaded.
When this occurs, most jack models can still accept new commands. However, some rare models require errors to be cleared manually before they will accept further commands.
curl -X POST http://192.168.25.25:8090/services/clear_jack_errors
# Confirm Emergency Stop
When the robot is on a slope or in a designated slope area (specified in overlays), the wheels will not be released even if the emergency stop is pressed. A warning message will appear in the /alerts WebSocket topic:
If you need to push the robot manually, use the following command to confirm releasing the wheels.
curl -X POST http://192.168.25.25:8090/services/confirm_estop
# Calibrate Depth Camera Masks
Some depth cameras may capture parts of the robot's own body. This service identifies which pixels should be masked to prevent the robot from mistaking itself for an obstacle.
Before calibrating, place the robot in an open area with no obstacles in the field of view of any depth cameras.
curl -X POST http://192.168.25.25:8090/services/calibrate_depth_camera_masks
# Collect Landmarks
This service is used to collect landmarks for an existing map.
curl -X POST http://192.168.25.25:8090/services/start_collecting_landmarks
curl -X POST http://192.168.25.25:8090/services/stop_collecting_landmarks
The result is stored at:
curl http://192.168.25.25:8090/collected_data
The collected data serves as raw material. Developers must manually insert these landmarks into overlays for them to be used.
# Clear Fall Risk Warning
curl -X POST http://192.168.25.25:8090/services/clear_fall_risk_warning
# Query Pose
This API retrieves the coordinates of various points of interest (POIs).
For example, when the robot docks on a charger, it calculates the charger’s pose based on the robot’s position.
curl http://192.168.25.25:8090/services/query_pose/charger_pose
{
"pose": {
"pos": [4.179, -26.094],
"ori": 3.18,
}
}
Similarly, if a forklift is parked at a cargo location, the system can infer the location's pose from the forklift's current position.
curl http://192.168.25.25:8090/services/query_pose/pallet_pose
{
"pose": {
"pos": [4.179, -26.094],
"ori": 3.18,
},
// Since 2.13.0. If reference == 'center_of_front_edge', the returned pose is
// the center of the pallet's front edge (new logic).
// Otherwise, the pose is the center of the pallet (deprecated).
"ref": "center_of_front_edge"
}
# Probe V2X Beacons
This service sends messages to beacons to activate them for several seconds. This is useful for testing connectivity and triggering responses.
curl -X POST \
-H "Content-Type: application/json" \
http://192.168.25.25:8090/services/probe_v2x_beacons
Use the V2X Health State WebSocket topic to monitor beacon responses and health status.