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", robot_id="M1_001") as robot:
robot.move_forward(speed=0.3, duration=2)
robot.move_left_arm(shoulder_pitch=45, elbow=-30)
print(robot.get_battery(), "V")
# motors stopped and the connection closed, even on an exception
Requires Python 3.11+. 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 and its robot id:
robot = BonicBot("192.168.1.50", robot_id="M1_001")
The id must match the robot you're pointing at — it's a guard against driving the wrong machine on a network with several robots on it, and the connection is refused if it doesn't match.
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 and BONICOS_ROBOT_ID are set for you — so a script you
developed on your laptop needs no edits to run on the robot. You can also set
those variables yourself, or install bonicos[discovery] to find a robot by
mDNS.
Anyone on the same network can connect. There is no authentication yet — the 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, ask_llm, 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:
- Named locations —
save_location,goto_location,list_locations,delete_location,delete_all_locations - Nav2 lifecycle —
start_navigation,stop_navigation servo_single, head expression (head_mode,head_look), and the LED matrix (display_*)
Everything else in the table above is live. Vision pipelines (face/pose/object detection), autonomous exploration, and recorded sequences are not in this release.
Safety
- Use the context-manager form (
with BonicBot(...) as robot:) or callrobot.close()in afinally. 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.
- PROTOCOL.md — the wire protocol, if you're writing your own client or working on the robot side.
License
MIT — see LICENSE. © Autobonics Pvt Ltd.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bonicos-0.1.0.tar.gz.
File metadata
- Download URL: bonicos-0.1.0.tar.gz
- Upload date:
- Size: 83.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9db7e44f4614807e902c0940b4c98b49e840d5894e2a0f91ed2cae7e65c637b
|
|
| MD5 |
9c095d5961bc98d39835a491792a751f
|
|
| BLAKE2b-256 |
45dacb3ebc9043a5bf017e9e7b1adb15afb9d82dbb3a20b6db72cff8f5250bf5
|
File details
Details for the file bonicos-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bonicos-0.1.0-py3-none-any.whl
- Upload date:
- Size: 52.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5b84cff3a8f12869b09168732b3405682bec9e5837012b4eab526b886c12bad
|
|
| MD5 |
315c6c327e5b21e566819f3009bc2ae4
|
|
| BLAKE2b-256 |
06b8d8b8f81713c25201d504e8ef9340d9961cf9a930a0dab7aef4dbd6afe702
|