LiveKit docs › Teleoperation › Overview

---

# Build a teleoperation app

> Control robots remotely with low latency.

## Overview

Teleoperation lets an operator see and control a robot from another location. Use [LiveKit server and client SDKs](https://docs.livekit.io/reference.md) to build low-latency teleoperation apps using [video tracks](https://docs.livekit.io/robotics/media/video.md) and [data tracks](https://docs.livekit.io/robotics/media/data/data-tracks.md).

A typical teleoperation app built with LiveKit has two [participants](https://docs.livekit.io/intro/basics/rooms-participants-tracks/participants.md):

- **Robot**: Captures video from its cameras, publishes video, receives commands, and applies them to the local control system.
- **Operator**: Renders the robot's video, reads input from a gamepad or control interface, and publishes commands.

```mermaid
graph LR
robot["Robot"]
livekit[LiveKit Server]
operator["Operator"]robot -.Video .-> livekit
livekit -.Controls.-> robotlivekit -.Video .-> operator
operator -.Controls.-> livekit
```

LiveKit transports video and data between the participants. Your app remains responsible for camera capture, the command format, actuator integration, and [safety behavior](https://docs.livekit.io/robotics/teleop/robot.md#apply-commands-safely).

## Build your teleoperation app

The following guides walk you through building example teleoperation apps for robot and operator participants with LiveKit.

- **[Build the operator participant](https://docs.livekit.io/robotics/teleop/operator.md)**: Define a control schema, render the robot's tracks, capture operator input, and publish commands.

- **[Build the robot participant](https://docs.livekit.io/robotics/teleop/robot.md)**: Publish camera and sensor tracks, receive control data, and connect LiveKit to the local control system.

## Next steps

Use the end-to-end teleoperation demos to explore the complete media and control path. For smaller, reusable components, see the [C++ example collection](https://github.com/livekit-examples/cpp-example-collection) for native apps.

- **[Rover teleop](https://github.com/livekit-examples/rover-teleop)**: Run an end-to-end Raspberry Pi rover with a published camera feed and a Flutter gamepad controller.

- **[Pan-tilt teleop](https://github.com/livekit-examples/teleop/tree/main/pan_tilt_demo)**: Use the LiveKit C++ SDK to publish RealSense video, send motor commands over a control data track, and acquire exclusive control with RPC.

- **[C++ video example](https://github.com/livekit-examples/cpp-example-collection/tree/main/simple_room)**: See how a native app captures, publishes, subscribes to, and renders video tracks.

- **[C++ data track example](https://github.com/livekit-examples/cpp-example-collection/tree/main/ping_pong)**: See two native participants publish and subscribe to named data tracks.

---

This document was rendered at 2026-10-07T16:19:34.472Z.
For the latest version of this document, see [https://docs.livekit.io/robotics/teleop.md](https://docs.livekit.io/robotics/teleop.md).

To explore all LiveKit documentation, see [llms.txt](https://docs.livekit.io/llms.txt).