Skip to content

2. Overview of the Software System

The robot is equipped with an x86_64 architecture industrial PC and an arm64 architecture AGX Jetson Orin industrial PC, referred to as x86 and orin, respectively. Both are installed with Ubuntu 22.04 and use systemd as the system service manager. Both are configured with agibot_em.service as the entry point for the Agibot software system. This service starts automatically on boot and launches the EM (process startup management) and SM (process status management) modules. The EM and SM then work together to start the remaining module processes. The SM manages the startup and shutdown states of the process list under different system modes (to avoid issues with shared memory resource anomalies caused by process start and stop, since version 1.3, the system mode switching no longer turns processes on and off but instead calls the activate and deactivate interfaces of the processes, which remain active).

The configuration file paths for EM and SM are /agibot/software/v0/entry/bin/cfg/run_agibot.yaml (for x86 & orin) and /agibot/software/v0/entry/bin/cfg/sm.yaml (for x86), respectively. The former lists the default processes to be started, while the latter lists which functional groups of processes are enabled under each system mode.

Some modules exist on both orin and X86, with a suffix of 1 for orin and 0 for X86.

Module TypeIndustrial PCNameDescription / Function
SoC External DevicesAimMasterClient SoftwareUsed to operate and control the robot’s basic functions
OMPZhiyuan Cloud PlatformResponsible for receiving and reporting edge-side embedded data
VRVirtual Reality DeviceUsed for robot teleoperation
MCUMicrocontroller UnitControls robot motors at the lower level; receives motor and IMU data; communicates upward with HAL EtherCAT to receive control commands and upload motor and IMU data
Common Services
Infrastructure Services
ORINMQTT broker (mosquitto)MQTT GatewayMQTT gateway node, interfacing with AimMaster and onboard software
data_exporterLog Export ServiceProvides batch and time-range log export capabilities
ORIN & X86iox_roudiIceoryx Shared Memory DaemonCentral scheduling node for iceoryx communication, providing shared memory storage locations
settingSettings ModuleProvides basic industrial PC settings such as Wi-Fi and Bluetooth
recordbagBag RecordingContinuously records bag files
rebootReboot CommandPerforms system reboot when invoked by SM
poweroffPower-off CommandExecutes system shutdown when invoked by SM
Management ModulesX86SMSystem State Management ModuleResponsible for switching system states and managing the process list
ORIN & X86EMProcess Management ModuleResponsible for launching processes and querying process status
Functional ModulesX86sota_ota
ota_gateway
ota_master
OTA Functional ModulesResponsible for downloading OTA packages and executing OTA workflows
hal_ethercatHardware Abstraction LayerHandles EtherCAT communication with the MCU, transmitting hardware status and control commands
mcMotion Control ModuleResponsible for overall robot motion control and issuing motion commands
motion_streamerMotion Streaming ModuleDedicated to teleoperation, mapping VR motion-capture suit data to robot motions
rcRemote Control ModuleProvides interfaces for AimMaster to call robot basic functions and status, and records related information into logs
motion_playerMotion Playback ModuleResponsible for solving, mapping, and playing specified motion files
tfCoordinate Transformation ModuleProvides coordinate transformation services
fota_slaveFirmware Upgrade ModuleResponsible for FOTA upgrade processes
health_monitorHealth Monitoring ModuleMonitors the health of all business modules and underlying hardware
legged_odometryPerception & Localization ModuleReads joint angles of each leg and IMU data to compute the robot pose, and sends it to navigation or control modules
open_long_serverPersistent Connection ServiceMaintains a 24-hour persistent connection, allowing external devices to remotely control the robot, issue real-time motion commands, or retrieve logs
hdsHealth Diagnosis ServiceReceives fault reports from various modules
ORINhal_audioAudio Playback ModuleProvides atomic audio playback capability for agent invocation
agentVoice Intelligent Agent ModuleExecutes voice large language models, handles cloud interaction logic, and issues speech, motion, and expression commands
task_engineTask Management ModuleResponsible for executing tasks created by AimMaster
pncPlanning and Navigation Control ModuleResponsible for navigation path planning
slam
agivslam
Mapping and Localization ModuleResponsible for mapping and localization
mmMap Management ModuleHandles map data loading and parsing, map fusion, and map updates
perception
perception_object
perception_qr
Perception ModulesCollects and processes navigation-related sensor data for pnc and operation modules
hal_dcw2
hal_d415
hal_lidar
hal_xinying (T3)
tz_camera (P1)
Sensor Driver ModulesLoads camera and sensor drivers and publishes raw image frames via ROS 2 topics
gatewayExternal Gateway CommunicationForwards external requests to internal modules
data_proxyData Transfer ModulePackages robot logs, status, video streams, and files for on-demand forwarding to cloud, host PC, or debugging tools; also distributes external upgrade packages, motion files, and configuration commands to corresponding modules
colistener
coencoder
cobridge
Data Closed-loop ModulesResponsible for closed-loop data interaction between the robot and cloud
embodied_agentEmbodied Intelligence Orchestration ModuleThe core intelligent controller of the robot, enabling it to understand, reason, and act correctly to accomplish high-level tasks
manipulatorEmbodied Execution ModuleProvides low-level atomic capabilities such as grasping and dispatching
skillpilotSkill Scheduling ModuleUnified management, arbitration, and scheduling of robot basic skills
resource_managerResource Management ModuleUnified management of onboard motion, expression, and audio resource files
|

The modules activated and started in each system mode are different, as shown below (excerpt from sm.yaml).

# System status
system_modes:
"Startup":
next_mode_list: [ "Ready", "OTA", "Poweroff" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "RC", "MoCap", "Gateway", "Perception", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
"Poweroff":
next_mode_list: []
active_FG_list: []
action_list:
- [ open Poweroff ]
"Reboot":
next_mode_list: []
active_FG_list: []
action_list:
- [ open Reboot ]
# The system's ready state, which starts the business management module and HAL
"Ready":
next_mode_list: [ "Manual", "EStop", "Poweroff" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ activate mc ]
- [ activate slam ]
- [ activate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- [ activate motion_player ]
# post_process:
# - level: 34
# action_list: [ [ forbid Manual ] ]
# OTA state, which starts the OTA functional group to complete OTA-related functions
"OTA":
next_mode_list: [ "Reboot", "Ready", "Poweroff" ]
active_FG_list: [ "System", "HAL", "Manager", "SLAM", "RC", "MoCap", "Gateway","Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ deactivate agent ]
- [ deactivate pnc ]
- [ deactivate mc ]
- [ deactivate slam ]
- [ deactivate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- [ deactivate motion_player ]
# Manual state, which starts the RC and MC functional groups
"Manual":
next_mode_list: [ "OTA", "Auto", "Reset", "EStop", "Calibration", "Poweroff", "MotionStream", "DataCollection", "FreeExploration", "Mapping", "Manipulator" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ activate mc ]
- [ activate slam ]
- [ activate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- [ activate motion_player ]
child_modes:
- mode_name: "Safety" # State entered by calling the enable script under tools
extra_next_modes: [ "OTA", "Reset" ]
action_list:
- [ deactivate rc ]
- [ close Motion ]
- [ close EStop ]
post_process:
- level: 47
action_list: [ [ fallback mc ] ]
# Mapping state
"Mapping":
next_mode_list: [ "Manual" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ activate mc ]
- [ activate slam ]
- [ deactivate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- [ activate motion_player ]
# Auto state, which starts the task engine and all business functional groups
"Auto":
next_mode_list: [ "Manual", "EStop", "Poweroff", "FreeExploration" ]
``` active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ activate mc ]
- [ activate slam ]
- [ activate perception ]
- [ deactivate rc ]
- [ activate task_engine ]
- [ activate motion_player ]
child_modes:
- mode_name: "Safety"
extra_next_modes: [ "OTA", "Reset" ]
action_list:
- [ deactivate task_engine ]
- [ close Motion ]
- [ close EStop ]
# post_process:
# # - level: 47
# # action_list: [ [ MAID ] ]
# # - level: 43
# # action_list: [ [ fallback motion_player ], [ fallback task_engine XXModule B ], [ Move Manual ] ]
# # - level: 40
# # action_list: [ [ MAID ] ]
# - level: 37
# action_list: [ [ fallback task_engine ], [ move Manual ] ]
# - level: 34
# action_list: [ [ fallback task_engine, fallback mc ] ]
# # - level: 31
# # action_list: [ [ MAID ] ]
# Embodied Operation Mode
"Manipulator":
next_mode_list: [ "OTA", "Reset", "EStop", "Poweroff", "FreeExploration", "Manual" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ activate mc ]
- [ activate slam ]
- [ activate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- [ deactivate motion_player ]
# Free Exploration Mode
"FreeExploration":
next_mode_list: [ "Manual", "EStop", "Poweroff", "Auto" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ activate mc ]
- [ activate slam ]
- [ activate perception ]
- [ deactivate rc ]
- [ activate task_engine ]
- [ activate motion_player ]
child_modes:
- mode_name: "Safety"
extra_next_modes: [ "OTA", "Reset" ]
action_list:
- [ deactivate task_engine ]
- [ close Motion ]
- [ close EStop ]
# Reset State, used for restoring factory settings
"Reset":
next_mode_list: [ "Reboot", "Poweroff" ]
active_FG_list: [ "System", "OTA", "Gateway" ]
action_list:
- [ DIFF ]
# Emergency Stop State, used for emergency stop
"EStop":
next_mode_list: [ "Ready", "OTA", "Poweroff" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ deactivate mc ]
- [ activate slam ]
- [ activate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- [ activate motion_player ]
# Safety State, used for safety state
# "Safe":
# next_mode_list: [ "Manual", "EStop", "Poweroff" ]
# active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoCap", "Gateway", "Perception", "Motion" ]
# action_list:
# - [ DIFF ]
# - [ deactivate mc, deactivate rc ]
# Real-time Remote Operation State, used for real-time remote operation```yaml
"MotionStream":
next_mode_list: [ "Manual", "EStop", "Poweroff", "RemoteMotionStream", "DataCollection" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoStream", "Gateway", "Motion", "Perception", "OTA" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 ]
- [ activate agent ]
- [ activate pnc ]
- [ deactivate mc ]
- [ activate slam ]
- [ activate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
"RemoteMotionStream":
next_mode_list: [ "Manual", "EStop", "Poweroff", "MotionStream" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoStream", "Gateway", "Motion", "Perception", "OTA", "RTC" ]
action_list:
- [ deactivate tz_camera ]
- [ deactivate hal_d415 ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ DIFF ]
- [ activate agent ]
- [ activate pnc ]
- [ deactivate mc ]
- [ activate slam ]
- [ activate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
# Calibration state, used for calibration, enter upon client request for calibration
"Calibration":
next_mode_list: [ "Ready" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "Gateway", "Motion", "Perception", "OTA", "Calibration" ]
action_list:
- [ DIFF ]
- [ activate recordbag0 ]
- [ activate recordbag1 ]
- [ activate tz_camera ]
- [ activate hal_d415 d415 Calibration ]
- [ deactivate agent ]
- [ deactivate pnc ]
- [ deactivate mc ]
- [ deactivate slam ]
- [ deactivate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
# post_process:
# # - level: 43
# # action_list: [ [ fallback calibration ] ]
# # - level: 37
# # action_list: [ [ fallback calibration ] ]
# - level: 34
# action_list: [ [ fallback task_engine, fallback mc ] ]
"DataCollection":
next_mode_list: [ "Manual", "EStop", "Poweroff", "MotionStream" ]
active_FG_list: [ "System", "HAL", "EStop", "Manager", "SLAM", "RC", "MoStream", "Gateway", "Motion", "Perception", "OTA", "Data_Collector" ]
action_list:
- [ DIFF ]
- [ deactivate recordbag0 ]
- [ deactivate recordbag1 ]
- [ activate tz_camera tzcamera DataCollection ]
- [ activate hal_d415 d415 DataCollection ]
- [ activate agent ]
- [ activate pnc ]
- [ deactivate mc ]
- [ activate slam ]
- [ deactivate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]

Due to the numerous features, ORIN now has a high load. If you need to replace certain functional modules through secondary development, you must configure the system so that the module does not start.

Modules are managed in two ways, depending on whether they are controlled by run_agibot.yaml (x86 & orin) or sm.yaml (orin). Modules managed by the former will start by default at startup and remain resident, unaffected by sm management. Modules managed by the latter will switch between different system modes.

  1. If you need to disable a module managed by run_agibot.yaml (i.e., part of default_apps), simply remove it from default_apps.
  2. If you need to disable a module managed by sm, add a line with deactivate in the corresponding system mode to specify the module to be disabled.

Taking the motion_play module as an example, follow the steps below to disable it. First, remove the motion_play module from the default_apps list in run_agibot.yaml (x86):

@@ -20,7 +20,6 @@ process_manager:
"iox_roudi",
"hal_ethercat",
"recordbag0",
- "motion_player",
"ota_gateway",
"ota_master",
"fota_slave",

Then, remove motion_player from the group in SystemManagerModule within sm.yaml (orin), update the MoCap configuration to empty, and remove the activate / deactivate operations for motion_player in all states.

@@ -14,7 +14,7 @@ SystemManagerModule:
- group: [ota_master, motion_player, motion_streamer, sota_slave0, mc, tf, dr, rc, hal_ethercat, poweroff0, reboot0, setting0, recordbag0, data_collector, health_monitor0]
+ group: [ota_master, motion_streamer, sota_slave0, mc, tf, dr, rc, hal_ethercat, poweroff0, reboot0, setting0, recordbag0, data_collector, health_monitor0]
url: "http://${AGIBOT_NEIGHBOR_HOST_IP}:50081"
@@ -40,7 +40,7 @@ SystemManagerModule:
"RC":
[ "rc" ]
"MoCap":
- [ "motion_player" ]
+ []
"MoStream":
[ "motion_streamer" ]
"Ready":
@@ -100,7 +100,6 @@ SystemManagerModule:
- [ activate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- - [ activate motion_player ]
"OTA":
@@ -122,7 +121,6 @@ SystemManagerModule:
- [ deactivate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- - [ deactivate motion_player]
"Manual":
@@ -140,7 +138,6 @@ SystemManagerModule:
- [ activate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- - [ activate motion_player ]
"Mapping":
@@ -169,7 +166,6 @@ SystemManagerModule:
- [ deactivate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- - [ activate motion_player ]
"Auto":
@@ -188,7 +184,6 @@ SystemManagerModule:
- [ activate perception ]
- [ deactivate rc ]
- [ activate task_engine ]
- - [ activate motion_player ]
"Manipulator":
@@ -227,7 +222,6 @@ SystemManagerModule:
- [ activate perception ]
- [ activate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- - [ deactivate motion_player ]
"FreeExploration":
@@ -246,7 +240,6 @@ SystemManagerModule:
- [ activate perception ]
- [ deactivate rc ]
- [ activate task_engine ]
- - [ activate motion_player ]
"EStop":
@@ -279,7 +272,6 @@ SystemManagerModule:
- [ activate perception ]
- [ deactivate rc ]
- [ deactivate task_engine TaskMaster cancel ]
- - [ activate motion_player ]

orin

X86