倒地起身功能操作说明
功能概述
- 机器人正常时时是STANDING状态
- 在机器人检查到倒地之后(目前仅通过姿态检查来判断倒地),进入倒地起身的状态流转,从STANDING->FALL_DOWN
- 此时按下北通遥控器的"RB+BUTTON_X",跳转到READY_FOR_STAND_UP状态,机器人开始插值回到起身初始姿态
- 完成插值后,再次按下"RB+BUTTON_X",跳转到STAND_UP状态,机器人开始执行起身动作
- 起身动作完成后,机器人自动恢复到STANDING状态
- 如果起身过程再次摔倒或者没起来,可以重新从FALL_DOWN状态开始
- 运行
load_kuavo_real.launch,传入init_fall_down_state:=true, 可以让机器人在初始化时就平躺在地上,从FALL_DOWN倒地状态开始站起来 - 如果想手动触发倒地起身过程,通过遥控器按"RB+BUTTON_B",注意机器人所有电机会全身断电进入倒地状态,之后按上述到底起身流程即可重新起来。
状态转换流程图
正常运行(STANDING)
↓ (检测到倒地 / 手动设置掉电状态)
倒地状态(FALL_DOWN)
↓ (触发起身服务 - 第一次调用)
准备起身(READY_FOR_STAND_UP) ← 关节姿态插值
↓ (插值完成)
执行起身(STAND_UP) ← 执行RL轨迹
↓ (轨迹执行完成)
正常站立(STANDING)
ROS服务接口
1. 设置倒地状态(手动设置掉电状态)
服务名称:/humanoid_controller/set_fall_down_state
服务类型:std_srvs/SetBool
功能:手动设置机器人的倒地状态
参数:
request.data(bool):true→ 设置为 FALL_DOWN (1)false→ 设置为 STANDING (0)
响应:
response.success(bool): 操作是否成功response.message(string): 状态描述信息
使用示例:
# 设置为倒地状态
rosservice call /humanoid_controller/set_fall_down_state "data: true"
# 设置为站立状态
rosservice call /humanoid_controller/set_fall_down_state "data: false"
2. 触发倒地起身过程
服务名称:/humanoid_controller/trigger_fall_stand_up
服务类型:std_srvs/Trigger
功能:触发机器人倒地起身过程,根据当前状态执行不同动作
行为逻辑:
| 当前状态 | 触发效果 | 响应信息 |
|---|---|---|
| FALL_DOWN | 切换到 READY_FOR_STAND_UP 关闭自动步态模式 重置运动轨迹 计算Yaw偏移 | success: true message: "Fall stand up process triggered successfully" |
| READY_FOR_STAND_UP | 切换到 STAND_UP 重置运动轨迹 重新计算Yaw偏移 启动RL推理 | success: false message: "Stand up process is already in progress" |
| STAND_UP | 不执行操作(起身进行中) | success: false message: "Stand up process is already in progress" |
| STANDING | 不执行操作(非倒地状态) | success: false message: "Robot is not in fall down state, current state: 0" |
使用示例:
# 第一次调用:FALL_DOWN → READY_FOR_STAND_UP
rosservice call /humanoid_controller/trigger_fall_stand_up "{}"
# 等待插值完成后,第二次调用:READY_FOR_STAND_UP → STAND_UP
rosservice call /humanoid_controller/trigger_fall_stand_up "{}"