foodforthought-cli 0.2.1__py3-none-any.whl → 0.2.3__py3-none-any.whl
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.
- ate/__init__.py +1 -1
- ate/bridge_server.py +622 -0
- ate/cli.py +2625 -242
- ate/compatibility.py +580 -0
- ate/generators/__init__.py +19 -0
- ate/generators/docker_generator.py +461 -0
- ate/generators/hardware_config.py +469 -0
- ate/generators/ros2_generator.py +617 -0
- ate/generators/skill_generator.py +783 -0
- ate/marketplace.py +524 -0
- ate/mcp_server.py +1341 -107
- ate/primitives.py +1016 -0
- ate/robot_setup.py +2222 -0
- ate/skill_schema.py +537 -0
- ate/telemetry/__init__.py +33 -0
- ate/telemetry/cli.py +455 -0
- ate/telemetry/collector.py +444 -0
- ate/telemetry/context.py +318 -0
- ate/telemetry/fleet_agent.py +419 -0
- ate/telemetry/formats/__init__.py +18 -0
- ate/telemetry/formats/hdf5_serializer.py +503 -0
- ate/telemetry/formats/mcap_serializer.py +457 -0
- ate/telemetry/types.py +334 -0
- foodforthought_cli-0.2.3.dist-info/METADATA +300 -0
- foodforthought_cli-0.2.3.dist-info/RECORD +44 -0
- foodforthought_cli-0.2.3.dist-info/top_level.txt +6 -0
- mechdog_labeled/__init__.py +3 -0
- mechdog_labeled/primitives.py +113 -0
- mechdog_labeled/servo_map.py +209 -0
- mechdog_output/__init__.py +3 -0
- mechdog_output/primitives.py +59 -0
- mechdog_output/servo_map.py +203 -0
- test_autodetect/__init__.py +3 -0
- test_autodetect/primitives.py +113 -0
- test_autodetect/servo_map.py +209 -0
- test_full_auto/__init__.py +3 -0
- test_full_auto/primitives.py +113 -0
- test_full_auto/servo_map.py +209 -0
- test_smart_detect/__init__.py +3 -0
- test_smart_detect/primitives.py +113 -0
- test_smart_detect/servo_map.py +209 -0
- foodforthought_cli-0.2.1.dist-info/METADATA +0 -151
- foodforthought_cli-0.2.1.dist-info/RECORD +0 -9
- foodforthought_cli-0.2.1.dist-info/top_level.txt +0 -1
- {foodforthought_cli-0.2.1.dist-info → foodforthought_cli-0.2.3.dist-info}/WHEEL +0 -0
- {foodforthought_cli-0.2.1.dist-info → foodforthought_cli-0.2.3.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Servo map for unnamed_robot
|
|
3
|
+
Generated by ate robot-setup wizard
|
|
4
|
+
Robot type: quadruped_with_arm
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from enum import IntEnum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ServoID(IntEnum):
|
|
11
|
+
"""Servo IDs mapped to descriptive names."""
|
|
12
|
+
FRONT_RIGHT_HIP = 0
|
|
13
|
+
FRONT_RIGHT_UPPER = 1
|
|
14
|
+
FRONT_RIGHT_LOWER = 2
|
|
15
|
+
FRONT_LEFT_HIP = 3
|
|
16
|
+
FRONT_LEFT_UPPER = 4
|
|
17
|
+
FRONT_LEFT_LOWER = 5
|
|
18
|
+
BACK_RIGHT_HIP = 6
|
|
19
|
+
BACK_RIGHT_UPPER = 7
|
|
20
|
+
BACK_RIGHT_LOWER = 8
|
|
21
|
+
BACK_LEFT_HIP = 9
|
|
22
|
+
BACK_LEFT_UPPER = 10
|
|
23
|
+
BACK_LEFT_LOWER = 11
|
|
24
|
+
ARM_SHOULDER = 12
|
|
25
|
+
ARM_ELBOW = 13
|
|
26
|
+
ARM_GRIPPER = 15
|
|
27
|
+
SERVO_16 = 16
|
|
28
|
+
SERVO_17 = 17
|
|
29
|
+
SERVO_18 = 18
|
|
30
|
+
SERVO_19 = 19
|
|
31
|
+
SERVO_20 = 20
|
|
32
|
+
SERVO_21 = 21
|
|
33
|
+
SERVO_22 = 22
|
|
34
|
+
SERVO_23 = 23
|
|
35
|
+
SERVO_24 = 24
|
|
36
|
+
SERVO_25 = 25
|
|
37
|
+
SERVO_26 = 26
|
|
38
|
+
SERVO_28 = 28
|
|
39
|
+
SERVO_29 = 29
|
|
40
|
+
SERVO_30 = 30
|
|
41
|
+
SERVO_31 = 31
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Servo groups
|
|
45
|
+
FRONT_RIGHT_LEG = [ServoID.FRONT_RIGHT_HIP, ServoID.FRONT_RIGHT_UPPER, ServoID.FRONT_RIGHT_LOWER]
|
|
46
|
+
FRONT_LEFT_LEG = [ServoID.FRONT_LEFT_HIP, ServoID.FRONT_LEFT_UPPER, ServoID.FRONT_LEFT_LOWER]
|
|
47
|
+
BACK_RIGHT_LEG = [ServoID.BACK_RIGHT_HIP, ServoID.BACK_RIGHT_UPPER, ServoID.BACK_RIGHT_LOWER]
|
|
48
|
+
BACK_LEFT_LEG = [ServoID.BACK_LEFT_HIP, ServoID.BACK_LEFT_UPPER, ServoID.BACK_LEFT_LOWER]
|
|
49
|
+
ARM = [ServoID.ARM_SHOULDER, ServoID.ARM_ELBOW, ServoID.ARM_GRIPPER]
|
|
50
|
+
OTHER = [ServoID.SERVO_16, ServoID.SERVO_17, ServoID.SERVO_18, ServoID.SERVO_19, ServoID.SERVO_20, ServoID.SERVO_21, ServoID.SERVO_22, ServoID.SERVO_23, ServoID.SERVO_24, ServoID.SERVO_25, ServoID.SERVO_26, ServoID.SERVO_28, ServoID.SERVO_29, ServoID.SERVO_30, ServoID.SERVO_31]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# All servos
|
|
54
|
+
ALL_SERVOS = list(ServoID)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# Servo characteristics
|
|
58
|
+
SERVO_LIMITS = {
|
|
59
|
+
ServoID.FRONT_RIGHT_HIP: {
|
|
60
|
+
"min": 0,
|
|
61
|
+
"max": 1000,
|
|
62
|
+
"center": 500,
|
|
63
|
+
},
|
|
64
|
+
ServoID.FRONT_RIGHT_UPPER: {
|
|
65
|
+
"min": 0,
|
|
66
|
+
"max": 1000,
|
|
67
|
+
"center": 500,
|
|
68
|
+
},
|
|
69
|
+
ServoID.FRONT_RIGHT_LOWER: {
|
|
70
|
+
"min": 0,
|
|
71
|
+
"max": 1000,
|
|
72
|
+
"center": 500,
|
|
73
|
+
},
|
|
74
|
+
ServoID.FRONT_LEFT_HIP: {
|
|
75
|
+
"min": 0,
|
|
76
|
+
"max": 1000,
|
|
77
|
+
"center": 500,
|
|
78
|
+
},
|
|
79
|
+
ServoID.FRONT_LEFT_UPPER: {
|
|
80
|
+
"min": 0,
|
|
81
|
+
"max": 1000,
|
|
82
|
+
"center": 500,
|
|
83
|
+
},
|
|
84
|
+
ServoID.FRONT_LEFT_LOWER: {
|
|
85
|
+
"min": 0,
|
|
86
|
+
"max": 1000,
|
|
87
|
+
"center": 500,
|
|
88
|
+
},
|
|
89
|
+
ServoID.BACK_RIGHT_HIP: {
|
|
90
|
+
"min": 0,
|
|
91
|
+
"max": 1000,
|
|
92
|
+
"center": 500,
|
|
93
|
+
},
|
|
94
|
+
ServoID.BACK_RIGHT_UPPER: {
|
|
95
|
+
"min": 0,
|
|
96
|
+
"max": 1000,
|
|
97
|
+
"center": 500,
|
|
98
|
+
},
|
|
99
|
+
ServoID.BACK_RIGHT_LOWER: {
|
|
100
|
+
"min": 0,
|
|
101
|
+
"max": 1000,
|
|
102
|
+
"center": 500,
|
|
103
|
+
},
|
|
104
|
+
ServoID.BACK_LEFT_HIP: {
|
|
105
|
+
"min": 0,
|
|
106
|
+
"max": 1000,
|
|
107
|
+
"center": 500,
|
|
108
|
+
},
|
|
109
|
+
ServoID.BACK_LEFT_UPPER: {
|
|
110
|
+
"min": 0,
|
|
111
|
+
"max": 1000,
|
|
112
|
+
"center": 500,
|
|
113
|
+
},
|
|
114
|
+
ServoID.BACK_LEFT_LOWER: {
|
|
115
|
+
"min": 0,
|
|
116
|
+
"max": 1000,
|
|
117
|
+
"center": 500,
|
|
118
|
+
},
|
|
119
|
+
ServoID.ARM_SHOULDER: {
|
|
120
|
+
"min": 0,
|
|
121
|
+
"max": 1000,
|
|
122
|
+
"center": 500,
|
|
123
|
+
},
|
|
124
|
+
ServoID.ARM_ELBOW: {
|
|
125
|
+
"min": 0,
|
|
126
|
+
"max": 1000,
|
|
127
|
+
"center": 500,
|
|
128
|
+
},
|
|
129
|
+
ServoID.ARM_GRIPPER: {
|
|
130
|
+
"min": 0,
|
|
131
|
+
"max": 1000,
|
|
132
|
+
"center": 500,
|
|
133
|
+
},
|
|
134
|
+
ServoID.SERVO_16: {
|
|
135
|
+
"min": 0,
|
|
136
|
+
"max": 1000,
|
|
137
|
+
"center": 500,
|
|
138
|
+
},
|
|
139
|
+
ServoID.SERVO_17: {
|
|
140
|
+
"min": 0,
|
|
141
|
+
"max": 1000,
|
|
142
|
+
"center": 500,
|
|
143
|
+
},
|
|
144
|
+
ServoID.SERVO_18: {
|
|
145
|
+
"min": 0,
|
|
146
|
+
"max": 1000,
|
|
147
|
+
"center": 500,
|
|
148
|
+
},
|
|
149
|
+
ServoID.SERVO_19: {
|
|
150
|
+
"min": 0,
|
|
151
|
+
"max": 1000,
|
|
152
|
+
"center": 500,
|
|
153
|
+
},
|
|
154
|
+
ServoID.SERVO_20: {
|
|
155
|
+
"min": 0,
|
|
156
|
+
"max": 1000,
|
|
157
|
+
"center": 500,
|
|
158
|
+
},
|
|
159
|
+
ServoID.SERVO_21: {
|
|
160
|
+
"min": 0,
|
|
161
|
+
"max": 1000,
|
|
162
|
+
"center": 500,
|
|
163
|
+
},
|
|
164
|
+
ServoID.SERVO_22: {
|
|
165
|
+
"min": 0,
|
|
166
|
+
"max": 1000,
|
|
167
|
+
"center": 500,
|
|
168
|
+
},
|
|
169
|
+
ServoID.SERVO_23: {
|
|
170
|
+
"min": 0,
|
|
171
|
+
"max": 1000,
|
|
172
|
+
"center": 500,
|
|
173
|
+
},
|
|
174
|
+
ServoID.SERVO_24: {
|
|
175
|
+
"min": 0,
|
|
176
|
+
"max": 1000,
|
|
177
|
+
"center": 500,
|
|
178
|
+
},
|
|
179
|
+
ServoID.SERVO_25: {
|
|
180
|
+
"min": 0,
|
|
181
|
+
"max": 1000,
|
|
182
|
+
"center": 500,
|
|
183
|
+
},
|
|
184
|
+
ServoID.SERVO_26: {
|
|
185
|
+
"min": 0,
|
|
186
|
+
"max": 1000,
|
|
187
|
+
"center": 500,
|
|
188
|
+
},
|
|
189
|
+
ServoID.SERVO_28: {
|
|
190
|
+
"min": 0,
|
|
191
|
+
"max": 1000,
|
|
192
|
+
"center": 500,
|
|
193
|
+
},
|
|
194
|
+
ServoID.SERVO_29: {
|
|
195
|
+
"min": 0,
|
|
196
|
+
"max": 1000,
|
|
197
|
+
"center": 500,
|
|
198
|
+
},
|
|
199
|
+
ServoID.SERVO_30: {
|
|
200
|
+
"min": 0,
|
|
201
|
+
"max": 1000,
|
|
202
|
+
"center": 500,
|
|
203
|
+
},
|
|
204
|
+
ServoID.SERVO_31: {
|
|
205
|
+
"min": 0,
|
|
206
|
+
"max": 1000,
|
|
207
|
+
"center": 500,
|
|
208
|
+
},
|
|
209
|
+
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: foodforthought-cli
|
|
3
|
-
Version: 0.2.1
|
|
4
|
-
Summary: CLI tool for FoodforThought robotics repository platform - manage robot skills and data
|
|
5
|
-
Home-page: https://kindly.fyi/foodforthought
|
|
6
|
-
Author: Kindly Robotics
|
|
7
|
-
Author-email: hello@kindly.fyi
|
|
8
|
-
Project-URL: Homepage, https://kindly.fyi
|
|
9
|
-
Project-URL: Documentation, https://kindly.fyi/foodforthought/cli
|
|
10
|
-
Project-URL: Source, https://github.com/kindlyrobotics/monorepo
|
|
11
|
-
Project-URL: Bug Tracker, https://github.com/kindlyrobotics/monorepo/issues
|
|
12
|
-
Keywords: robotics,robot-skills,machine-learning,data-management,cli
|
|
13
|
-
Classifier: Development Status :: 3 - Alpha
|
|
14
|
-
Classifier: Intended Audience :: Developers
|
|
15
|
-
Classifier: Intended Audience :: Science/Research
|
|
16
|
-
Classifier: Topic :: Software Development :: Version Control
|
|
17
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
19
|
-
Classifier: Programming Language :: Python :: 3
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
-
Requires-Python: >=3.8
|
|
26
|
-
Description-Content-Type: text/markdown
|
|
27
|
-
Requires-Dist: requests>=2.28.0
|
|
28
|
-
Dynamic: author
|
|
29
|
-
Dynamic: author-email
|
|
30
|
-
Dynamic: classifier
|
|
31
|
-
Dynamic: description
|
|
32
|
-
Dynamic: description-content-type
|
|
33
|
-
Dynamic: home-page
|
|
34
|
-
Dynamic: keywords
|
|
35
|
-
Dynamic: project-url
|
|
36
|
-
Dynamic: requires-dist
|
|
37
|
-
Dynamic: requires-python
|
|
38
|
-
Dynamic: summary
|
|
39
|
-
|
|
40
|
-
# FoodforThought CLI
|
|
41
|
-
|
|
42
|
-
GitHub-like CLI tool for the FoodforThought robotics repository platform.
|
|
43
|
-
|
|
44
|
-
## Installation
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
pip install foodforthought-cli
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Or install from source:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
cd foodforthought-cli
|
|
54
|
-
pip install -e .
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Configuration
|
|
58
|
-
|
|
59
|
-
Set environment variables:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
export ATE_API_URL="https://kindly.fyi/api"
|
|
63
|
-
export ATE_API_KEY="your-api-key-here"
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Usage
|
|
67
|
-
|
|
68
|
-
### Initialize a repository
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
ate init my-robot-skill -d "A skill for my robot" -v public
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Clone a repository
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
ate clone <repository-id>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Create a commit
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
ate commit -m "Add new control algorithm"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Push to remote
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
ate push -b main
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Deploy to robot
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
ate deploy unitree-r1
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Commands
|
|
99
|
-
|
|
100
|
-
### Repository Management
|
|
101
|
-
- `ate init <name>` - Initialize a new repository
|
|
102
|
-
- `ate clone <repo-id>` - Clone a repository
|
|
103
|
-
- `ate commit -m <message>` - Create a commit
|
|
104
|
-
- `ate push [-b <branch>]` - Push commits to remote
|
|
105
|
-
|
|
106
|
-
### Skill Pipeline
|
|
107
|
-
- `ate pull <skill-id> [--robot <robot>] [--format json|rlds|lerobot] [--output ./data]` - Pull skill data for training
|
|
108
|
-
- `ate upload <video-path> --robot <robot> --task <task> [--project <id>]` - Upload demonstrations for labeling
|
|
109
|
-
- `ate check-transfer --from <source-robot> --to <target-robot> [--skill <id>]` - Check skill transfer compatibility
|
|
110
|
-
- `ate labeling-status <job-id>` - Check labeling job status
|
|
111
|
-
|
|
112
|
-
### Deployment & Testing
|
|
113
|
-
- `ate deploy <robot-type>` - Deploy to a robot (e.g., unitree-r1)
|
|
114
|
-
- `ate test [-e gazebo|mujoco|pybullet|webots] [-r robot]` - Test skills in simulation
|
|
115
|
-
- `ate benchmark [-t speed|accuracy|robustness|efficiency|all]` - Run performance benchmarks
|
|
116
|
-
- `ate adapt <source-robot> <target-robot>` - Adapt skills between robots
|
|
117
|
-
|
|
118
|
-
### Safety & Validation
|
|
119
|
-
- `ate validate [-c collision|speed|workspace|force|all]` - Validate safety and compliance
|
|
120
|
-
- `ate stream [start|stop|status] [-s sensors...]` - Stream sensor data
|
|
121
|
-
|
|
122
|
-
## Cursor IDE Integration (MCP)
|
|
123
|
-
|
|
124
|
-
FoodforThought CLI supports Model Context Protocol (MCP) for integration with Cursor IDE.
|
|
125
|
-
|
|
126
|
-
### Installation
|
|
127
|
-
|
|
128
|
-
1. Install MCP dependencies:
|
|
129
|
-
```bash
|
|
130
|
-
pip install -r requirements-mcp.txt
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
2. Get your MCP configuration from the [FoodforThought homepage](https://kindly.fyi/foodforthought)
|
|
134
|
-
|
|
135
|
-
3. Place `mcp.json` in `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project)
|
|
136
|
-
|
|
137
|
-
4. Set your `ATE_API_KEY` environment variable
|
|
138
|
-
|
|
139
|
-
5. Restart Cursor
|
|
140
|
-
|
|
141
|
-
### Available MCP Tools
|
|
142
|
-
|
|
143
|
-
- `ate_init` - Initialize a new repository
|
|
144
|
-
- `ate_clone` - Clone a repository
|
|
145
|
-
- `ate_list_repositories` - List available repositories
|
|
146
|
-
- `ate_list_robots` - List robot profiles
|
|
147
|
-
- `ate_compatibility` - Check skill compatibility between robots
|
|
148
|
-
- `ate_adapt` - Generate adaptation plans for skills
|
|
149
|
-
|
|
150
|
-
See the [MCP documentation](https://cursor.com/docs/context/mcp) for more information.
|
|
151
|
-
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
ate/__init__.py,sha256=qPoCARNEyfQQcCjyLreqZPo3DFzEv5HtpqptxSl87JE,105
|
|
2
|
-
ate/cli.py,sha256=YjJF7KpgcyHRxqt0rMJfo4kS-FlUvmNF8nmDuRIn3do,72671
|
|
3
|
-
ate/generator.py,sha256=DUPat3cmoe9ufPajHFoI5kK6tfvPtVtB9gLvTlJzPdU,18308
|
|
4
|
-
ate/mcp_server.py,sha256=OB-USau35Lfjvu_qQ5G1GjvpsiZTCM_i-YKz3h2SHmE,51934
|
|
5
|
-
foodforthought_cli-0.2.1.dist-info/METADATA,sha256=mc_SnIdxzil4jha-hbN_OB8RrIzlIt2_YIIqMZRiCs8,4353
|
|
6
|
-
foodforthought_cli-0.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
7
|
-
foodforthought_cli-0.2.1.dist-info/entry_points.txt,sha256=JSxWuXCbGllyHqVJpomP_BDlXYpiNglM9Mo6bEmQK1A,37
|
|
8
|
-
foodforthought_cli-0.2.1.dist-info/top_level.txt,sha256=dlAru-z7a6fWHgnrMWcQhKc8D4eSTXSpFLIUoWZwDlE,4
|
|
9
|
-
foodforthought_cli-0.2.1.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ate
|
|
File without changes
|
|
File without changes
|