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 orin), 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 NatureHost ComputerNameDescription/Function
SoC External DevicesAimMasterClient SoftwareUsed to operate and control the basic functions of the robot
OMPAgibot Cloud PlatformResponsible for collecting and reporting endpoint-side telemetry data
VRVirtual Reality DeviceUsed for remote operation of the robot
MCUMicrocontrollerControls the robot’s motors, receives motor and IMU information, communicates with HAL Ethercat to receive control commands, and uploads motor and IMU information
Public Services Basic ServicesORINMQTT broker (mosquitto)MQTT GatewayAn MQTT gateway node that interfaces with AimMaster and onboard software
data_exporterLog Export FunctionProvides batch and time-segmented log export features
ORIN & X86iox_roudiiceoryx Shared Memory Central NodeManages the central scheduling of iceoryx communication and provides storage locations for data
settingSettings ModuleProvides basic settings for the robot’s industrial PC, such as Wi-Fi, Bluetooth, etc.
recordbagBag RecordingUsed to continuously record bag files
rebootReboot CommandReboots the system when called by SM
poweroffShutdown CommandShuts down the system when called by SM
Management ModulesORINSMSystem State Management ModuleManages system state switching and process list control
Function ModuleX86sota_ota ota_gateway ota_masterOTA Related Function ModuleResponsible for downloading OTA packages and executing the OTA process
hal_ethercatHardware Abstraction Layer ModuleResponsible for EtherCAT communication with the MCU, transmitting hardware status information and control instructions
mcMotion Control ModuleResponsible for the overall motion control of the robot, issuing motion control commands
motion_streamerMotion Streamer ModuleSpecifically used for remote operation, accepting VR motion capture data and mapping it to the robot’s actions
rcRemote Control ModuleProvides an interface for AimMaster to call basic functions and status of the robot, and records relevant information to the log
motion_playerMotion Playback ModuleResponsible for calculating, mapping, and playing specified motion files
tfCoordinate Transformation ModuleProvides coordinate transformation services
fota_slaveFirmware Upgrade ModuleResponsible for FOTA upgrade functionality
health_monitorHealth Monitoring ModuleMonitors the health of all business modules and underlying hardware
legged_odometryPerception and Localization ModuleResponsible for reading the joint angles and IMU data of each leg to obtain the pose in the robot’s coordinate system, and sending it to the navigation or control module
open_long_serverLong Connection Process ModuleMaintains a 24/7 connection channel, allowing external devices to remotely control the robot, issue real-time actions, or pull logs
ORINhal_audioAudio Playback ModuleProvides atomic audio playback capabilities for the agent to call
agentVoice Agent ModuleExecutes large language models, cloud interaction logic, and issues language, motion, and expression commands
task_engineTask Management ModuleResponsible for executing tasks created by AimMaster, etc.
pncNavigation Planning ModuleHandles navigation path planning
slam agivslamMapping and Localization ModuleResponsible for mapping, localization, and related functions
mmMap Management ModuleManages map data loading and parsing, integrates and updates constructed maps
perception perception_object perception_qrPerception ModuleCollects and processes navigation-related sensor information to provide to the pnc and other operation modules
hal_dcw2 hal_d415 hal_lidar hal_xinying(T3) tz_camera(P1)Sensor Driver ModuleLoads drivers for various cameras and publishes raw image frames via ros2 topics
gatewayExternal Gateway CommunicationForwards external requests to internal modules
data_proxyData Transfer ModulePacks and forwards logs, status, video streams, and files from the robot to the cloud, upper computer, or debugging tools; also distributes incoming upgrade packages, action files, and configuration commands to the corresponding modules.
colistener coencoder cobridgeData Loop-RelatedManages data loops between the robot and the cloud, etc.
embodied_agentEmbodied Operation Scheduling ModuleActs as the intelligent main controller of the robot, responsible for understanding, reasoning, and performing specific tasks assigned by the upper layer.
manipulatorEmbodied Operation Execution ModuleProvides low-level capabilities such as grasping and dispatching
skillpilotSkill Scheduling ModuleManages, arbitrates, and schedules the robot’s basic skills
resource_managerResource Management ModuleManages on-board resources such as actions, expressions, and broadcast files uniformly

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