Skip to content

Flow Base

✓ Python SDK✓ Omnidirectional✓ Remote Control✓ Raspberry Pi On-board

Flow Base is I2RT's omnidirectional holonomic mobile platform. Designed to pair with YAM arms, it enables precise whole-body mobile manipulation for tasks that demand exact positioning and free orientation.

Tagline

"It likes to move it move it" — precise, omnidirectional control for tasks where positioning and stability are critical.

Key Features

  • Holonomic drive — simultaneous XY translation and rotation with no kinematic constraints
  • On-board Raspberry Pi — pre-configured with i2rt SDK; SSH-accessible over Wi-Fi or Ethernet
  • CAN bus motor control — same DM-series protocol as YAM arms
  • Remote controller — joystick remote included for manual operation
  • API control — full network Python API via FlowBaseClient
  • Odometry — wheel odometry with reset; external sensor integration supported
  • Safety — E-stop, velocity timeout (0.25 s), remote override

Specifications

ParameterValue
DriveHolonomic (4-wheel)
Communication (external)Ethernet (static IP 172.6.2.20) / Wi-Fi
Communication (motors)CAN bus
On-board computerRaspberry Pi
PowerInternal battery
SSH credentialsi2rt / root
API port11323
Velocity timeout0.25 s

Photos & Videos

🎬
Video — Coming Soon
Flow Base driving around a lab environment — forward, lateral, diagonal, and rotation movements. 30–60 seconds, bird's-eye and side views.
🎬
Video — Coming Soon
YAM arm mounted on Flow Base, doing a mobile pick-and-place from a shelf. Showcases the full mobile manipulation capability.

Remote Control Layout

InputFunction
Left joystickXY translation
Right joystick XRotation (yaw)
Right joystick YLinear rail lift (if equipped)
Left1Reset odometry
ModeToggle local ↔ global frame
Left2Override API commands (safety)

Getting Started

1. Unbox & power on

Follow the unboxing guide. Ensure:

  • Battery is connected and charged
  • E-stop is not pressed
  • CAN selector switch is in the UP position

2. SSH in

bash
# Wired (Ethernet, static IP)
ssh i2rt@172.6.2.20

# Or find the Pi on your LAN after Wi-Fi setup
ssh i2rt@<pi-ip>
# Password: root

3. Run joystick demo

bash
python i2rt/flow_base/flow_base_controller.py

4. Python API

python
from i2rt.flow_base.flow_base_controller import Vehicle
import time

vehicle = Vehicle()
vehicle.start_control()

# Move forward at 0.1 m/s for 1 second
start = time.time()
while time.time() - start < 1.0:
    vehicle.set_target_velocity((0.1, 0.0, 0.0), frame="local")

Coordinate Systems

The base supports two control frames toggled with the Mode button on the remote:

ModeBehaviour
LocalXY motion is relative to the base's current heading
GlobalXY motion is relative to the world frame (headless mode)

Odometry drift

Wheel odometry accumulates error, especially during aggressive movements. For precise mobile manipulation, integrate a visual odometry sensor (RealSense T265, ZED Camera). Press Left1 to reset odometry at any time.

API Reference

python
from i2rt.flow_base.flow_base_client import FlowBaseClient

client = FlowBaseClient(host="172.6.2.20")

# Read wheel odometry
odom = client.get_odometry()
# {'translation': array([x, y]), 'rotation': array([theta])}

# Reset odometry
client.reset_odometry()

# Command velocity [x, y, theta] in m/s and rad/s
client.set_target_velocity([0.1, 0.0, 0.0], frame="local")

Linear Rail (if equipped)

python
client = FlowBaseClient(host="172.6.2.20", with_linear_rail=True)

# Get rail state (position, velocity, limit switches)
state = client.get_linear_rail_state()

# Set rail velocity (rad/s)
client.set_linear_rail_velocity(0.5)

# Combined base + rail command [x, y, theta, rail_vel]
client.set_target_velocity([0.1, 0.0, 0.0, 0.2], frame="local")

Linear rail safety

The rail homes to the lower limit on init and has hardware limit switches. Set velocity to 0.0 to stop — do not control the brake directly. Commands time out after 0.25 s of inactivity.

External CAN Control

To bypass the on-board Pi and control the base from an external computer:

  1. Connect your CAN adapter to the external CAN connector
  2. Set the CAN selector switch to the DOWN position
  3. Clone the i2rt repo on your external machine and control via CAN directly

Troubleshooting

SymptomFix
Remote unresponsiveToggle remote off and on to wake from sleep
Slow bootNormal — screen firmware adds delay, SSH is available quickly
Inaccurate odometryExpected with wheel odometry; use external visual sensor for precision
Linear rail not homingCheck GPIO connections and limit switches
Linear rail stuck at limitRun get_linear_rail_state() to check switch status

See Also

Released under the MIT License.