Upper Body Teleoperation Task State
The Upper Body Teleoperation Task state runs upper_body_tele_task and forwards external joint, end-effector, and wheeled-base commands to GR-W.
State Details
| State Name | Task Name | Joystick Mapping | DDS Mapping | Frequency |
|---|---|---|---|---|
| UserController_B | upper_body_tele_task | RB+B | 4 | 500Hz |
| Available when Hanging | Available when Standing | Automatic Protection Switch |
|---|---|---|
| Yes | Yes | No |
Joystick Control
Enter Upper Body Teleoperation Task State
After initializing AuroraCore, press the shoulder button RB and button B simultaneously.
Client Control
| Velocity Control | Stand Pose Control | Joint Control | Joint Parameter Control |
|---|---|---|---|
| Yes | No | Waist, head, arms, end effectors | No |
Enter Upper Body Teleoperation Task State
A True return from set_fsm_state() only means the request was accepted; confirm by reading back. In state 4, get_upper_fsm_state() stays 0 (Default); set_upper_fsm_state() returns False in both states 3 and 4 — do not use it as a replacement for the whole-body switch.
import os
import time
os.environ.setdefault("FASTDDS_BUILTIN_TRANSPORTS", "UDPv4") # required on the robot
from fourier_aurora_client import AuroraClient
client = AuroraClient.get_instance(domain_id=123, robot_name="grw")
try:
time.sleep(1.0)
print(f"before: {client.get_fsm_state()} ({client.get_fsm_name()})")
if not client.set_fsm_state(4):
raise RuntimeError("state change request not accepted")
deadline = time.monotonic() + 4.0
while client.get_fsm_state() != 4:
if time.monotonic() >= deadline:
raise RuntimeError("did not switch to upper_body_tele_task")
time.sleep(0.05)
print(f"after: {client.get_fsm_state()} ({client.get_fsm_name()})")
finally:
client.close()
Joint Control
Use set_group_cmd to send position, velocity, and torque commands. Every command must include all joints in the target control group.
upper_body_tele_task expects a continuous joint command stream (100 Hz recommended). Once you stop sending, uncommanded joints slowly droop under gravity (up to 0.09 rad within 1 s): either keep streaming target positions for all controlled groups, or switch back to state 3 promptly. get_group_motion_state() stays 0 (idle) during streaming and cannot be used to detect motion completion.
Available control groups: waist, head, left_manipulator, right_manipulator
End effectors: left_end_effector, right_end_effector
The waist has five degrees of freedom. Its safe default position is [-1.25, 2.15, -0.918, 0, 0]; never command all waist joints to zero.