Set up your embodied LLM agent same easiness as you set up normal agents in CrewAI or Autogen
Project description
๐ค RoboCrew
Build AI-powered robots that see, move, and manipulate objects โ in a few lines of code.
RoboCrew makes it stupidly simple to create LLM agents for physical robots. Think of it like building agents with CrewAI or AutoGen, except your agents live in the real world with cameras, microphones, wheels, and arms.
โจ Features
- ๐ Movement - Pre-built wheel controls for mobile robots
- ๐ฆพ Manipulation - VLA models as tools for arms control
- ๐๏ธ Vision - Camera feed with automatic angle grid overlay for spatial understanding
- ๐ค Voice - Wake-word activated voice commands and TTS responses
- ๐บ๏ธ LiDAR - Top-down mapping with LiDAR sensor
- ๐ง Intelligence - LLM agent control provides complete autonomy and decision making
- ๐ Memory - Long-term memory to remember environment details
๐ฏ How It Works
The RoboCrew Intelligence Loop:
- ๐ Input - Voice commands, text tasks, or autonomous operation
- ๐ง LLM Processing - Gemini analyzes the task and environment
- ๐ ๏ธ Tool Selection - AI chooses appropriate tools (move, turn, grab the apple, etc.)
- ๐ค Robot Actions - Wheels and arms execute commands
- ๐น Visual Feedback - Cameras capture results with augmented overlay
- ๐ Adaptive Loop - LLM evaluates results and adjusts strategy
This closed-loop system creates AI agents that perceive โ reason โ act, but in the physical world!
๐จ Supported Robots
- โ XLeRobot - Full support for all features
- ๐ฅ LeKiwi - Use XLeRobot code (compatible platform)
- ๐ Earth Rover mini plus - Full support
- ๐ More robot platforms coming soon! Request your platform โ
๐ Quick Start
pip install robocrew
To run GUI use:
robocrew-gui
๐ฑ Mobile Robot (XLeRobot)
from robocrew.core.camera import RobotCamera
from robocrew.core.LLMAgent import LLMAgent
from robocrew.robots.XLeRobot.tools import create_move_forward, create_turn_right, create_turn_left
from robocrew.robots.XLeRobot.servo_controls import ServoControler
# ๐ท Set up main camera
main_camera = RobotCamera("/dev/camera_center") # camera usb port Eg: /dev/video0
# ๐๏ธ Set up servo controller
right_arm_wheel_usb = "/dev/arm_right" # provide your right arm usb port. Eg: /dev/ttyACM1
servo_controler = ServoControler(right_arm_wheel_usb=right_arm_wheel_usb)
# ๐ ๏ธ Set up tools
move_forward = create_move_forward(servo_controler)
turn_left = create_turn_left(servo_controler)
turn_right = create_turn_right(servo_controler)
# ๐ค Initialize agent
agent = LLMAgent(
model="google_genai:gemini-3-flash-preview",
tools=[move_forward, turn_left, turn_right],
main_camera=main_camera,
servo_controler=servo_controler,
)
# ๐ฏ Give it a task and go!
agent.task = "Approach a human."
agent.go()
๐ค With Voice Commands
Add a microphone and speaker to give your robot voice commands and enable it to speak back to you:
agent = LLMAgent(
model="google_genai:gemini-3-flash-preview",
tools=[move_forward, turn_left, turn_right],
main_camera=main_camera,
servo_controler=servo_controler,
sounddevice_index=2, # ๐๏ธ provide your microphone device index
tts=True, # ๐ enable text-to-speech (robot can speak)
)
Then install Portaudio and Pyaudio for audio support:
sudo apt install portaudio19-dev
pip install pyaudio
Now just say something like "Hey robot, bring me a beer." โ the robot listens continuously and when it hears the wakeword "robot" anywhere in your command, it'll use the entire phrase as its new task.
๐ Full example: examples/2_xlerobot_listening_and_speaking.py
๐ฆพ Add VLA Policy as a Tool
Let's make our robot manipulate with its arms!
First, you need to pretrain your own policy for it - reference here.
After you have your policy, run the policy server in a separate terminal. Let's create a tool for the agent to enable it to use a VLA policy:
from robocrew.robots.XLeRobot.tools import create_vla_single_arm_manipulation
# ๐ฏ Create a specialized manipulation tool
pick_up_notebook = create_vla_single_arm_manipulation(
tool_name="Grab_a_notebook",
tool_description="Manipulation tool to grab a notebook from the table and put it to your basket.",
task_prompt="Grab a notebook.",
server_address="0.0.0.0:8080",
policy_name="Grigorij/act_right-arm-grab-notebook-2",
policy_type="act",
arm_port=right_arm_wheel_usb,
servo_controler=servo_controler,
camera_config={
"main": {"index_or_path": "/dev/camera_center"},
"right_arm": {"index_or_path": "/dev/camera_right"}
},
main_camera_object=main_camera,
policy_device="cpu",
)
๐ Full example: examples/3_xlerobot_arm_manipulation.py
๐ง Give USB Ports Constant Names (Udev Rules)
To ensure your robot's components (cameras, arms, etc.) are always mapped to the same device paths, run the following script to generate udev rules:
robocrew-setup-usb-modules
This script will guide you through connecting each component one by one and will create the necessary udev rules to maintain consistent device naming.
After running the script, you can check the generated rules at /etc/udev/rules.d/99-robocrew.rules, or check the symlinks:
pi@raspberrypi:~ $ ls -l /dev/arm*
lrwxrwxrwx 1 root root 7 Dec 2 11:40 /dev/arm_left -> ttyACM4
lrwxrwxrwx 1 root root 7 Dec 2 11:40 /dev/arm_right -> ttyACM2
pi@raspberrypi:~ $ ls -l /dev/cam*
lrwxrwxrwx 1 root root 6 Dec 2 11:40 /dev/camera_center -> video0
lrwxrwxrwx 1 root root 6 Dec 2 11:40 /dev/camera_right -> video2
๐ Documentation
For detailed documentation, tutorials, and API references, visit our official documentation.
๐ฌ Community & Support
- ๐ญ Join our Discord - Get help, share projects, discuss features
- ๐ Read the Docs - Comprehensive guides and API reference
- ๐ Report Issues - Found a bug? Let us know!
- โญ Star on GitHub - Show your support!
๐ Acknowledgments
Built with โค๏ธ for the robotics and AI community. Special thanks to all contributors and early adopters!
Project details
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 robocrew-0.2.0.tar.gz.
File metadata
- Download URL: robocrew-0.2.0.tar.gz
- Upload date:
- Size: 333.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b48aa02d4ea3a6acd54793736350daed44ee712ef8662db183d9fb29d61805d
|
|
| MD5 |
2367e5ab75c16313cfdfdb6896d072ff
|
|
| BLAKE2b-256 |
6e722aa61772426acf0bbdd631fcf25ad9909a46d81026a0d1a472d7f730e3d7
|
Provenance
The following attestation bundles were made for robocrew-0.2.0.tar.gz:
Publisher:
publish.yml on Grigorij-Dudnik/RoboCrew
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
robocrew-0.2.0.tar.gz -
Subject digest:
1b48aa02d4ea3a6acd54793736350daed44ee712ef8662db183d9fb29d61805d - Sigstore transparency entry: 1149819544
- Sigstore integration time:
-
Permalink:
Grigorij-Dudnik/RoboCrew@e0b041b3c698aa9c789f0a710831eeae3f9a936f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Grigorij-Dudnik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e0b041b3c698aa9c789f0a710831eeae3f9a936f -
Trigger Event:
push
-
Statement type:
File details
Details for the file robocrew-0.2.0-py3-none-any.whl.
File metadata
- Download URL: robocrew-0.2.0-py3-none-any.whl
- Upload date:
- Size: 64.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53894e8c8673bf277c17518b11d91343569326a95bcc92b431fc37b6df17ff34
|
|
| MD5 |
5677ff26229af497e2bdd6011975c051
|
|
| BLAKE2b-256 |
2c895ffcac85e19cc0d0f5641065eb536098a8710ab102b7a4019e5066615ee2
|
Provenance
The following attestation bundles were made for robocrew-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Grigorij-Dudnik/RoboCrew
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
robocrew-0.2.0-py3-none-any.whl -
Subject digest:
53894e8c8673bf277c17518b11d91343569326a95bcc92b431fc37b6df17ff34 - Sigstore transparency entry: 1149819636
- Sigstore integration time:
-
Permalink:
Grigorij-Dudnik/RoboCrew@e0b041b3c698aa9c789f0a710831eeae3f9a936f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Grigorij-Dudnik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e0b041b3c698aa9c789f0a710831eeae3f9a936f -
Trigger Event:
push
-
Statement type: