7.10 技能播放部分

7.10 技能播放部分

7.10.1 整体介绍

A3-Ultra机器人技能播放部分,依赖资源管理模块下导入的各类资源,包括动作、语音、表情等。用户可通过技能播放部分提供的二开接口进行动作播放、语音播放、表情播放等操作。

注意:各类资源的列表获取,可通过资源管理模块提供的获取资源列表接口进行查询。

7.10.2 动作播放/暂停/复位接口

接口名pb:/aimdk.protocol.MotionCommandService/SendMotionCommand
功能概述播放指定动作文件
接口类型HTTP JSON RPC
URLhttp://10.42.10.12:56444/rpc/aimdk.protocol.MotionCommandService/SendMotionCommand
入参
text
{
  "motion_id": "/agibot/data/resources/default/motion/握手/woshou1_Skeleton0.mcap",
  "duration_ms": 10000,
  "cmd_end": true,
  "cmd_pause": false,
  "cmd_reset": false,
  "cmd_repeat": false
}
  • motion_id: 动作文件的绝对路径
  • duration_ms:动作最长运行时间(ms)
  • cmd_end:是否在动作播放完成后自动恢复到初始姿态,true 表示自动复位
  • cmd_pause:暂停标志,true 表示暂停当前动作播放
  • cmd_reset:复位标志,true 表示立即中止当前动作并恢复到初始姿势
  • cmd_repeat:循环播放标志,true 表示动作播放完成后自动重复
出参
text
{
  "header": {
    "code": "0",
    "msg": "",
    "timestamp": {
      "seconds": "1762851946",
      "nanos": 693223585,
      "ms_since_epoch": "0"
    },
    "trace_id": "",
    "domin": ""
  },
  "state": "CommonState_SUCCESS"
}
  • state:调用请求状态,成功为 CommonState_SUCCESS,失败为 CommonState_FAILURE
示例脚本examples/skill_play/SendMotionCommand.py
备注
  • 播放、暂停、停止均通过同一接口 SendMotionCommand 实现,通过不同字段控制行为
  • 动作资源可通过创建资源导入

7.10.3 播放语音

接口名pb:/aimdk.protocol.HalAudioService/PlayFile
功能概述播放指定音频文件
接口类型 HTTP JSON RPC
URLhttp://10.42.10.10:56666/rpc/aimdk.protocol.HalAudioService/PlayFile
入参播放 wav 文件(推荐):
text
{
  "header": {
    "timestamp": {
      "seconds": "0",
      "nanos": 0,
      "ms_since_epoch": "0"
    }
  },
  "pkg_name": "",
  "file_name": "Ding.wav",
  "file_path": "",
  "priority": "DEFAULT",
  "priority_weight": 0,
  "channles": 0,
  "samplerate": 0
}
播放 pcm 文件(需指定声道和采样率):
text
{
  "header": {
    "timestamp": {
      "seconds": "0",
      "nanos": 0,
      "ms_since_epoch": "0"
    }
  },
  "pkg_name": "",
  "file_name": "wake.pcm",
  "file_path": "",
  "priority": "DEFAULT",
  "priority_weight": 0,
  "channles": 1,
  "samplerate": 24000
}
  • header:请求头,可选
  • pkg_name:调用方标识字符串,可选,传入后会在出参中原样返回,用于日志追踪
  • file_name:音频文件名,服务端会在 /agibot/data/var/hal_audio/file/ 目录下查找该文件
  • file_path:文件路径,可选
  • priority:播放优先级,可选,支持枚举名称,取值默认为0、L1(1)-L10(10),数值越大优先级越高,高优先级会打断低优先级正在播放的音频。最终优先级 = PlayPriority × 100 + priority_weight
  • priority_weight:优先级加权参数(0-99),可选,非产品需求勿用
  • channles:声道数,音频文件是.wav时可选
  • samplerate:采样率,音频文件是.wav时可选
出参
text
{
  "pkg_name": "",
  "is_success": true
}
  • pkg_name:调用方标识,与入参中传入的值一致
  • is_success:请求是否被接受
示例脚本examples/skill_play/PlayFile.py
备注
  • 音频文件需提前放置在 /agibot/data/var/hal_audio/file/ 目录下
  • 支持 wav 和 pcm 格式;wav 文件自带格式头可直接播放,pcm 文件必须传入 channles 和 samplerate 参数,否则会报错 plz update file channels info

7.10.4 停止语音

接口名pb:/aimdk.protocol.HalAudioService/StopPlay
功能概述停止当前正在播放的音频
接口类型 HTTP JSON RPC
URLhttp://10.42.10.10:56666/rpc/aimdk.protocol.HalAudioService/StopPlay
入参
text
{}
  • 传入空请求体即可停止当前播放
出参
text
{
  "pkg_name": "",
  "is_success": true
}
  • is_success:停止操作是否成功
示例脚本examples/skill_play/StopPlay.py
备注
  • 调用后立即停止当前正在播放的音频

7.10.5 表情播放

接口名/skill/pilot/face/play
功能概述用于播放表情
接口类型 ros2 topic
入参
text

{
  "header": {
    "timestamp": {
      "seconds": 1763681490,
      "nanos": 943287000,
      "ms_since_epoch": 1763681490943
    },
  },
    "e_path": "/agibot/data/resources/default/emoticon/disable_voice/emoticon.mp4",
    "e_id": 15,
    "repeat": 1,
    "priority": 440,
    "is_stop": False
}
  • e_path:表情文件所在目录,需填入绝对路径
  • e_id:表情资源id,在GetResourceList接口获取,可不填
  • Repeat: 重播次数
  • Priority : 优先级,填入440即可,数值越小优先级越高
  • is_stop: 此字段用于展示或取消展示,会取消所有表情播放, 当取消的场景,e_path、e_id、repeat、priority 均可以为空
示例脚本examples/skill_play/face_play.py
备注
  • 该消息的ROS2 类型为 ros2_plugin_proto/msg/RosMsgWrapper,需要 source prebuilt/ros2_plugin_proto_aarch64/share/ros2_plugin_proto/local_setup.bash 后使用
  • 该消息默认以iceoryx形式传输,如要使用ros2 topic形式数据,需登录mdu,修改/agibot/software/v0/config/skillpilot/skillpilot.yaml下 aimrt/channel/sub_topics_options中的/skill/pilot/face/play通信形式为[ mqtt, ros2 ]。修改完毕后重启机器人即可生效。
  • 表情列表可通过资源列表获取

7.10.6 技能状态接口

接口名/skill/pilot/skill_status
功能概述技能状态接口
接口类型 ros2 topic
出参
text

{
    "core": 3,
    "battery": 0,
    "auto_charging": 1,
}
  • core值部分意义如下,其余值含义不过多展示:
CoreState_Working =CoreState_Initial
CoreState_Avatar = 6; // 身外化身
CoreState_Collecting = 9; // 数采
CoreState_MapBuilding = 13; // 建图中
  • battery值部分意义如下,其余值含义不过多展示:
BatteryState_DualBattery_NotCharging_Normal = 6;
BatteryState_DualBattery_NotCharging_LowPower = 7;
BatteryState_DualBattery_Charging = 8;
BatteryState_SingleBattery_NotCharging = 9;
BatteryState_SingleBattery_Charging = 10;
BatteryState_NoBattery_Charging = 11;
  • auto_charging值意义如下:
AutoChargingState_Idle = 1; // 空闲就绪
AutoChargingState_Navigating = 2; // 导航中
AutoChargingState_NaviSuccess = 3; // 导航成功
AutoChargingState_NaviFailed = 4; // 导航失败
AutoChargingState_Plugging = 5; // 插枪中
AutoChargingState_PlugSuccess = 6; // 插枪成功
AutoChargingState_PlugFailed = 7; // 插枪失败
AutoChargingState_Charging = 8; // 充电中
AutoChargingState_Unplugging = 9; // 拔枪中
AutoChargingState_UnplugSuccess = 10; // 拔枪成功
AutoChargingState_UnplugFailed = 11; // 拔枪失败
AutoChargingState_Finished = 12; // 自主充电流程完成
AutoChargingState_Failed = 13; // 自主充电整体失败
示例脚本examples/skill_play/skill_status.py
备注
  • 该消息的ROS2 类型为 ros2_plugin_proto/msg/RosMsgWrapper,需要 source prebuilt/ros2_plugin_proto_aarch64/share/ros2_plugin_proto/local_setup.bash 后使用
  • 此处仅展示部分重要出参,其余出参无需关注
  • 该消息默认以iceoryx形式传输,如要使用ros2 topic形式数据,需登录mdu,修改/agibot/software/v0/config/skillpilot/skillpilot.yaml下 aimrt/channel/pub_topics_options中的/skill/pilot/sskill_status通信形式为[ mqtt, ros2 ]。修改完毕后重启机器人即可生效。

7.10.7 自主充电接口

接口名pb:/aimdk.protocol.SkillPilotService/AutoCharging
功能概述自主充电接口
接口类型 RPC
入参
text

{
    "header": 3,
    "command": 1,
    "trigger": 3,
}
  • commd值意义如下:
AutoChargingCommand_START = 1; // 启动自主充电
AutoChargingCommand_STOP = 3; // 停止/结束(导航中:停止导航停在原地;插枪中:完成插枪后拔枪;充电中:拔枪;拔枪中:不动作)
AutoChargingCommand_RESET = 4; // 失败复位(在Stop调用完后调用,恢复自主充电到Idle状态,不调用的话,会10s自动恢复)
  • trigger值意义如下:
AutoChargingTrigger_AGENT = 1; // agent(语音/智能体发起)
AutoChargingTrigger_AIMMASTER = 2; // AimMaster(App 手动点击)
AutoChargingTrigger_LOW_POWER = 3; // 低电量自动触发
AutoChargingTrigger_IDLE_TIMEOUT = 4; // 长时间待机自动触发
出参
text
{
  "available_time": "",
  "session_id": ""
}
  • session_id:若技能正确安排,则有uuid
示例脚本examples/skill_play/auto_charging.py
备注
  • 该消息的ROS2 类型为 ros2_plugin_proto/msg/RosMsgWrapper,需要 source prebuilt/ros2_plugin_proto_aarch64/share/ros2_plugin_proto/local_setup.bash 后使用
  • 此处仅展示部分重要出参,其余出参无需关注

7.10.8 舞蹈播放接口

接口名pb:/aimdk.protocol.SkillPilotService/SkillPackage
功能概述舞蹈播放接口
接口类型 rpc
入参
text

{
    "source": "custom",
    "command": "Start",
    "path": "/agibot/data/resources/default/skill/查尔斯顿舞",
    "session_id":"" 
}
  • source:仅用于打印,填写custom即可
  • command:可填入三个值,Start,Pause,Stop
  • path:舞蹈资源的路径,可在资源管理部分获取相关信息
  • session_id:技能会话id,主要用于暂停和结束
出参
text
{"header":{
    "code":"0",
    "msg":" transition succeed",
    "trace_id":"",
    "domin":"skillpilot"},    
 "available_time":"0",
 "session_id":"ae82ee85-e90e-4802-87bd-f1e2ad09874c"}
示例脚本examples/skill_play/dance_play.py
备注
  • 调用接口时,请保持机器人周围两米内无障碍