[Unitree H1-2] Unitree Sdk Low Level

I have several questions about the Unitree SDK (low-level control):

  1. Switching modes with MotionSwitcherV2

    How can I switch back to MFC mode (high-level) after being in low-level mode?

    I couldn’t find any examples showing how to return to high-level control once low-level is active.

  2. Mixed control of the H1-2

    Is it possible to control only the arms + hands of the H1-2 in low-level mode while keeping the lower body under high-level control?

  3. Parameter limits

    Are there known limits for the parameters dq, kp, kd, and tau?

    I only found documentation for the maximum motor angles, but nothing about these other parameters.

  4. Clarification of MotorCmd parameters

    What exactly do tau and dq do in the MotorCmd?

    I tested both on the Go2 EDU but couldn’t see a clear effect.

Hi,

It is mentioned in the Unitree website the statemachine chart, you can verify from there. I believe once you go into debug mode you have to reboot to go back to normal mode.

Yes by default you can use the arms in low-level mode while the legs are in high-level mode.

There is no documentation for this but you can find the ideal values for these in Isaac Lab and their RL deployed repositories on GIthub such as the xr_teleoperate for H1.

On the Go2/SDK2, each joint’s MotorCmd is a PD-with-feedforward command:

  • q — desired joint position (rad)
  • dq — desired joint velocity (rad/s)
  • kp, kdposition and velocity gains
  • taufeed-forward torque (N·m), added on top of the PD term

The motor driver computes something equivalent to:

τ_out = kp * (q_des − q_meas) + kd * (dq_des − dq_meas) + tau

So:

  • Changing dq only has effect if kd > 0 (or if you’re explicitly running a velocity mode).
  • Changing tau biases the output torque (e.g., for gravity compensation), but it can be clipped by safety limits and will be overshadowed if kp/kd are large

However, i cannot confirm exactly as their low-level drivers are closed source.