跳转到内容

3. 软件系统概述

机器人搭载一台 x86_64 架构工控机,安装有 Ubuntu 22.04 系统,使用 systemd 作为系统服务管理器,配置 agibot_em.service 作为智元软件系统入口点,该服务开机自启,会拉起 EM(进程启动管理)、SM(进程状态管理)模块,再由 EM 和 SM 配合拉起其余各个模块进程,SM 会对不同系统模式下的进程列表进行开启和关闭的状态管理。 EM 和 SM 的配置文件路径分别为 /agibot/software/v0/entry/bin/cfg/run_agibot.yaml/agibot/software/v0/entry/bin/cfg/sm.yaml,前者列有默认启动的进程列表,后者列有各个系统模式分别启用哪些功能组的进程。

下图中列出了机上主要进程的逻辑布局,仅展示主要交互关系,且并非所有进程都在同一时刻启动。

下表为图中名词解释:

名称说明/作用
AimMaster客户端软件用于操作机器人基本功能
OMP智元云端平台负责接收端侧埋点信息上报
Speaker扬声器用于播放声音
VR虚拟现实设备用于机器人遥操作
MCU微控制器对下控制机器人电机、接收电机和IMU 等信息,对上与 HAL Ethercat 通信接收控制指令,上传电机和IMU 等信息
MQTT BrokerMQTT 网关网关节点,对接 AimMaster 和机上软件接口
em进程管理模块负责拉起进程,查询进程状态等
sm系统状态管理模块负责切换系统状态,管控进程列表
iox_roudiiceoryx 共享内存中心节点负责 iceoryx 通信的中心调度等
ota_mastersota_slave0ota_gatewayOTA 相关功能模块负责下载 OTA 包以及执行 OTA 流程
recordbag0数据录制模块负责录制诊断数据包
setting系统设置模块负责 WIFI、音量等设备设置等
osmonitor系统监控模块监控系统资源占用、基本运行情况等
resource_manager资源管理模块同一管理机上动作
skillpilot技能调度模块对机器人基本技能进行统一管理仲裁调度
data_exporter数据导出模块负责压缩、导出诊断数据包
reboot0重启脚本由 sm 调用时对系统进行重启
hds健康诊断模块接收各个模块上报的故障信息
Interaction语音交互模块仅用于播放音乐、提示语等,不执行大模型等交互功能
rc遥控模块为 AimMaster 提供接口调用机器人基本功能,例如表情、动作、行走等
motion_player动作播放模块负责播放指定的动作文件
motion_streamer动作流模块专用与遥操作,接受 VR、动捕服数据映射为机器人上肢关节动作
gateway网关模块将外部请求转发到内部各个模块上,主要来自 AimMaster
mc运动控制模块负责整个机器人的运动控制
hal_ethercat硬件抽象层模块负责与 MCU 进行 ethercat 通信,传递硬件状态和指令
elink_log_dumpethercat 通信日志模块负责落盘 hal_ethercat 与 MCU 的通信日志

在不同的系统模式下会启用不同的功能组软件,具体情况如下(摘录自 /agibot/software/v0/entry/bin/cfg/sm.yaml):

system_modes:
"Startup": # 状态名
next_mode_list: [ "Ready", "OTA", "Poweroff" ] # 可流转状态列表
active_FG_list: [ "System", "EStop", "RC", "MoCap", "Gateway" ] # 需要维持的功能组列表
action_list:
- [ DIFF ]
"Poweroff":
next_mode_list: []
active_FG_list: []
action_list:
- [ open Poweroff ]
"Reboot":
next_mode_list: []
active_FG_list: []
action_list:
- [ open Reboot ]
"Ready":
next_mode_list: [ "Manual", "EStop", "Poweroff" ]
active_FG_list: [ "System", "EStop", "RC", "MoCap", "Gateway" ]
action_list:
- [ DIFF ]
"OTA":
next_mode_list: [ "Reboot", "Ready", "Poweroff" ]
active_FG_list: [ "System", "OTA", "Gateway" ]
action_list:
- [ DIFF ]
"Manual":
next_mode_list: [ "OTA", "Auto", "Reset", "EStop", "Poweroff", "Safe", "MotionStream" ]
active_FG_list: [ "System", "EStop", "RC", "MoCap", "Gateway", "Motion" ]
action_list:
- [ DIFF ]
- [ activate rc ]
post_process:
- level: 47
action_list: [ [ fallback mc ] ]
"Reset":
next_mode_list: [ "Reboot", "Poweroff" ]
active_FG_list: [ "System", "OTA", "Gateway" ]
action_list:
- [ DIFF ]
"EStop":
next_mode_list: [ "Ready", "OTA", "Poweroff" ]
active_FG_list: [ "System", "EStop", "RC", "MoCap", "Gateway" ]
action_list:
- [ DIFF ]
"Safe":
next_mode_list: [ "Manual", "EStop", "Poweroff" ]
active_FG_list: [ "System", "EStop", "Gateway", "Motion", "RC", "MoCap"]
action_list:
- [ DIFF ]
- [ deactivate mc, deactivate rc ]
# 实时遥操作状态,用于实时遥操作
"MotionStream":
next_mode_list: [ "Manual", "EStop", "Poweroff" ]
active_FG_list: [ "System", "EStop", "RC", "Gateway", "Motion", "MoStream" ]
action_list:
- [ DIFF ]
- [ activate rc ]

开机时会完成从 Startup 到 Ready 再到 Manual 的流转,流转到 Manual 时可认为机器人机上软件初始化完成。