robotclaw 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- robotclaw-0.1.0/CHANGELOG.md +31 -0
- robotclaw-0.1.0/LICENSE +21 -0
- robotclaw-0.1.0/MANIFEST.in +3 -0
- robotclaw-0.1.0/PKG-INFO +196 -0
- robotclaw-0.1.0/README.md +163 -0
- robotclaw-0.1.0/pyproject.toml +55 -0
- robotclaw-0.1.0/setup.cfg +4 -0
- robotclaw-0.1.0/src/roboclaw/__init__.py +21 -0
- robotclaw-0.1.0/src/roboclaw/cli.py +276 -0
- robotclaw-0.1.0/src/roboclaw/openclaw_skill.py +210 -0
- robotclaw-0.1.0/src/roboclaw/recorder/__init__.py +12 -0
- robotclaw-0.1.0/src/roboclaw/recorder/motion_data.py +92 -0
- robotclaw-0.1.0/src/roboclaw/recorder/player.py +132 -0
- robotclaw-0.1.0/src/roboclaw/recorder/recorder.py +122 -0
- robotclaw-0.1.0/src/roboclaw/robot.py +188 -0
- robotclaw-0.1.0/src/roboclaw/robot_config.py +173 -0
- robotclaw-0.1.0/src/roboclaw/servo_bus.py +353 -0
- robotclaw-0.1.0/src/robotclaw.egg-info/PKG-INFO +196 -0
- robotclaw-0.1.0/src/robotclaw.egg-info/SOURCES.txt +24 -0
- robotclaw-0.1.0/src/robotclaw.egg-info/dependency_links.txt +1 -0
- robotclaw-0.1.0/src/robotclaw.egg-info/entry_points.txt +3 -0
- robotclaw-0.1.0/src/robotclaw.egg-info/requires.txt +6 -0
- robotclaw-0.1.0/src/robotclaw.egg-info/top_level.txt +1 -0
- robotclaw-0.1.0/tests/test_motion_data.py +118 -0
- robotclaw-0.1.0/tests/test_robot_config.py +141 -0
- robotclaw-0.1.0/tests/test_servo_bus.py +113 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
## [0.1.0] - 2026-03-15
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `ServoBus` — LOBOT LX serial bus servo protocol driver
|
|
13
|
+
- Frame building, checksum, thread-safe read/write
|
|
14
|
+
- Commands: move, read position/voltage/temperature, load/unload, scan
|
|
15
|
+
- `RobotConfig` — Hardware configuration data classes
|
|
16
|
+
- `JointConfig`, `LegConfig`, `RobotConfig` with JSON serialization
|
|
17
|
+
- `DEFAULT_CONFIG` — 10 servos, dual-leg biped layout
|
|
18
|
+
- `Robot` — High-level robot controller
|
|
19
|
+
- Joint-level control with automatic direction/offset mapping
|
|
20
|
+
- Context manager support
|
|
21
|
+
- Batch operations: go_home, get_positions, set_joints
|
|
22
|
+
- **Motion Recorder** subsystem
|
|
23
|
+
- `MotionRecorder` — Keyframe-based motion teaching
|
|
24
|
+
- `MotionPlayer` — Playback with variable speed control
|
|
25
|
+
- `MotionClip` / `Keyframe` — JSON-serializable data model
|
|
26
|
+
- **CLI tools**
|
|
27
|
+
- `roboclaw-scan` — Servo bus diagnostic scanner
|
|
28
|
+
- `roboclaw-teach` — Interactive motion teaching terminal
|
|
29
|
+
- **OpenClaw integration**
|
|
30
|
+
- `OpenClawSkill` — Skill adapter for OpenClaw AI agent platform
|
|
31
|
+
- `SKILL.md` — OpenClaw skill descriptor file
|
robotclaw-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 RoboClaw Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
robotclaw-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: robotclaw
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Bridge OpenClaw AI agents with physical servo robots — connecting the digital mind to the physical world
|
|
5
|
+
Author: RoboClaw Contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/roboclaw-project/roboclaw
|
|
8
|
+
Project-URL: Repository, https://github.com/roboclaw-project/roboclaw
|
|
9
|
+
Project-URL: Issues, https://github.com/roboclaw-project/roboclaw/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/roboclaw-project/roboclaw/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: openclaw,robot,servo,ai-agent,robotics,lobot,bus-servo
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Operating System :: OS Independent
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: pyserial>=3.5
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
30
|
+
Requires-Dist: build; extra == "dev"
|
|
31
|
+
Requires-Dist: twine; extra == "dev"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# 🦾 RoboClaw
|
|
35
|
+
|
|
36
|
+
> Bridge OpenClaw AI agents with physical servo robots — connecting the digital mind to the physical world.
|
|
37
|
+
|
|
38
|
+
**RoboClaw** 是一个 Python 库,将 [OpenClaw](https://openclaw.ai) 自主 AI 代理平台与 LOBOT LX 总线舵机机器人深度集成。通过 `pip install roboclaw`,即可让 AI 获得控制物理机器人的能力。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## ✨ Features
|
|
43
|
+
|
|
44
|
+
- 🔌 **LOBOT LX Protocol Driver** — Full implementation of the LX serial bus servo protocol
|
|
45
|
+
- 🤖 **High-Level Robot API** — Joint-level control with direction/offset mapping
|
|
46
|
+
- 🎬 **Motion Teaching** — Record, save, and playback robot movements with variable speed
|
|
47
|
+
- 🧠 **OpenClaw Integration** — Skill adapter for AI agent → robot control
|
|
48
|
+
- 🛠️ **CLI Tools** — `roboclaw-scan` for diagnostics, `roboclaw-teach` for interactive teaching
|
|
49
|
+
- ⚡ **Thread-Safe** — All serial operations protected by mutex locks
|
|
50
|
+
|
|
51
|
+
## 📦 Installation
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install roboclaw
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
For development:
|
|
59
|
+
```bash
|
|
60
|
+
pip install roboclaw[dev]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 🚀 Quick Start
|
|
64
|
+
|
|
65
|
+
### Basic Servo Control
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
from roboclaw import ServoBus
|
|
69
|
+
|
|
70
|
+
# Connect to servo bus
|
|
71
|
+
bus = ServoBus()
|
|
72
|
+
bus.connect("COM3", baudrate=115200)
|
|
73
|
+
|
|
74
|
+
# Move servo ID=1 to position 500 in 1 second
|
|
75
|
+
bus.move(servo_id=1, position=500, time_ms=1000)
|
|
76
|
+
|
|
77
|
+
# Read current position
|
|
78
|
+
pos = bus.read_position(servo_id=1)
|
|
79
|
+
print(f"Position: {pos}")
|
|
80
|
+
|
|
81
|
+
bus.disconnect()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### High-Level Robot Control
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
from roboclaw import Robot, DEFAULT_CONFIG
|
|
88
|
+
|
|
89
|
+
with Robot(config=DEFAULT_CONFIG, port="COM3") as robot:
|
|
90
|
+
# All joints to home position
|
|
91
|
+
robot.go_home(time_ms=2000)
|
|
92
|
+
|
|
93
|
+
# Move a single joint
|
|
94
|
+
robot.set_joint("left_hip_pitch", position=350, time_ms=500)
|
|
95
|
+
|
|
96
|
+
# Read all joint positions
|
|
97
|
+
positions = robot.get_positions()
|
|
98
|
+
print(positions)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Motion Teaching & Playback
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
from roboclaw import Robot, DEFAULT_CONFIG
|
|
105
|
+
from roboclaw.recorder import MotionRecorder, MotionPlayer
|
|
106
|
+
|
|
107
|
+
with Robot(config=DEFAULT_CONFIG, port="COM3") as robot:
|
|
108
|
+
# Record a motion
|
|
109
|
+
recorder = MotionRecorder(robot)
|
|
110
|
+
recorder.start_recording("wave_hand")
|
|
111
|
+
|
|
112
|
+
robot.unload_all() # Let user pose the robot
|
|
113
|
+
input("Press Enter to capture frame 1...")
|
|
114
|
+
recorder.capture_frame()
|
|
115
|
+
|
|
116
|
+
input("Press Enter to capture frame 2...")
|
|
117
|
+
recorder.capture_frame()
|
|
118
|
+
|
|
119
|
+
clip = recorder.finish_recording()
|
|
120
|
+
recorder.save(clip, "motions/wave_hand.json")
|
|
121
|
+
|
|
122
|
+
# Play it back at 1.5x speed
|
|
123
|
+
robot.load_all()
|
|
124
|
+
player = MotionPlayer(robot)
|
|
125
|
+
player.play(clip, speed=1.5)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### CLI Tools
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Scan for connected servos
|
|
132
|
+
roboclaw-scan --port COM3
|
|
133
|
+
|
|
134
|
+
# Interactive motion teaching
|
|
135
|
+
roboclaw-teach --port COM3
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 🧠 OpenClaw Integration
|
|
139
|
+
|
|
140
|
+
RoboClaw ships with a built-in [OpenClaw](https://openclaw.ai) skill that allows AI agents to control the robot through natural language commands:
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
You: "让机器人回到初始位置"
|
|
144
|
+
AI: → robot.go_home(2000) ✅
|
|
145
|
+
|
|
146
|
+
You: "播放走路动作,2倍速"
|
|
147
|
+
AI: → player.play(walk_clip, speed=2.0) ✅
|
|
148
|
+
|
|
149
|
+
You: "检查所有舵机的电压"
|
|
150
|
+
AI: → robot.scan() → 报告电压状态 ✅
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 🔧 Hardware Requirements
|
|
154
|
+
|
|
155
|
+
| Component | Specification |
|
|
156
|
+
|-----------|---------------|
|
|
157
|
+
| Servos | LOBOT LX-16A / LX-224 / LX-225 bus servos |
|
|
158
|
+
| Interface | USB-to-TTL serial adapter |
|
|
159
|
+
| Baudrate | 115200 (direct) or 9600 (controller board) |
|
|
160
|
+
| Power | 6-8.4V DC, ≥5A for 10 servos |
|
|
161
|
+
| Default Config | 10 servos, 5 per leg (biped) |
|
|
162
|
+
|
|
163
|
+
## 📁 Project Structure
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
src/roboclaw/
|
|
167
|
+
├── __init__.py # Public API exports
|
|
168
|
+
├── servo_bus.py # LOBOT LX protocol driver
|
|
169
|
+
├── robot_config.py # Hardware configuration
|
|
170
|
+
├── robot.py # High-level robot controller
|
|
171
|
+
├── cli.py # CLI entry points
|
|
172
|
+
├── openclaw_skill.py # OpenClaw skill adapter
|
|
173
|
+
├── SKILL.md # OpenClaw skill descriptor
|
|
174
|
+
└── recorder/ # Motion teaching subsystem
|
|
175
|
+
├── motion_data.py # Keyframe & MotionClip models
|
|
176
|
+
├── recorder.py # Motion recorder
|
|
177
|
+
└── player.py # Motion player
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 🤝 Contributing
|
|
181
|
+
|
|
182
|
+
Contributions are welcome! Please see the [CHANGELOG](CHANGELOG.md) for recent changes.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Clone and install in development mode
|
|
186
|
+
git clone https://github.com/roboclaw-project/roboclaw.git
|
|
187
|
+
cd roboclaw
|
|
188
|
+
pip install -e ".[dev]"
|
|
189
|
+
|
|
190
|
+
# Run tests
|
|
191
|
+
python -m pytest tests/ -v
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## 📄 License
|
|
195
|
+
|
|
196
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# 🦾 RoboClaw
|
|
2
|
+
|
|
3
|
+
> Bridge OpenClaw AI agents with physical servo robots — connecting the digital mind to the physical world.
|
|
4
|
+
|
|
5
|
+
**RoboClaw** 是一个 Python 库,将 [OpenClaw](https://openclaw.ai) 自主 AI 代理平台与 LOBOT LX 总线舵机机器人深度集成。通过 `pip install roboclaw`,即可让 AI 获得控制物理机器人的能力。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## ✨ Features
|
|
10
|
+
|
|
11
|
+
- 🔌 **LOBOT LX Protocol Driver** — Full implementation of the LX serial bus servo protocol
|
|
12
|
+
- 🤖 **High-Level Robot API** — Joint-level control with direction/offset mapping
|
|
13
|
+
- 🎬 **Motion Teaching** — Record, save, and playback robot movements with variable speed
|
|
14
|
+
- 🧠 **OpenClaw Integration** — Skill adapter for AI agent → robot control
|
|
15
|
+
- 🛠️ **CLI Tools** — `roboclaw-scan` for diagnostics, `roboclaw-teach` for interactive teaching
|
|
16
|
+
- ⚡ **Thread-Safe** — All serial operations protected by mutex locks
|
|
17
|
+
|
|
18
|
+
## 📦 Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pip install roboclaw
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
For development:
|
|
26
|
+
```bash
|
|
27
|
+
pip install roboclaw[dev]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 🚀 Quick Start
|
|
31
|
+
|
|
32
|
+
### Basic Servo Control
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from roboclaw import ServoBus
|
|
36
|
+
|
|
37
|
+
# Connect to servo bus
|
|
38
|
+
bus = ServoBus()
|
|
39
|
+
bus.connect("COM3", baudrate=115200)
|
|
40
|
+
|
|
41
|
+
# Move servo ID=1 to position 500 in 1 second
|
|
42
|
+
bus.move(servo_id=1, position=500, time_ms=1000)
|
|
43
|
+
|
|
44
|
+
# Read current position
|
|
45
|
+
pos = bus.read_position(servo_id=1)
|
|
46
|
+
print(f"Position: {pos}")
|
|
47
|
+
|
|
48
|
+
bus.disconnect()
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### High-Level Robot Control
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
from roboclaw import Robot, DEFAULT_CONFIG
|
|
55
|
+
|
|
56
|
+
with Robot(config=DEFAULT_CONFIG, port="COM3") as robot:
|
|
57
|
+
# All joints to home position
|
|
58
|
+
robot.go_home(time_ms=2000)
|
|
59
|
+
|
|
60
|
+
# Move a single joint
|
|
61
|
+
robot.set_joint("left_hip_pitch", position=350, time_ms=500)
|
|
62
|
+
|
|
63
|
+
# Read all joint positions
|
|
64
|
+
positions = robot.get_positions()
|
|
65
|
+
print(positions)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Motion Teaching & Playback
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from roboclaw import Robot, DEFAULT_CONFIG
|
|
72
|
+
from roboclaw.recorder import MotionRecorder, MotionPlayer
|
|
73
|
+
|
|
74
|
+
with Robot(config=DEFAULT_CONFIG, port="COM3") as robot:
|
|
75
|
+
# Record a motion
|
|
76
|
+
recorder = MotionRecorder(robot)
|
|
77
|
+
recorder.start_recording("wave_hand")
|
|
78
|
+
|
|
79
|
+
robot.unload_all() # Let user pose the robot
|
|
80
|
+
input("Press Enter to capture frame 1...")
|
|
81
|
+
recorder.capture_frame()
|
|
82
|
+
|
|
83
|
+
input("Press Enter to capture frame 2...")
|
|
84
|
+
recorder.capture_frame()
|
|
85
|
+
|
|
86
|
+
clip = recorder.finish_recording()
|
|
87
|
+
recorder.save(clip, "motions/wave_hand.json")
|
|
88
|
+
|
|
89
|
+
# Play it back at 1.5x speed
|
|
90
|
+
robot.load_all()
|
|
91
|
+
player = MotionPlayer(robot)
|
|
92
|
+
player.play(clip, speed=1.5)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### CLI Tools
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Scan for connected servos
|
|
99
|
+
roboclaw-scan --port COM3
|
|
100
|
+
|
|
101
|
+
# Interactive motion teaching
|
|
102
|
+
roboclaw-teach --port COM3
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 🧠 OpenClaw Integration
|
|
106
|
+
|
|
107
|
+
RoboClaw ships with a built-in [OpenClaw](https://openclaw.ai) skill that allows AI agents to control the robot through natural language commands:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
You: "让机器人回到初始位置"
|
|
111
|
+
AI: → robot.go_home(2000) ✅
|
|
112
|
+
|
|
113
|
+
You: "播放走路动作,2倍速"
|
|
114
|
+
AI: → player.play(walk_clip, speed=2.0) ✅
|
|
115
|
+
|
|
116
|
+
You: "检查所有舵机的电压"
|
|
117
|
+
AI: → robot.scan() → 报告电压状态 ✅
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 🔧 Hardware Requirements
|
|
121
|
+
|
|
122
|
+
| Component | Specification |
|
|
123
|
+
|-----------|---------------|
|
|
124
|
+
| Servos | LOBOT LX-16A / LX-224 / LX-225 bus servos |
|
|
125
|
+
| Interface | USB-to-TTL serial adapter |
|
|
126
|
+
| Baudrate | 115200 (direct) or 9600 (controller board) |
|
|
127
|
+
| Power | 6-8.4V DC, ≥5A for 10 servos |
|
|
128
|
+
| Default Config | 10 servos, 5 per leg (biped) |
|
|
129
|
+
|
|
130
|
+
## 📁 Project Structure
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
src/roboclaw/
|
|
134
|
+
├── __init__.py # Public API exports
|
|
135
|
+
├── servo_bus.py # LOBOT LX protocol driver
|
|
136
|
+
├── robot_config.py # Hardware configuration
|
|
137
|
+
├── robot.py # High-level robot controller
|
|
138
|
+
├── cli.py # CLI entry points
|
|
139
|
+
├── openclaw_skill.py # OpenClaw skill adapter
|
|
140
|
+
├── SKILL.md # OpenClaw skill descriptor
|
|
141
|
+
└── recorder/ # Motion teaching subsystem
|
|
142
|
+
├── motion_data.py # Keyframe & MotionClip models
|
|
143
|
+
├── recorder.py # Motion recorder
|
|
144
|
+
└── player.py # Motion player
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 🤝 Contributing
|
|
148
|
+
|
|
149
|
+
Contributions are welcome! Please see the [CHANGELOG](CHANGELOG.md) for recent changes.
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Clone and install in development mode
|
|
153
|
+
git clone https://github.com/roboclaw-project/roboclaw.git
|
|
154
|
+
cd roboclaw
|
|
155
|
+
pip install -e ".[dev]"
|
|
156
|
+
|
|
157
|
+
# Run tests
|
|
158
|
+
python -m pytest tests/ -v
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 📄 License
|
|
162
|
+
|
|
163
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "robotclaw"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Bridge OpenClaw AI agents with physical servo robots — connecting the digital mind to the physical world"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = "MIT"
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "RoboClaw Contributors" },
|
|
14
|
+
]
|
|
15
|
+
keywords = ["openclaw", "robot", "servo", "ai-agent", "robotics", "lobot", "bus-servo"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"Intended Audience :: Science/Research",
|
|
20
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
21
|
+
"Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator",
|
|
22
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
23
|
+
"Programming Language :: Python :: 3",
|
|
24
|
+
"Programming Language :: Python :: 3.10",
|
|
25
|
+
"Programming Language :: Python :: 3.11",
|
|
26
|
+
"Programming Language :: Python :: 3.12",
|
|
27
|
+
"Programming Language :: Python :: 3.13",
|
|
28
|
+
"Operating System :: OS Independent",
|
|
29
|
+
]
|
|
30
|
+
dependencies = [
|
|
31
|
+
"pyserial>=3.5",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
[project.optional-dependencies]
|
|
35
|
+
dev = [
|
|
36
|
+
"pytest>=7.0",
|
|
37
|
+
"build",
|
|
38
|
+
"twine",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
[project.urls]
|
|
42
|
+
Homepage = "https://github.com/roboclaw-project/roboclaw"
|
|
43
|
+
Repository = "https://github.com/roboclaw-project/roboclaw"
|
|
44
|
+
Issues = "https://github.com/roboclaw-project/roboclaw/issues"
|
|
45
|
+
Changelog = "https://github.com/roboclaw-project/roboclaw/blob/main/CHANGELOG.md"
|
|
46
|
+
|
|
47
|
+
[project.scripts]
|
|
48
|
+
roboclaw-scan = "roboclaw.cli:scan_main"
|
|
49
|
+
roboclaw-teach = "roboclaw.cli:teach_main"
|
|
50
|
+
|
|
51
|
+
[tool.setuptools.packages.find]
|
|
52
|
+
where = ["src"]
|
|
53
|
+
|
|
54
|
+
[tool.pytest.ini_options]
|
|
55
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""RoboClaw - Bridge OpenClaw AI agents with physical servo robots.
|
|
2
|
+
|
|
3
|
+
Connecting the digital mind to the physical world by integrating
|
|
4
|
+
OpenClaw autonomous AI agent platform with LOBOT LX bus servo robots.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
__version__ = "0.1.0"
|
|
8
|
+
|
|
9
|
+
from .servo_bus import ServoBus
|
|
10
|
+
from .robot_config import JointConfig, LegConfig, RobotConfig, DEFAULT_CONFIG
|
|
11
|
+
from .robot import Robot
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"__version__",
|
|
15
|
+
"ServoBus",
|
|
16
|
+
"JointConfig",
|
|
17
|
+
"LegConfig",
|
|
18
|
+
"RobotConfig",
|
|
19
|
+
"DEFAULT_CONFIG",
|
|
20
|
+
"Robot",
|
|
21
|
+
]
|