foodforthought-cli 0.2.4__py3-none-any.whl → 0.2.8__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/behaviors/__init__.py +88 -0
- ate/behaviors/common.py +686 -0
- ate/behaviors/tree.py +454 -0
- ate/cli.py +610 -54
- ate/drivers/__init__.py +27 -0
- ate/drivers/mechdog.py +606 -0
- ate/interfaces/__init__.py +171 -0
- ate/interfaces/base.py +271 -0
- ate/interfaces/body.py +267 -0
- ate/interfaces/detection.py +282 -0
- ate/interfaces/locomotion.py +422 -0
- ate/interfaces/manipulation.py +408 -0
- ate/interfaces/navigation.py +389 -0
- ate/interfaces/perception.py +362 -0
- ate/interfaces/types.py +371 -0
- ate/mcp_server.py +387 -0
- ate/recording/__init__.py +44 -0
- ate/recording/demonstration.py +378 -0
- ate/recording/session.py +405 -0
- ate/recording/upload.py +304 -0
- ate/recording/wrapper.py +95 -0
- ate/robot/__init__.py +79 -0
- ate/robot/calibration.py +583 -0
- ate/robot/commands.py +3603 -0
- ate/robot/discovery.py +339 -0
- ate/robot/introspection.py +330 -0
- ate/robot/manager.py +270 -0
- ate/robot/profiles.py +275 -0
- ate/robot/registry.py +319 -0
- ate/robot/skill_upload.py +393 -0
- ate/robot/visual_labeler.py +1039 -0
- {foodforthought_cli-0.2.4.dist-info → foodforthought_cli-0.2.8.dist-info}/METADATA +9 -1
- {foodforthought_cli-0.2.4.dist-info → foodforthought_cli-0.2.8.dist-info}/RECORD +37 -8
- {foodforthought_cli-0.2.4.dist-info → foodforthought_cli-0.2.8.dist-info}/WHEEL +0 -0
- {foodforthought_cli-0.2.4.dist-info → foodforthought_cli-0.2.8.dist-info}/entry_points.txt +0 -0
- {foodforthought_cli-0.2.4.dist-info → foodforthought_cli-0.2.8.dist-info}/top_level.txt +0 -0
ate/recording/wrapper.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Recording wrapper for automatic telemetry capture.
|
|
3
|
+
|
|
4
|
+
Provides a simpler API than RecordingSession for cases where you
|
|
5
|
+
want to wrap a driver and record everything automatically.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Optional
|
|
9
|
+
from ate.interfaces import RobotInterface
|
|
10
|
+
from .session import RecordingSession
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RecordingWrapper:
|
|
14
|
+
"""
|
|
15
|
+
Wrapper that automatically records all driver interactions.
|
|
16
|
+
|
|
17
|
+
Unlike RecordingSession (context manager), RecordingWrapper creates
|
|
18
|
+
a persistent recording that captures everything until explicitly stopped.
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
# Wrap a driver
|
|
22
|
+
raw_driver = MechDogDriver(port="/dev/...")
|
|
23
|
+
driver = RecordingWrapper(raw_driver, name="session_01")
|
|
24
|
+
|
|
25
|
+
# Use driver normally - all calls are recorded
|
|
26
|
+
driver.connect()
|
|
27
|
+
driver.stand()
|
|
28
|
+
driver.walk(Vector3.forward(), speed=0.3)
|
|
29
|
+
driver.stop()
|
|
30
|
+
driver.disconnect()
|
|
31
|
+
|
|
32
|
+
# Save the recording
|
|
33
|
+
driver.save_recording("session_01.demonstration")
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(
|
|
37
|
+
self,
|
|
38
|
+
driver: RobotInterface,
|
|
39
|
+
name: str = "recording",
|
|
40
|
+
description: Optional[str] = None,
|
|
41
|
+
auto_start: bool = True,
|
|
42
|
+
):
|
|
43
|
+
"""
|
|
44
|
+
Initialize recording wrapper.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
driver: Robot driver to wrap
|
|
48
|
+
name: Recording name
|
|
49
|
+
description: Optional description
|
|
50
|
+
auto_start: Start recording immediately
|
|
51
|
+
"""
|
|
52
|
+
self._driver = driver
|
|
53
|
+
self._session = RecordingSession(
|
|
54
|
+
driver,
|
|
55
|
+
name=name,
|
|
56
|
+
description=description,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
if auto_start:
|
|
60
|
+
self._session.start()
|
|
61
|
+
|
|
62
|
+
def __getattr__(self, name: str):
|
|
63
|
+
"""Forward attribute access to wrapped driver."""
|
|
64
|
+
return getattr(self._driver, name)
|
|
65
|
+
|
|
66
|
+
def start_recording(self) -> None:
|
|
67
|
+
"""Start recording (if not already)."""
|
|
68
|
+
self._session.start()
|
|
69
|
+
|
|
70
|
+
def stop_recording(self) -> None:
|
|
71
|
+
"""Stop recording."""
|
|
72
|
+
self._session.stop()
|
|
73
|
+
|
|
74
|
+
def save_recording(self, path: str) -> None:
|
|
75
|
+
"""Save recording to file."""
|
|
76
|
+
self._session.save(path)
|
|
77
|
+
|
|
78
|
+
def get_recording_summary(self) -> str:
|
|
79
|
+
"""Get recording summary."""
|
|
80
|
+
return self._session.summary()
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def is_recording(self) -> bool:
|
|
84
|
+
"""Check if currently recording."""
|
|
85
|
+
return self._session.is_recording
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def recording_duration(self) -> Optional[float]:
|
|
89
|
+
"""Get recording duration in seconds."""
|
|
90
|
+
return self._session.duration
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def call_count(self) -> int:
|
|
94
|
+
"""Get number of recorded calls."""
|
|
95
|
+
return len(self._session.calls)
|
ate/robot/__init__.py
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Robot management system for ATE.
|
|
3
|
+
|
|
4
|
+
Provides:
|
|
5
|
+
- Auto-discovery of robots on network and USB
|
|
6
|
+
- Robot profiles for easy configuration
|
|
7
|
+
- Capability introspection
|
|
8
|
+
- Interactive setup wizard
|
|
9
|
+
|
|
10
|
+
Example usage:
|
|
11
|
+
from ate.robot import RobotManager, discover_robots
|
|
12
|
+
|
|
13
|
+
# Auto-discover robots
|
|
14
|
+
found = discover_robots()
|
|
15
|
+
# > [DiscoveredRobot(type='mechdog', port='/dev/cu.usbserial-10', camera_ip='192.168.1.100')]
|
|
16
|
+
|
|
17
|
+
# Load saved profile
|
|
18
|
+
manager = RobotManager()
|
|
19
|
+
dog = manager.get_robot("my_mechdog")
|
|
20
|
+
|
|
21
|
+
# Introspect capabilities
|
|
22
|
+
info = manager.get_capabilities(dog)
|
|
23
|
+
# > {'locomotion': ['walk', 'turn', 'stand'], 'camera': ['get_image']}
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from .discovery import (
|
|
27
|
+
DiscoveredRobot,
|
|
28
|
+
discover_robots,
|
|
29
|
+
discover_serial_robots,
|
|
30
|
+
discover_network_cameras,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
from .profiles import (
|
|
34
|
+
RobotProfile,
|
|
35
|
+
load_profile,
|
|
36
|
+
save_profile,
|
|
37
|
+
list_profiles,
|
|
38
|
+
delete_profile,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
from .registry import (
|
|
42
|
+
RobotRegistry,
|
|
43
|
+
KNOWN_ROBOTS,
|
|
44
|
+
get_robot_info,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
from .introspection import (
|
|
48
|
+
get_capabilities,
|
|
49
|
+
get_methods,
|
|
50
|
+
test_capability,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
from .manager import (
|
|
54
|
+
RobotManager,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
__all__ = [
|
|
58
|
+
# Discovery
|
|
59
|
+
"DiscoveredRobot",
|
|
60
|
+
"discover_robots",
|
|
61
|
+
"discover_serial_robots",
|
|
62
|
+
"discover_network_cameras",
|
|
63
|
+
# Profiles
|
|
64
|
+
"RobotProfile",
|
|
65
|
+
"load_profile",
|
|
66
|
+
"save_profile",
|
|
67
|
+
"list_profiles",
|
|
68
|
+
"delete_profile",
|
|
69
|
+
# Registry
|
|
70
|
+
"RobotRegistry",
|
|
71
|
+
"KNOWN_ROBOTS",
|
|
72
|
+
"get_robot_info",
|
|
73
|
+
# Introspection
|
|
74
|
+
"get_capabilities",
|
|
75
|
+
"get_methods",
|
|
76
|
+
"test_capability",
|
|
77
|
+
# Manager
|
|
78
|
+
"RobotManager",
|
|
79
|
+
]
|