Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

koebelt-dash-scripts

Control drones, robots and test rigs connected in koebelt/dash from Python: read their telemetry, drive them, react to buttons and conditions, with any Python package you like (OpenCV, PyTorch, YOLO…).

pip install koebelt-dash-scripts
from koebelt_dash_scripts import connect, every, pid

dev = connect()                      # the device selected in koebelt dash
speed = dev.setting("speed", 0.4, min=0, max=1)   # a slider in dash
hold = pid(1.5, 0.0, 0.2)

@dev.trigger("Stop here", key="S")   # a button in dash
def stop_here():
    dev.mode("HOLD")

dev.mode("MANUAL")
for _ in every(0.05):                # 20 Hz
    error = 0.0 - dev.tlm.pos[0]     # stay on the north-south line
    dev.sticks(throttle=speed.value, steer=hold.update(error))

Run it from koebelt dash (Scripts), or from a terminal while dash is open on the same computer: it finds dash by itself.

With a model on the camera:

from ultralytics import YOLO
from koebelt_dash_scripts import connect, pid

model = YOLO("yolov8n.pt")
dev = connect()
steer = pid(1.2, 0, 0.1)

for frame in dev.camera.frames():
    result = model(frame, verbose=False)[0]
    dev.overlay(result)                       # see what the model sees, in dash
    people = [b for b in result.boxes if int(b.cls) == 0]
    if not people:
        dev.sticks(throttle=0, steer=0)
        continue
    x = float(people[0].xywhn[0][0]) - 0.5    # −0.5 left … 0.5 right
    dev.sticks(throttle=0.4, steer=steer.update(-x))

Script hosts: scripts for phones and tablets

koebelt dash on an iPhone, iPad or Android device sends its scripts to a computer on the same network, which runs them with its own Python (and its GPU), while the phone keeps the device link, the sticks and STOP:

pip install koebelt-dash-scripts
koebelt-dash-scripts host

It prints a pairing code; in dash: Scripts > Runs on > Add a script host. A laptop on the field, a Raspberry Pi 5 or a Jetson all work. A computer running koebelt dash can also be a host (Settings > Scripts).

Safety

dash stays in charge, whatever the script does:

  • STOP stops every device and ends the script.
  • Moving the sticks in dash takes over; the script's sticks are ignored until you resume it.
  • Each script has limits set in dash: maximum speed, geofence, ceiling. Arming, take-off and parameter writes are refused unless you allow them.
  • If the script crashes, hangs or leaves the geofence, the device holds, and the script cannot drive again until you resume it.

The API

connect(device=None) The device selected in dash, or the one with that name.
dev.tlm Latest telemetry (20 Hz): pos (m from home, x east, y north), alt, vel, speed, roll pitch yaw, heading, mode, armed, battery, gps, joints…
dev.next_tlm() Waits for the next telemetry.
dev.sticks(...) −1…1, held until changed. Drones: throttle yaw pitch roll; rovers: throttle steer.
dev.mode(m), dev.arm(), dev.disarm(), dev.speed_limit(v), dev.cmd(name, **args), dev.stop(), dev.release() Commands.
dev.takeoff(alt), dev.goto(x, y, z), dev.land(), dev.rth(), dev.pose(*deg), dev.gripper(pct), dev.home(), dev.throttle(pct, s), dev.ramp(a, b, s) Program steps; they return once done (or at once with wait=False).
dev.run_program(name), dev.pause_program(), dev.resume_program(), dev.stop_program() Programs from dash's Program screen.
dev.camera.frame(), for img in dev.camera.frames(): The camera as numpy images (BGR, for OpenCV; needs opencv-python or pillow). The newest frame only: a slow model never falls behind.
dev.overlay(boxes) Boxes over the camera in dash: (x, y, w, h, label) tuples or an ultralytics result.
dev.params["KEY"], dev.params.set(KEY=v), dev.params.save() Parameters.
dev.setting(name, default, min, max) A slider or switch in dash; read .value.
@dev.trigger(name, kind, key, gamepad) A button (button), switch (switch) or number (value) in dash.
@dev.on_trigger, @dev.on_stop, @dev.on_takeover Other events.
dev.plot(name, v), dev.mark(text), dev.notify(text) Shown in dash and recorded.
dev.store A dictionary kept between runs.
dev.run() Waits, for scripts that only react to triggers.
every(seconds), wait(seconds) Steady loops; dash shows the real rate.
pid, lowpass, rate_limit, clamp, distance, bearing, angle_diff, geo_distance, geo_bearing Helpers.

Errors

When something goes wrong, the error says what, points at the line of your script, says why and how to fix it, and suggests the name you meant:

error[E0201]: “pitch” is not a stick of a rover
  --> follow_me.py:21
   |
21 |     dev.sticks(throttle=0.4, pitch=steer)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = why: sticks are named for the kind of device
   = help: a rover has: throttle, steer, lx, ly, rx, ry
   = docs: https://github.com/koebelt/koebelt_dash/blob/main/libs/python-dash-scripts/ERRORS.md#e0201

Every code is explained in ERRORS.md. Catch them as ScriptError (e.code, e.why, e.help).

The messages between scripts and dash are documented in protocol/SCRIPTS.md.

MIT licence.

Metadata

Release files for koebelt-dash-scripts 1.3.0b3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for koebelt-dash-scripts 1.3.0b3
File Size Uploaded Provenance
koebelt_dash_scripts-1.3.0b3.tar.gz 33.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for koebelt-dash-scripts 1.3.0b3
File Interpreter ABI Platform
koebelt_dash_scripts-1.3.0b3-py3-none-any.whl Python 3 none any Details

Total release size: 60.2 kB

Release files / koebelt_dash_scripts-1.3.0b3.tar.gz

Download URL koebelt_dash_scripts-1.3.0b3.tar.gz
Size 33.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3c8cdc130b609971adf59c79f9a3a06e2a5dd9b453b36787dac2d5819fcb62b3
BLAKE2b-256 checksum
How to use checksums
966df8de6023df46e5ea721ad1d461e9eea8085d2ae16783e6b59ad68ad4197d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / koebelt_dash_scripts-1.3.0b3-py3-none-any.whl

Download URL koebelt_dash_scripts-1.3.0b3-py3-none-any.whl
Size 27.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d7385f883a093593e25d16e501c99c7edd077cc6987cf65f67916b2974f9bbc9
BLAKE2b-256 checksum
How to use checksums
f8148342a1b18ceb8e551fb168f9a796f71a1532a9d55cec455c2969c3bca40b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for koebelt-dash-scripts 1.3.0b3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for koebelt_dash_scripts-1.3.0b3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page