Skip to main content

bonicos

The Python SDK for BonicBot robots. Drive the base, move the arms, run navigation and mapping, and read live sensor telemetry — from your own laptop or from a program running on the robot itself, with the same code either way.

pip install bonicos
from bonicos import BonicBot

with BonicBot("192.168.1.50") as robot:
    robot.move_forward(speed=0.3, duration=2)
    robot.move_left_arm(shoulder=45, elbow=30)
    print(robot.get_battery(), "V")
# motors stopped and the connection closed, even on an exception

Requires Python 3.10+. Pure Python — the same wheel runs on a laptop, a Raspberry Pi, or a Jetson.


Connecting

bonicos talks to the robot over your local network. You need the robot's address:

robot = BonicBot("192.168.1.50")

If the environment already knows which robot you mean, a bare BonicBot() works. That's the case when your program runs on the robot, where BONICOS_HOST is set for you — so a script you developed on your laptop needs no edits to run on the robot. You can also set that variable yourself, or install bonicos[discovery] to find a robot by mDNS.

On a classroom LAN with several robots, robot_id is optional but useful: pin it and the connection only succeeds against that specific robot —

robot = BonicBot("192.168.1.50", robot_id="M1_001")

— and it doubles as the filter for bonicos[discovery] when you don't know the address either (BonicBot(robot_id="M1_001")). Leave it off for the common case of one robot, or a host you already trust.

Anyone on the same network can connect. There is no authentication yet — robot_id is a wrong-robot guard, not a password. Run robots on a network you trust.

No robot handy? BonicBot.simulated() connects to a fake one instead — driving, arms, and telemetry all behave for real, with no network and no hardware required.


What you can do

Area Examples
Motion move_forward, move_backward, turn_left, turn_right, stop, raw drive
Precise motion drive_distance, rotate_angle, drive_and_rotate, draw_square, queued routines
Navigation go_to(x, y), navigate_waypoints, cancel_goal, wait_for_goal, get_plan
Mapping enter_mapping_mode, start_mapping, save_map, list_maps, enter_navigation_mode
Arms & grippers move_left_arm, move_right_arm, set_servos, set_gripper, set_neck, get_servo_angles
Sensors get_position, get_battery, get_imu, get_servo_angles, wait_for_update
Camera get_camera_frame() → BGR numpy arrays (needs pip install bonicos[camera])
System speak, health, session status and recovery

Full reference with every signature: API.md.

Movement calls block until the robot actually gets there — move_left_arm(...) returns when the joint has converged on its target, not when the command was merely acknowledged.

Not yet working on the robot

Some commands are accepted and silently do nothing on current robot firmware. Your code runs; that actuator just doesn't move. They are marked 🔌 stub in API.md:

  • Nav2 lifecycle — start_navigation, stop_navigation
  • servo_single

Head expression and the LED matrix (set_expression, look, display_*) are live on A series as of robot_app's face-matrix path. They need the base stack up, and a series with no matrix answers with an error rather than pretending. Two expressions — surprised and confused — have no face in firmware and show a heart and a colour effect; set_expression warns when it substitutes one.

Everything else in the table above is live. Vision pipelines (face/pose/object detection), autonomous exploration, and recorded sequences are not in this release.

On Lite robots (s1-lite, a2-lite) navigation and mapping are not stubs — they are absent, and raise CommandError rather than silently doing nothing. Motion, arms, display, speech, sensors and camera all work. The SDK does not check capability at runtime and the robot does not advertise it: API.md is the reference for what each model supports — every section carries an On Lite line.


Safety

  • Use the context-manager form (with BonicBot(...) as robot:) or call robot.close() in a finally. Both stop the robot on the way out.
  • The robot stops its own motors if it stops hearing from you (roughly 400 ms), so a crashed script or a dropped connection will not leave it driving. That backstop covers driving only — a navigation goal keeps running, so cancel it explicitly if you're bailing out.

Installing extras

pip install bonicos              # driving, arms, navigation, telemetry
pip install bonicos[camera]      # + camera frames (aiortc, numpy)
pip install bonicos[discovery]   # + find a robot by mDNS

Each extra reports what's missing if you use a feature without it, rather than failing with an import error.


Documentation

  • API.md — every class and method, with blocking behaviour and worked examples. Also the capability reference: each section's On Lite line says what that model supports.
  • PROTOCOL.md — the wire protocol, if you're writing your own client or working on the robot side.
  • examples/ — eleven runnable scripts, laptop or robot.
  • CHANGELOG.md — what changed between releases, including breaking changes and how to migrate.

License

MIT — see LICENSE. © Autobonics Pvt Ltd.

Release files for bonicos 0.11.0

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

Source distribution (sdist)

Source distribution for bonicos 0.11.0
File Size Uploaded
bonicos-0.11.0.tar.gz 190.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bonicos 0.11.0
File Interpreter ABI Platform
bonicos-0.11.0-py3-none-any.whl Python 3 none any Details

Total release size: 296.7 kB

Release files / bonicos-0.11.0.tar.gz

Download URL bonicos-0.11.0.tar.gz
Size 190.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ccebba1c7024e1a692f7911b523f47f66d24f180c3594f5b08a795e88a50513f
BLAKE2b-256 checksum
How to use checksums
f489413109f4c449f88e088e1d0e8d120a58f6461a4409bc58bf931b9d9ee76e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / bonicos-0.11.0-py3-none-any.whl

Download URL bonicos-0.11.0-py3-none-any.whl
Size 106.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
97950816a05cad72b246f170422656ad38f18063001d43aab95e665c88c0a1a2
BLAKE2b-256 checksum
How to use checksums
f2d347129bf21eb6fed55b5fdbd299d0507f74815f3209b70daf52517b28e1f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

0.11.0 This release

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.7.0

2 release files

0.5.2

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

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