跳到主要内容

倒地起身功能操作说明

功能概述

  • 机器人正常时时是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 "{}"