GRW Policy Task State
The GRW Policy Task state runs grw_policy_task to control the wheeled base, waist, arms, and end effectors.
State Details
| State Name | Task Name | Joystick Mapping | DDS Mapping | Frequency |
|---|---|---|---|---|
| UserController_A | grw_policy_task | RB+A | 3 | 50Hz |
| Available when Hanging | Available when Standing | Automatic Protection Switch |
|---|---|---|
| No | Yes | No |
Joystick Control
Enter GRW Policy Task State
After initializing AuroraCore, press the shoulder button RB and button A simultaneously.
Velocity Control
Use the joysticks to control the wheeled base's forward, lateral, and yaw velocities.
Stand Pose Control
Use the D-pad to adjust the policy task's height and pitch inputs.
Client Control
| Velocity Control | Stand Pose Control | Joint Control | Joint Parameter Control |
|---|---|---|---|
| Yes | Not effective in the current deployment | Waist, arms, end effectors | No |
Enter GRW Policy Task State
A True return from set_fsm_state() only means the request was accepted; state feedback usually updates within about 50 ms, but you should still confirm by reading back.
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(3):
raise RuntimeError("state change request not accepted")
deadline = time.monotonic() + 4.0
while client.get_fsm_state() != 3:
if time.monotonic() >= deadline:
raise RuntimeError("did not switch to grw_policy_task")
time.sleep(0.05)
print(f"after: {client.get_fsm_state()} ({client.get_fsm_name()})")
finally:
client.close()
Velocity Control
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)
if not client.set_velocity_source(2):
raise RuntimeError("velocity source request not accepted")
deadline = time.monotonic() + 2.0
while client.get_velocity_source() != 2:
if time.monotonic() >= deadline:
raise RuntimeError("velocity source did not switch to Navigation")
time.sleep(0.05)
client.set_velocity(0.2, 0.0, 0.0, 2.0) # move forward at 0.2 m/s, auto-stop after 2 s
time.sleep(2.0)
client.set_velocity(0.0, 0.0, 0.0, 1.0) # explicit stop
finally:
client.set_velocity(0.0, 0.0, 0.0, 1.0) # safety-net zero velocity
client.set_velocity_source(0) # hand control back to the joystick
client.close()
Stand Pose Control
The current deployment does not consume stand-pose offset commands: set_stand_pose() publishes but produces no posture change and the readout stays zero (see Stand Pose). Use the joystick D-pad for height/pitch.
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)
client.set_stand_pose(0.0, 0.0, 0.0) # zero offset (only usable value in the current deployment)
print(f"stand pose: {client.get_stand_pose()}")
finally:
client.close()
Joint Control
Send complete control-group commands with set_group_cmd. Waist commands must contain five values. Its safe default position is [-1.25, 2.15, -0.918, 0, 0]; never command all waist joints to zero.
Available control groups: waist, left_manipulator, right_manipulator
End effectors: left_end_effector, right_end_effector