ROBOTICS.DEV App Builder
Run P2P AI Robotics.dev apps anywhere!
ROS2 topic namespacing is configured per robot in the robotics.dev portal (rosNamespace), not in SDK connect options. See CHANGELOG.md.
WebRTC ICE servers are fetched from GET /webrtc/ice-servers on connect (STUN by default). TURN relay requires turnRelayEnabled: true on your Firestore user document (users/{uid}) — a paid add-on (billing coming soon). All paid users share the same server-side Metered.ca credentials.
pip install robotics-dev
Usage:
await robotics.connect({
'server': 'ws://192.168.0.47:3001',
'robot': 'eeeaa722-...-9a53-c945a5822b60',
'token': '5a66b323-...-9169-77a95014f339'
}, handle_message)
robotics.speak('eeeaa722-...-9a53-c945a5822b60', 'this is a test')
robotics.twist('eeeaa722-...-9a53-c945a5822b60', forward_twist)
Here's an example python script:
import asyncio
import signal
import base64
import sys
from pathlib import Path
# Add the src directory to Python path for local testing
src_path = Path(__file__).parent.parent / 'src'
sys.path.append(str(src_path))
# Import for local testing
from robotics_dev.robotics import robotics
# For production, use:
# from robotics_dev import robotics
# Create twist message for moving forward at 20% speed
forward_twist = {
"linear": {
"x": 0.2, # 20% forward velocity
"y": 0.0,
"z": 0.0
},
"angular": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}
# Create stop twist message
stop_twist = {
"linear": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"angular": {
"x": 0.0,
"y": 0.0,
"z": 0.0
}
}
one_time = True
async def handle_message(ros_message):
global one_time
# ros_message is already parsed by the SDK
print('Received p2p data:', ros_message)
if one_time:
one_time = False
await robotics.speak('eeeaa722-...-9a53-c945a5822b60', 'this is a test')
print('Moving robot forward at 20% speed...')
await robotics.twist('eeeaa722-...-9a53-c945a5822b60', forward_twist)
# Stop after 5 seconds
await asyncio.sleep(5)
print('Stopping robot...')
await robotics.twist('eeeaa722-...-9a53-c945a5822b60', stop_twist)
async def main():
# Set up signal handlers for graceful shutdown
loop = asyncio.get_running_loop()
for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, lambda: asyncio.create_task(cleanup()))
try:
# Connect to robotics.dev
await robotics.connect({
'server': 'ws://192.168.0.47:3001',
'robot': 'eeeaa722-...-9a53-c945a5822b60',
'token': '5a66b323-...-9169-77a95014f339'
}, handle_message)
# Keep running until interrupted
while True:
await asyncio.sleep(1)
except asyncio.CancelledError:
print("Shutdown requested...")
except Exception as e:
print(f"Error: {e}")
async def cleanup():
print("Disconnecting...")
await robotics.disconnect()
# Stop the event loop
loop = asyncio.get_running_loop()
loop.stop()
if __name__ == "__main__":
asyncio.run(main())
Metadata
Release files for robotics-dev 0.0.19
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| robotics_dev-0.0.19.tar.gz | 13.1 kB | Without provenance | Details for robotics_dev-0.0.19.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| robotics_dev-0.0.19-py3-none-any.whl | Python 3 | none | any | Details for robotics_dev-0.0.19-py3-none-any.whl |
Total release size: 25.3 kB
Release files / robotics_dev-0.0.19.tar.gz
| Download URL | robotics_dev-0.0.19.tar.gz |
|---|---|
| Size | 13.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d44ad44ec85f0fe670308621693b801596b5b493dd91584ac7fd50fb7740a6bd
|
|
BLAKE2b-256 checksum How to use checksums |
5624f364f791d181d39094a316a82aa1bf841d246aa1c13a7dbb201ba60e78cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / robotics_dev-0.0.19-py3-none-any.whl
| Download URL | robotics_dev-0.0.19-py3-none-any.whl |
|---|---|
| Size | 12.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b607e075a203eb5a5fc4f20560a99562c75a96a83a7a4f04df8017cdcf4b1a08
|
|
BLAKE2b-256 checksum How to use checksums |
5d2bb2ead35446ee474f4986b203f184ea0796d20ce15b3b4008faaf438fa01f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Security for robotics-dev 0.0.19
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.