Skip to main content

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 NameTask NameJoystick MappingDDS MappingFrequency
UserController_Agrw_policy_taskRB+A350Hz
Available when HangingAvailable when StandingAutomatic Protection Switch
NoYesNo

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 ControlStand Pose ControlJoint ControlJoint Parameter Control
YesNot effective in the current deploymentWaist, arms, end effectorsNo

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.

Python
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​

Python
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.

Python
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