Skip to content

G1 Motion Mode + rt/arm_sdk: Unable to maintain a stable arm pose while walking #173

Description

@kovacslevente2

Hi,

I'm trying to implement a simple manipulation scenario on a Unitree G1 29DoF.

The goal is very simple:

Robot is already in Regular Motion Mode (R1+Y).
Move both arms into a fixed pre-grasp pose.
Hold the pose.
Walk using the standard remote controller.
Legs remain under the locomotion controller while the arms are controlled through rt/arm_sdk.

However, I have not been able to obtain stable behavior.

Running Mode experiments

Originally I implemented everything in Running.

Using rt/lowcmd I controlled:

both arms,
and later the waist joints.
Initial problem

When raising both arms into a forward pre-grasp pose (weight = 1.0), the robot consistently leaned forward, even while standing.

Reducing the arm weight (for example to 0.7–0.8) reduced the problem but did not eliminate it.

Waist compensation

I then added a small negative WaistPitch command.

This immediately improved stability.

Later I also initialized WaistYaw and WaistRoll to their neutral offsets.

Results:

dual-arm motions became stable,
forward leaning disappeared,
one-arm manipulation also became significantly more stable.

Unfortunately, Running Mode disables the standard locomotion controller, so this is not suitable for walking.

Motion Mode experiments

I then switched to the officially recommended workflow.

Robot startup:

Power on
Motion Mode (R1+Y)
Walking performed only with the standard remote controller
Arm control through rt/arm_sdk

I tried the workflow recommended in the documentation:

read current joint positions,
gradually ramp motor_cmd[29].q (weight),
move only upper-body joints,
never publish leg commands,
release weight back to zero on exit.
Tested configurations
Configuration 1
Arms only
weight = 0.8

Result:

The arms moved correctly into the desired pose.

When I started walking with the remote controller, the robot became unstable.

Typical behavior:

side stepping,
torso oscillations,
balance corrections,
arms not remaining stable.
Configuration 2

Same setup but

weight = 1.0

Result:

Even worse.

The locomotion controller appeared to fight against the arm controller.

Configuration 3

Official recommendation

Only joints:

15..28

Weight:

29

No waist control.

Result:

No improvement.

Configuration 4

Based on my previous Running Mode experience

I also tried including

WaistYaw
WaistRoll
WaistPitch

through rt/arm_sdk.

WaistPitch used a small negative offset while Yaw/Roll remained at their measured home values.

Standing stability improved.

Walking behavior is currently still under evaluation.

Questions
Is there an officially supported example of a G1 walking in Motion Mode while continuously holding a custom arm pose?
Should waist joints (12–14) be commanded together with the arms on the 29DoF G1, or should they always remain under the locomotion controller?
Does the locomotion controller internally compensate for the change in center of mass when motor_cmd[29].q = 1.0, or is the application expected to provide waist compensation?
Are there recommended stiffness (kp/kd) values specifically intended for walking while holding a fixed manipulation pose?
Is there any internal synchronization mechanism between Motion Mode and rt/arm_sdk that is not exposed through the public SDK?
Additional information

Robot:

Unitree G1
29 DoF

Control:

Motion Mode (R1+Y)
Walking with the standard remote controller
Arms controlled through rt/arm_sdk

The desired application is simply to keep both arms in a fixed carrying/pre-grasp pose while walking.

Any guidance or an official example would be greatly appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions