7.1 运动控制部分
7.1 运动控制部分
Section titled “7.1 运动控制部分”7.1.1 整体介绍
Section titled “7.1.1 整体介绍”A3-Ultra 机器人出厂预搭载了运动控制程序,用户只需发送高层指令即可直接控制机器人行走,无需开发行走等功能的底层控制模型。
智元运控程序内部设计了状态机,在不同状态下会切换不同的模型。状态机如下图所示:

对于各个状态说明如下:
| Action 类型 | Action 代码 | 中文名称 | 详细说明 | 可调用的控制接口 |
|---|---|---|---|---|
| 安全 Action | PASSIVE | 默认模式 | 运控启动之后的默认 action | |
| 安全 Action | DAMPING | 阻尼模式 | 关节也可以认为移动,但是高阻尼,可固定 | |
| 位控 Action | PD_STAND | 位控站立模式 | 机器人位控站立,进入力控模式前关节初始化 | |
| 力控 Action | MOTION | 运动模式 | 该模式下可以行走,做上肢动作,跳舞等 |
|
| 力控 Action | SIT_DOWN | 坐下模式 | 与STAND_UP模式联用 | |
| 力控 Action | STAND_UP | 站起模式 | 与SIT_DOWN模式联用 | |
| 力控 Action | LIE_DOWN | 躺下模式 | 与GET_UP模式联用 | |
| 力控 Action | GET_UP | 起身模式 | 与LIE_DOWN模式联用 | |
| 力控 Action | PACKAGE_LIE_DOWN | 包装箱趟入模式 | 与PACKAGE_GET_UP模式联用 | |
| 力控 Action | PACKAGE_GET_UP | 包装箱起身模式 | 与PACKAGE_LIE_DOWN模式联用 |
一般情况下不推荐使用程序进行力控之外的切换,仅推荐程序在各个力控状态下切换,其余切换因涉及机器人吊起放下等操作仅可手动操作。
控制类接口一般有 Action 要求,未注明 Action 要求的接口以及查询类接口一般无 Action 限制。
机器人除行走控制命令外,其余关节控制topic接口默认情况下均被motion_player模块占用,下发关节控制命令前需关闭motion_player模块。命令如下:
关闭motion_player命令 curl -i \ -H 'content-type:application/json' \ -X POST 'http://127.0.0.1:50080/json/stop_app' \ -d '{"app_name": "motion_ player"}'重启motion_player命令 curl -i \ -H 'content-type:application/json' \ -X POST 'http://127.0.0.1:50080/json/start_app' \ -d '{"app_name": "motion_ player"}'注意关闭motion_player模块后无法播放资源管理模块中的动作内容
7.1.2 状态机切换、查询 RPC 接口
Section titled “7.1.2 状态机切换、查询 RPC 接口”| 接口名 | pb:/aimdk.protocol.MotionControlActionService/SetAction |
|---|---|
| 功能概述 | 切换运动控制状态机 |
| 接口类型 | HTTP JSON RPC |
| URL | http://10.42.10.12:56322/rpc/aimdk.protocol.MotionControlActionService/SetAction |
| 入参 |
|
| 出参 |
|
| 示例脚本 | examples/mc/S_SetAction.py |
| 备注 |
|
| 接口名 | pb:/aimdk.protocol.MotionControlActionService/GetAction |
|---|---|
| 功能概述 | 查询运动控制状态机 |
| 接口类型 | HTTP JSON RPC |
| URL | http://10.42.10.12:56322/rpc/aimdk.protocol.MotionControlActionService/GetAction |
| 入参 | |
| 出参 |
|
| 示例脚本 | example/mc/S_GetAction.py |
| 备注 |
|
7.1.3 机器人可用Action 查询 RPC 接口
Section titled “7.1.3 机器人可用Action 查询 RPC 接口”| 接口名 | pb:/aimdk.protocol.MotionControlActionService/GetAvailableActions |
|---|---|
| 功能概述 | 获取可用动作 |
| 接口类型 | HTTP JSON RPC |
| URL | http://10.42.10.12:56322/rpc/aimdk.protocol.MotionControlActionService/GetAvailableActions |
| 入参 | |
| 出参 |
|
| 示例脚本 | examples/mc/S_SetAction.py |
| 备注 | 一般会通过GetAvailableActions接口查询当前可切换action状态,再通过SetAction接口设置action状态 |
7.1.4 行走控制指令 Topic 接口
Section titled “7.1.4 行走控制指令 Topic 接口”| 接口名 | /motion/control/locomotion_velocity |
|---|---|
| 功能概述 | 行走控制指令 |
| 接口类型 | ROS2 Topic |
| 入参 |
|
| 示例脚本 | examples/mc/walk.py |
| 备注 |
|
7.1.5 手臂控制指令、状态 Topic 接口
Section titled “7.1.5 手臂控制指令、状态 Topic 接口”| 接口名 | /motion/control/arm_joint_command |
|---|---|
| 功能概述 | 手臂关节控制指令 |
| 接口类型 | ROS2 Topic |
| 入参 | sensor_msgs::msg::JointState
|
| 示例脚本 | examples/mc/arm.py |
| 备注 |
|
| 接口名 | /motion/control/arm_joint_state |
|---|---|
| 功能概述 | 手臂关节状态话题 |
| 接口类型 | ROS2 Topic |
| 出参 | sensor_msgs::msg::JointState
|
| 示例脚本 | examples/mc/joint_state.py |
| 备注 | 本接口无 Action 限制 |
7.1.4 腰部姿态控制 Topic 接口
Section titled “7.1.4 腰部姿态控制 Topic 接口”| 接口名 | /motion/control/move_waist |
|---|---|
| 功能概述 | 腰部姿态控制 |
| 接口类型 | ros2 topic |
| 入参 |
double waist_roll // range: [-0.3, 0.3] 单位:弧度 double waist_yaw // range: [-1.57, 1.57] 单位:弧度 double waist_height // range: [-0.4, 0.0] 单位:米 |
| 示例脚本 | examples/mc/move_waist.py |
| 备注 |
|
7.1.5 脖子控制指令、状态 Topic 接口
Section titled “7.1.5 脖子控制指令、状态 Topic 接口”| 接口名 | /motion/control/neck_joint_command |
|---|---|
| 功能概述 | 脖子控制指令 |
| 接口类型 | ROS2 Topic |
| 入参 | sensor_msgs::msg::JointState
|
| 示例脚本 | examples/mc/neck.py |
| 备注 |
|
| 接口名 | /motion/control/neck_joint_state |
|---|---|
| 功能概述 | 脖子状态话题 |
| 接口类型 | ROS2 Topic |
| 出参 | sensor_msgs::msg::JointState
|
| 示例脚本 | examples/mc/joint_state.py |
| 备注 |
|