Mobility interface gives you direct control over the robot base—rotation, velocity commands, and movement. Use it for custom navigation behaviors that complement the built-in navigation.
Core Navigation (Built-in)
The robot comes with built-in navigation that the agent calls innately. You don’t need to implement this—it works out of the box. Do not modify the corenavigate_to_position skill. It’s a system-level skill that the agent uses automatically. Modifying it could break navigation behavior.
When you tell the robot “go to the kitchen,” the agent automatically:
- Translates “kitchen” to map coordinates (if the location is saved)
- Calls the built-in navigation skill
- Monitors progress and handles obstacles
Mobility
Declare the interface with a class-level type annotation. Declaring is requiring — the run fails up front if the base is unavailable, soself.mobility is guaranteed inside execute():
Methods
Examples
Closed-loop moves
send_cmd_vel is open loop — it commands a speed and hopes. When you need the robot to actually arrive, drive() and rotate_by() watch odometry and correct until they get there:
odom_xyt() turns the odometry feed into the plain (x, y, theta) tuple these take.
Both return True on arrival and False on timeout or lost odometry — they never raise. They stop the base on the way out, whatever happened.
When to Use
Example: LookAround
A skill that rotates to survey the environment, written with every agent-facing method explicit:self.sleep() raises the moment the user or agent interrupts, the base is braked for you, and the run reports CANCELLED.
