Locking the mobile base of Reachy2 during Operation for stability?

While performing simple tasks by teleoperation—using the arms to push a stationary object—I’ve noticed that the mobile base does not stay fixed. Instead, the whole robot slides backward, effectively “pushing” itself rather than the target object.

Questions / Request for help

  1. Is there a recommended way to lock the mobile base while the arms are applying external forces?

  2. Are there known hardware limits or safety mechanisms that intentionally allow the base to move under arm‑generated reaction forces?

I’d appreciate any guidance—whether it’s a software setting, a hardware modification, or a best‑practice workflow—to prevent the base from drifting when the arms push against external objects.

Thank you in advance for your help!

Hello @alexandros,

There is no built-in safety mechanism that allows the mobile base to move, the wheels are simply slightly compliant in the command mode we use to control it. However, this behavior can help prevent the robot from toppling if we apply more force than it is designed to handle.

To help us suggest a solution to lock the mobile base, could you let me know whether you need to control the mobile base when performing your teleoperation tasks?

Hi @Gaelle ,

I have some use cases where the robot has to reach a specific door and pull or push to open it. Or change workbenches in a factory floor and continue grabing things on the new workbench.Is that what you are asking?

Of course I understand the risk of toppling if the mobile base is locked and will have to treat carefully. Maybe by utilizing a tilt sensor and built an toppling-danger-indicator in the VR interface or something similar.

Hello @alexandros,

I wanted to know if you used a stationary mobile base while performing your task, or if you still needed to control it. There could be several ways to address this issue, but some approaches are exploratory.

We have different modes available to control the mobile. One of them uses odometry to compensate unexpected movements, but this mode is not currently used in teleoperation where we only use velocity commands to control the mobile base. It might be interesting to give it a try.

The mode I am referring to is called cmd_goto. You can test it using the SDK:
from reachy2_sdk import ReachySDK
import time
reachy = ReachySDK(“ip-address”) # set the correct IP address here
reachy.mobile_base._set_drive_mode(“cmd_goto”)
time.sleep(0.2)
reachy.mobile_base.reset_odometry()
reachy.mobile_base.goto(x=0.0, y=0.0, theta=0.0)

If you try to push or pull the mobile base after running this, it should resist once it moves too far from its position. You can compare this behavior to the mode currently used in teleoperation:
reachy.mobile_base._set_drive_mode(“cmd_vel”)
In this mode, the mobile base does not resist much.

If you think the cmd_goto mode could help, you can test it during teleoperation:

  1. Disable the mobile base in the teleoperation settings (set Mobile Base OFF in the mirror scene right panel). You won’t be able to control the mobile base in teleoperation anymore, so make sure the robot is already positioned where you want to perform the task.
  2. Enter teleoperation to control the arms and head
  3. Send the following commands through the SDK (when you are already in teleoperation):
    from reachy2_sdk import ReachySDK
    import time
    reachy = ReachySDK(“ip-address”) # set the correct IP address here
    reachy.mobile_base._set_drive_mode(“cmd_goto”)
    time.sleep(0.2)
    reachy.mobile_base.reset_odometry()
    reachy.mobile_base.goto(x=0.0, y=0.0, theta=0.0)
  4. Try performing your task

If this mode works well, we could consider modifying the teleoperation to set cmd_goto as default mode when the mobile base is stationary. This will allow you to both control the mobile base when needed and automatically switch to this mode when the mobile base should not move.

Otherwise, we can explore other ways to adjust the mobile base’s behavior, such as tuning its PID parameters, but it would be a more experimental approach.

Let me know if it helps!