dexcontrol 0.2.10__py3-none-any.whl → 0.2.12__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.
- dexcontrol/__init__.py +1 -0
- dexcontrol/config/core/arm.py +5 -1
- dexcontrol/config/core/hand.py +1 -1
- dexcontrol/config/core/head.py +7 -8
- dexcontrol/config/core/misc.py +14 -1
- dexcontrol/config/core/torso.py +8 -4
- dexcontrol/config/sensors/cameras/__init__.py +2 -1
- dexcontrol/config/sensors/cameras/luxonis_camera.py +51 -0
- dexcontrol/config/sensors/cameras/rgb_camera.py +1 -1
- dexcontrol/config/sensors/cameras/zed_camera.py +2 -2
- dexcontrol/config/sensors/vega_sensors.py +9 -1
- dexcontrol/config/vega.py +30 -2
- dexcontrol/core/arm.py +71 -46
- dexcontrol/core/component.py +41 -4
- dexcontrol/core/head.py +35 -23
- dexcontrol/core/misc.py +94 -13
- dexcontrol/core/torso.py +24 -6
- dexcontrol/proto/dexcontrol_msg_pb2.py +38 -36
- dexcontrol/proto/dexcontrol_msg_pb2.pyi +48 -20
- dexcontrol/proto/dexcontrol_query_pb2.py +7 -3
- dexcontrol/proto/dexcontrol_query_pb2.pyi +24 -0
- dexcontrol/robot.py +232 -68
- dexcontrol/sensors/__init__.py +2 -1
- dexcontrol/sensors/camera/__init__.py +2 -0
- dexcontrol/sensors/camera/luxonis_camera.py +169 -0
- dexcontrol/sensors/camera/zed_camera.py +17 -8
- dexcontrol/sensors/imu/chassis_imu.py +5 -1
- dexcontrol/sensors/imu/zed_imu.py +3 -2
- dexcontrol/sensors/lidar/rplidar.py +1 -0
- dexcontrol/sensors/manager.py +3 -0
- dexcontrol/utils/constants.py +3 -0
- dexcontrol/utils/error_code.py +236 -0
- dexcontrol/utils/subscribers/lidar.py +1 -0
- dexcontrol/utils/trajectory_utils.py +17 -5
- dexcontrol/utils/viz_utils.py +86 -11
- dexcontrol/utils/zenoh_utils.py +39 -0
- {dexcontrol-0.2.10.dist-info → dexcontrol-0.2.12.dist-info}/METADATA +4 -2
- dexcontrol-0.2.12.dist-info/RECORD +75 -0
- dexcontrol-0.2.10.dist-info/RECORD +0 -72
- {dexcontrol-0.2.10.dist-info → dexcontrol-0.2.12.dist-info}/WHEEL +0 -0
- {dexcontrol-0.2.10.dist-info → dexcontrol-0.2.12.dist-info}/licenses/LICENSE +0 -0
dexcontrol/utils/viz_utils.py
CHANGED
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
"""Utility functions for displaying information in a Rich table format."""
|
|
12
12
|
|
|
13
|
+
from loguru import logger
|
|
13
14
|
from rich.console import Console
|
|
14
15
|
from rich.table import Table
|
|
15
16
|
|
|
16
17
|
from dexcontrol.utils.pb_utils import TYPE_SOFTWARE_VERSION
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
def show_software_version(version_info: dict[str, TYPE_SOFTWARE_VERSION])
|
|
20
|
+
def show_software_version(version_info: dict[str, TYPE_SOFTWARE_VERSION]):
|
|
20
21
|
"""Create a Rich table for displaying firmware version information.
|
|
21
22
|
|
|
22
23
|
Args:
|
|
@@ -42,25 +43,26 @@ def show_software_version(version_info: dict[str, TYPE_SOFTWARE_VERSION]) -> Non
|
|
|
42
43
|
console.print(table)
|
|
43
44
|
|
|
44
45
|
|
|
45
|
-
def show_component_status(status_info: dict[str, dict])
|
|
46
|
+
def show_component_status(status_info: dict[str, dict]):
|
|
46
47
|
"""Create a Rich table for displaying component status information.
|
|
47
48
|
|
|
48
49
|
Args:
|
|
49
50
|
status_info: Dictionary containing status info for each component.
|
|
50
51
|
"""
|
|
52
|
+
from dexcontrol.utils.error_code import get_error_description
|
|
51
53
|
from dexcontrol.utils.pb_utils import ComponentStatus
|
|
52
54
|
|
|
53
55
|
table = Table(title="Component Status")
|
|
54
56
|
table.add_column("Component", style="cyan")
|
|
55
57
|
table.add_column("Connected", justify="center")
|
|
56
58
|
table.add_column("Enabled", justify="center")
|
|
57
|
-
table.add_column("Error", justify="
|
|
59
|
+
table.add_column("Error", justify="left")
|
|
58
60
|
|
|
59
61
|
status_icons = {
|
|
60
|
-
True: ":white_check_mark:",
|
|
61
|
-
False: ":x:",
|
|
62
|
-
ComponentStatus.NORMAL: ":white_check_mark:",
|
|
63
|
-
ComponentStatus.NA: "N/A",
|
|
62
|
+
True: "[green]:white_check_mark:[/green]",
|
|
63
|
+
False: "[red]:x:[/red]",
|
|
64
|
+
ComponentStatus.NORMAL: "[green]:white_check_mark:[/green]",
|
|
65
|
+
ComponentStatus.NA: "[dim]N/A[/dim]",
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
# Sort components by name to ensure consistent order
|
|
@@ -70,15 +72,51 @@ def show_component_status(status_info: dict[str, dict]) -> None:
|
|
|
70
72
|
connected = status_icons[status["connected"]]
|
|
71
73
|
|
|
72
74
|
# Format enabled status
|
|
73
|
-
enabled = status_icons.get(status["enabled"], ":x:")
|
|
75
|
+
enabled = status_icons.get(status["enabled"], "[red]:x:[/red]")
|
|
74
76
|
|
|
75
77
|
# Format error status
|
|
76
78
|
if status["error_state"] == ComponentStatus.NORMAL:
|
|
77
|
-
error = ":white_check_mark:"
|
|
79
|
+
error = "[green]:white_check_mark:[/green]"
|
|
78
80
|
elif status["error_state"] == ComponentStatus.NA:
|
|
79
|
-
error = "N/A"
|
|
81
|
+
error = "[dim]N/A[/dim]"
|
|
80
82
|
else:
|
|
81
|
-
error
|
|
83
|
+
# Convert error code to human-readable text
|
|
84
|
+
error_code = status["error_code"]
|
|
85
|
+
if isinstance(error_code, int):
|
|
86
|
+
error_desc = get_error_description(component, error_code)
|
|
87
|
+
# Show both raw code and description with formatting
|
|
88
|
+
if error_code == 0:
|
|
89
|
+
error = "[green]:white_check_mark:[/green]"
|
|
90
|
+
else:
|
|
91
|
+
# Check if this is an unknown error
|
|
92
|
+
if "Unknown" in error_desc:
|
|
93
|
+
# For unknown errors, show the hex code prominently
|
|
94
|
+
error = f"[bold red]:warning: 0x{error_code:08X}[/bold red]\n[dim italic]Unknown error code[/dim italic]"
|
|
95
|
+
else:
|
|
96
|
+
# For known errors, show both code and description
|
|
97
|
+
error = f"[bold red]:warning: 0x{error_code:08X}[/bold red]\n[yellow]{error_desc}[/yellow]"
|
|
98
|
+
else:
|
|
99
|
+
# Handle hex string format if provided
|
|
100
|
+
try:
|
|
101
|
+
error_code_int = (
|
|
102
|
+
int(error_code, 16)
|
|
103
|
+
if isinstance(error_code, str)
|
|
104
|
+
else error_code
|
|
105
|
+
)
|
|
106
|
+
error_desc = get_error_description(component, error_code_int)
|
|
107
|
+
# Show both raw code and description with formatting
|
|
108
|
+
if error_code_int == 0:
|
|
109
|
+
error = "[green]:white_check_mark:[/green]"
|
|
110
|
+
else:
|
|
111
|
+
# Check if this is an unknown error
|
|
112
|
+
if "Unknown" in error_desc:
|
|
113
|
+
# For unknown errors, show the hex code prominently
|
|
114
|
+
error = f"[bold red]:warning: 0x{error_code_int:08X}[/bold red]\n[dim italic]Unknown error code[/dim italic]"
|
|
115
|
+
else:
|
|
116
|
+
# For known errors, show both code and description
|
|
117
|
+
error = f"[bold red]:warning: 0x{error_code_int:08X}[/bold red]\n[yellow]{error_desc}[/yellow]"
|
|
118
|
+
except (ValueError, TypeError):
|
|
119
|
+
error = f"[red]{str(error_code)}[/red]"
|
|
82
120
|
|
|
83
121
|
table.add_row(
|
|
84
122
|
component,
|
|
@@ -89,3 +127,40 @@ def show_component_status(status_info: dict[str, dict]) -> None:
|
|
|
89
127
|
|
|
90
128
|
console = Console()
|
|
91
129
|
console.print(table)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def show_ntp_stats(stats: dict[str, float]):
|
|
133
|
+
"""Display NTP statistics in a Rich table format.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
stats: Dictionary containing NTP statistics (e.g., mean_offset, mean_rtt, etc.).
|
|
137
|
+
"""
|
|
138
|
+
table = Table()
|
|
139
|
+
table.add_column("Time Statistic", style="cyan")
|
|
140
|
+
table.add_column("Value (Unit: second)", justify="right")
|
|
141
|
+
|
|
142
|
+
for key, value in stats.items():
|
|
143
|
+
# Format floats to 6 decimal places, lists as comma-separated, others as str
|
|
144
|
+
if isinstance(value, float):
|
|
145
|
+
value_str = f"{value:.6f}"
|
|
146
|
+
elif isinstance(value, list):
|
|
147
|
+
value_str = ", ".join(
|
|
148
|
+
f"{v:.6f}" if isinstance(v, float) else str(v) for v in value
|
|
149
|
+
)
|
|
150
|
+
else:
|
|
151
|
+
value_str = str(value)
|
|
152
|
+
table.add_row(key, value_str)
|
|
153
|
+
|
|
154
|
+
console = Console()
|
|
155
|
+
console.print(table)
|
|
156
|
+
|
|
157
|
+
if "offset (mean)" in stats:
|
|
158
|
+
offset = stats["offset (mean)"]
|
|
159
|
+
if offset > 0:
|
|
160
|
+
logger.info(
|
|
161
|
+
f"To synchronize: server_time ≈ local_time + {offset:.3f} second"
|
|
162
|
+
)
|
|
163
|
+
else:
|
|
164
|
+
logger.info(
|
|
165
|
+
f"To synchronize: server_time ≈ local_time - {abs(offset):.3f} second"
|
|
166
|
+
)
|
dexcontrol/utils/zenoh_utils.py
CHANGED
|
@@ -17,6 +17,7 @@ communication framework.
|
|
|
17
17
|
import json
|
|
18
18
|
import time
|
|
19
19
|
|
|
20
|
+
import numpy as np
|
|
20
21
|
import zenoh
|
|
21
22
|
from loguru import logger
|
|
22
23
|
|
|
@@ -81,3 +82,41 @@ def query_zenoh_json(
|
|
|
81
82
|
logger.error(f"Query failed after {max_retries + 1} attempts: {e}")
|
|
82
83
|
|
|
83
84
|
return None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def compute_ntp_stats(offsets: list[float], rtts: list[float]) -> dict[str, float]:
|
|
88
|
+
"""Compute NTP statistics, removing outliers based on RTT median and std.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
offsets: List of offset values (seconds).
|
|
92
|
+
rtts: List of round-trip time values (seconds).
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
Dictionary with computed statistics (mean, std, min, max, sample_count) for offset and rtt.
|
|
96
|
+
"""
|
|
97
|
+
offsets_np = np.array(offsets)
|
|
98
|
+
rtts_np = np.array(rtts)
|
|
99
|
+
if len(rtts_np) < 3:
|
|
100
|
+
mask = np.ones_like(rtts_np, dtype=bool)
|
|
101
|
+
else:
|
|
102
|
+
median = np.median(rtts_np)
|
|
103
|
+
std = np.std(rtts_np)
|
|
104
|
+
mask = np.abs(rtts_np - median) <= 2 * std
|
|
105
|
+
offsets_filtered = offsets_np[mask]
|
|
106
|
+
rtts_filtered = rtts_np[mask]
|
|
107
|
+
|
|
108
|
+
def safe_stat(arr, func):
|
|
109
|
+
return float(func(arr)) if len(arr) > 0 else 0.0
|
|
110
|
+
|
|
111
|
+
stats = {
|
|
112
|
+
"offset (mean)": safe_stat(offsets_filtered, np.mean),
|
|
113
|
+
"offset (std)": safe_stat(offsets_filtered, np.std),
|
|
114
|
+
"offset (min)": safe_stat(offsets_filtered, np.min),
|
|
115
|
+
"offset (max)": safe_stat(offsets_filtered, np.max),
|
|
116
|
+
"round_trip_time (mean)": safe_stat(rtts_filtered, np.mean),
|
|
117
|
+
"round_trip_time (std)": safe_stat(rtts_filtered, np.std),
|
|
118
|
+
"round_trip_time (min)": safe_stat(rtts_filtered, np.min),
|
|
119
|
+
"round_trip_time (max)": safe_stat(rtts_filtered, np.max),
|
|
120
|
+
"sample_count": int(len(offsets_filtered)),
|
|
121
|
+
}
|
|
122
|
+
return stats
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dexcontrol
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.12
|
|
4
4
|
Summary: A Python library of Sensing and Control for Dexmate's Robot
|
|
5
5
|
Project-URL: Repository, https://github.com/dexmate-ai/dexcontrol
|
|
6
6
|
Author-email: Dexmate <contact@dexmate.ai>
|
|
@@ -201,15 +201,17 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
201
201
|
Classifier: Programming Language :: Python :: 3.13
|
|
202
202
|
Classifier: Typing :: Typed
|
|
203
203
|
Requires-Python: <3.14,>=3.10
|
|
204
|
+
Requires-Dist: aiortc
|
|
204
205
|
Requires-Dist: eclipse-zenoh>=1.2.0
|
|
205
206
|
Requires-Dist: hydra-core==1.3.2
|
|
206
207
|
Requires-Dist: jaxtyping>=0.2.38
|
|
207
208
|
Requires-Dist: loguru>=0.7.3
|
|
208
|
-
Requires-Dist: numpy>=
|
|
209
|
+
Requires-Dist: numpy>=1.26.4
|
|
209
210
|
Requires-Dist: opencv-python>=4.11.0
|
|
210
211
|
Requires-Dist: protobuf>=6.31.0
|
|
211
212
|
Requires-Dist: rich
|
|
212
213
|
Requires-Dist: uvloop>=0.17.0; sys_platform != 'win32'
|
|
214
|
+
Requires-Dist: websockets
|
|
213
215
|
Provides-Extra: dev
|
|
214
216
|
Requires-Dist: isort>=5.12.0; extra == 'dev'
|
|
215
217
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
dexcontrol/__init__.py,sha256=9y7PGcWv9KYcLg7nH54FQv2vv0Q_GeVy3wcFa4Yf_gs,1692
|
|
2
|
+
dexcontrol/robot.py,sha256=Ab-9HhfPiqKq4gGNoBUUMKqYsjPK4u9KW2ykPlbKe4A,51914
|
|
3
|
+
dexcontrol/apps/dualsense_teleop_base.py,sha256=Dw1z-2HA5D7DPKutZxlOdXsN9vpk4gS6XzJsL5ZQLM0,12702
|
|
4
|
+
dexcontrol/config/__init__.py,sha256=UVLNpzGD14e8g68rUZFXTh0B7FRx6uS0Eg_MecjinYM,520
|
|
5
|
+
dexcontrol/config/vega.py,sha256=UE5XAdk5IpYj-LgLUzbAvr6Zi83e4XYPAvXdgM9z3VY,8239
|
|
6
|
+
dexcontrol/config/core/__init__.py,sha256=Ym2R1hr1iMKQuXcg16BpZfQtTb0hQ5Q7smUIMlwKfho,637
|
|
7
|
+
dexcontrol/config/core/arm.py,sha256=5hN1dQMe2H6oufaqgtZqx9vuB969DxM26leJqPsKEiA,1471
|
|
8
|
+
dexcontrol/config/core/chassis.py,sha256=163hO4lVVaW7r9dvNleH0cdDds_GfO15EepnjloeT9U,868
|
|
9
|
+
dexcontrol/config/core/hand.py,sha256=bGRO-_usaFP0GU6jgB6Lm3Z07DMqMVO_tiB5j4c8Cu4,954
|
|
10
|
+
dexcontrol/config/core/head.py,sha256=SLwZE-lYEOk8XAmW-Ex7VkLF2w5HLItwsA3Dc7n5FtE,1061
|
|
11
|
+
dexcontrol/config/core/misc.py,sha256=zHkJ144b6kbmMFE63wy_fgfo_6V-4XmM19hr6BUtQ0Y,1567
|
|
12
|
+
dexcontrol/config/core/torso.py,sha256=DCTFgN1_Gn4THkKy23sIHOedACQtQ7cET3g4AmkVPco,1460
|
|
13
|
+
dexcontrol/config/sensors/__init__.py,sha256=bYPMLxbbn5QeuPyA6OPGDS2JTYpnVvaZJT8PeILFjQY,252
|
|
14
|
+
dexcontrol/config/sensors/vega_sensors.py,sha256=VTC8OPLEhBmnQpWdbPTOAr1JGeKOEekLc1Vew62yVtk,2969
|
|
15
|
+
dexcontrol/config/sensors/cameras/__init__.py,sha256=UcY9soHfHTEZL4VX705yH7RM6jWf3Mqd8MWJMp59big,454
|
|
16
|
+
dexcontrol/config/sensors/cameras/luxonis_camera.py,sha256=e3I5jiIbyAK2HjM8E0VRUOdYODTMjaA_zRH7Du9D8qI,1648
|
|
17
|
+
dexcontrol/config/sensors/cameras/rgb_camera.py,sha256=MN4SjyZlfbrQ3JKDDkT8HhC0Aiyc0bWfDLt4ik0Xcvs,1448
|
|
18
|
+
dexcontrol/config/sensors/cameras/zed_camera.py,sha256=cPXR84m2P3P2-qls1usHCbR6iz-l9gaBjjXyDmTXoiE,1836
|
|
19
|
+
dexcontrol/config/sensors/imu/__init__.py,sha256=fW-DlevCvf_W8HV_fvLe9yIe-XL5op2mggoTKh-6fGQ,328
|
|
20
|
+
dexcontrol/config/sensors/imu/chassis_imu.py,sha256=3OlTTBH6k1QGM5c5bcg8NL3XUXzYA8gCLM8lpCq2KFM,559
|
|
21
|
+
dexcontrol/config/sensors/imu/zed_imu.py,sha256=y-dPI-XS6Kyq0WOf0wwuc2BgVnMN2hwCMxb0Vmwt4O4,550
|
|
22
|
+
dexcontrol/config/sensors/lidar/__init__.py,sha256=j8vFkF675Z7zKtCztJcyG7oSA_XqrD8OeQLEK0GACug,288
|
|
23
|
+
dexcontrol/config/sensors/lidar/rplidar.py,sha256=ybuT_f1ADWF3oGH1gi6D2F80TbJEm4vbm68Fe108OAA,541
|
|
24
|
+
dexcontrol/config/sensors/ultrasonic/__init__.py,sha256=-q83RhIMZJGVFVPYaA4hOugoG6wZw8EL6wJg7-HTSxU,294
|
|
25
|
+
dexcontrol/config/sensors/ultrasonic/ultrasonic.py,sha256=7b4dm1QOhy5_5RFVpY-frXZyDzqok0K1u7ed9gf3PL0,552
|
|
26
|
+
dexcontrol/core/__init__.py,sha256=bYPMLxbbn5QeuPyA6OPGDS2JTYpnVvaZJT8PeILFjQY,252
|
|
27
|
+
dexcontrol/core/arm.py,sha256=wbRm7G4v3ByVwscZ9rEu_IpmBdqZoI6gKXDphDeNN5Q,15360
|
|
28
|
+
dexcontrol/core/chassis.py,sha256=tB-tsx6MjKJDOtQxBf7PIX0L1JwgnsXUzmNPC1VKsQU,23165
|
|
29
|
+
dexcontrol/core/component.py,sha256=mkYH7W7tWIWnfWfXmCUQulzaZ7VfrwYI0ET_L7pPw2k,34779
|
|
30
|
+
dexcontrol/core/hand.py,sha256=wd__YB5wcM-LlksEm3PatXhy665zLnu9nV_9x85WxIA,8649
|
|
31
|
+
dexcontrol/core/head.py,sha256=iz9umFxiizYzK49BdML1i6pKM_i8kbk44tH0uu_TaVM,10512
|
|
32
|
+
dexcontrol/core/misc.py,sha256=0YNJCrTJS1yCT9N-p9us5I7uSiAK470k8nWgJu638X4,25153
|
|
33
|
+
dexcontrol/core/torso.py,sha256=4MB5EojHnlBpUaHzcZOh4IkKcjI6pSluXmpb5RpmdV4,8932
|
|
34
|
+
dexcontrol/proto/dexcontrol_msg_pb2.py,sha256=YgPlHnOZbVfCuTdfK1DD0t4yf6qeDf-ximl4qY5YeWo,6397
|
|
35
|
+
dexcontrol/proto/dexcontrol_msg_pb2.pyi,sha256=5sI3nH1hhLPAg_UpNk5Mgh5bt5YrzcoPj1tCL6bT45s,10865
|
|
36
|
+
dexcontrol/proto/dexcontrol_query_pb2.py,sha256=n5EazrveRw2UXFM-J5n5c7NVfr8LzaPigmOns4UOI9k,5946
|
|
37
|
+
dexcontrol/proto/dexcontrol_query_pb2.pyi,sha256=0Lr0wYPGHhhNeAK24JJ2A7bzZ7q-r5ssOI2_ZfoYzVk,7108
|
|
38
|
+
dexcontrol/sensors/__init__.py,sha256=3DtVBwX5E3RPPjfCh2elnqk6uIWB_ukIqPQgBPZ7w7g,1008
|
|
39
|
+
dexcontrol/sensors/manager.py,sha256=Qsbs9zZ4TvJgyn8yuI85wOU6mqgBQEus_MYSXj7wA9w,7025
|
|
40
|
+
dexcontrol/sensors/ultrasonic.py,sha256=WAHvHh64iQ0HfqVf-Oo0Rg8R32Cdk5d8k8kDSwa3Xrc,3258
|
|
41
|
+
dexcontrol/sensors/camera/__init__.py,sha256=w7-w58fAsV57lSb4ANC8tn8YbY5o1GVymw3p2agNJEE,684
|
|
42
|
+
dexcontrol/sensors/camera/luxonis_camera.py,sha256=OeKoX7JL2ogbNJa7JPYkPT4LHKg8Wby5PPtoMQcFo8c,6307
|
|
43
|
+
dexcontrol/sensors/camera/rgb_camera.py,sha256=UaEk8aszHeBRg5xMQlHxZk2KMP7wU3m6UnE_qgh6V4Q,5892
|
|
44
|
+
dexcontrol/sensors/camera/zed_camera.py,sha256=hrnTrON0WieCkJ7i2pvO6nUjHOD_N8po9arl9jbqtuQ,15501
|
|
45
|
+
dexcontrol/sensors/imu/__init__.py,sha256=bBC7_NSLJ5qLMvUYu2-9yXKO2bRpQLC0HyywBwnbM0A,768
|
|
46
|
+
dexcontrol/sensors/imu/chassis_imu.py,sha256=a_PMH2I2UVHZ2xIqGac2M4xFIDgiUopjUOjD87xNFL0,5058
|
|
47
|
+
dexcontrol/sensors/imu/zed_imu.py,sha256=kNXdOq0STucWG5Vvy6AWL3Hs4JZB6dxtfhCsjEWnRGY,5251
|
|
48
|
+
dexcontrol/sensors/lidar/__init__.py,sha256=frF16HmeQnfbvH0dVJ4pPjD4TySF13wCk-O9L3Memeg,317
|
|
49
|
+
dexcontrol/sensors/lidar/rplidar.py,sha256=HpPeO2lqGDGGrnR3j4rZ6suw_pc07Rhsfti9GCCi-1M,4499
|
|
50
|
+
dexcontrol/utils/__init__.py,sha256=ayMZ6xNlA9xKfS_XRr8bWcoXW4-8Jg_25XSbMd5Jx58,468
|
|
51
|
+
dexcontrol/utils/constants.py,sha256=6SG5HoSo7V-DlWH7cdNaMJtZs05dWrqYWIuKpmXfdI0,792
|
|
52
|
+
dexcontrol/utils/error_code.py,sha256=iy840qnWn9wv_nVqyEDP8-l2CuXlPH2xXXW0k-5cHKk,7321
|
|
53
|
+
dexcontrol/utils/io_utils.py,sha256=4TYV33ufECo8fuQivrZR9vtSdwWYUiPvpAUSneEzOOs,850
|
|
54
|
+
dexcontrol/utils/motion_utils.py,sha256=p4kXQm_YorISDC2crrpY0gwCVw_yQCPv-acxPUSfh8w,7172
|
|
55
|
+
dexcontrol/utils/os_utils.py,sha256=CC2st_Pb0C5cWfCg-i1P5bgBx3ZBX4LWVUiBq63dNeo,1852
|
|
56
|
+
dexcontrol/utils/pb_utils.py,sha256=_6nFLKwAtq56vYXMZ6YmHnMfL5SarD96MVEA-9cxXns,3178
|
|
57
|
+
dexcontrol/utils/rate_limiter.py,sha256=wFNaJ1fh-GO6zItuksKd_DSxLA1esE71WAiNDLpGsU0,6176
|
|
58
|
+
dexcontrol/utils/rtc_utils.py,sha256=o2F9puC7CdAPnqiVq2vzomFZ7hMHljwtAbp9UiLhxJY,4426
|
|
59
|
+
dexcontrol/utils/timer.py,sha256=1sOYYEapbZ5aBqJwknClsxgjDx0FDRQuGEdcTGnYTCI,3948
|
|
60
|
+
dexcontrol/utils/trajectory_utils.py,sha256=TURFb0DeDey0416z4L7AXiWcKJYsgg_bB5AE_JPSpXY,1879
|
|
61
|
+
dexcontrol/utils/viz_utils.py,sha256=rKtZfu32-9D9CS4cSiil-oLub_MiKTJV6hURvJbKd0s,6295
|
|
62
|
+
dexcontrol/utils/zenoh_utils.py,sha256=83BSwWM0RZQP5Zey4Py83P_QC-vuk1qyk2Ac5iuschA,4264
|
|
63
|
+
dexcontrol/utils/subscribers/__init__.py,sha256=Sqa-PPElwdUKxdh9BbU5MSqnf_i7BFqANrzVUXYUNuQ,1380
|
|
64
|
+
dexcontrol/utils/subscribers/base.py,sha256=t4zcps_kjFG1wj6WSrZ4HJg0Bxcdnu-C8NkVVupmNVg,9769
|
|
65
|
+
dexcontrol/utils/subscribers/camera.py,sha256=0kaeoKjKCxRQ5iaKK3r_94xEaVxNDBAMd2ZHL6X1kWU,11201
|
|
66
|
+
dexcontrol/utils/subscribers/decoders.py,sha256=X39NY7zNEUlOaG0b1Eooc1T7U5SCQ3rZ2ddaz12fi0o,2134
|
|
67
|
+
dexcontrol/utils/subscribers/generic.py,sha256=EKRutiu2zJBfzNIHCfYEfkcGE6QQTJmkOEMRRvEXJXA,3704
|
|
68
|
+
dexcontrol/utils/subscribers/imu.py,sha256=Us4ZWzLfqujg16jvrNIoHcvUyxbRCv6mZlaAizvX6uo,5925
|
|
69
|
+
dexcontrol/utils/subscribers/lidar.py,sha256=OlmORIf-dBO4LV4u6pWccoxh-nYTAtGlIfhjj-sG1F4,5691
|
|
70
|
+
dexcontrol/utils/subscribers/protobuf.py,sha256=gtE2b9ZtR2UXftKA5nX7bvTLkj8AeXDYZMqe4B3t5BQ,3696
|
|
71
|
+
dexcontrol/utils/subscribers/rtc.py,sha256=mxD-IIeQwluvq0_D63lQJJEXrJsIc6yxX7uD0PDh08k,11350
|
|
72
|
+
dexcontrol-0.2.12.dist-info/METADATA,sha256=3O9vIN5nR0U_mpL2QAb7Enr_eRzUbSI3Zk49Vv_HFpI,36840
|
|
73
|
+
dexcontrol-0.2.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
74
|
+
dexcontrol-0.2.12.dist-info/licenses/LICENSE,sha256=0J2KCMNNnW5WZPK5x8xUiCxApBf7h83693ggSJYiue0,31745
|
|
75
|
+
dexcontrol-0.2.12.dist-info/RECORD,,
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
dexcontrol/__init__.py,sha256=1UGkcmMHphLJM7MYIfSuWfSameV1XLBDVjEazl5hb1I,1656
|
|
2
|
-
dexcontrol/robot.py,sha256=vFjrSHEJQaivieeDdRAfeUq39qhWOTmUN-2-pYnjWLE,45025
|
|
3
|
-
dexcontrol/apps/dualsense_teleop_base.py,sha256=Dw1z-2HA5D7DPKutZxlOdXsN9vpk4gS6XzJsL5ZQLM0,12702
|
|
4
|
-
dexcontrol/config/__init__.py,sha256=UVLNpzGD14e8g68rUZFXTh0B7FRx6uS0Eg_MecjinYM,520
|
|
5
|
-
dexcontrol/config/vega.py,sha256=4RrP0V5bmH0OUM3V0gND6cpRuMqoziLTQdKiRey1_ag,7192
|
|
6
|
-
dexcontrol/config/core/__init__.py,sha256=Ym2R1hr1iMKQuXcg16BpZfQtTb0hQ5Q7smUIMlwKfho,637
|
|
7
|
-
dexcontrol/config/core/arm.py,sha256=G7k39vLx_PkctfZIaTMIAiJscpDAMo9B-ZLuy7xRsPo,1272
|
|
8
|
-
dexcontrol/config/core/chassis.py,sha256=163hO4lVVaW7r9dvNleH0cdDds_GfO15EepnjloeT9U,868
|
|
9
|
-
dexcontrol/config/core/hand.py,sha256=gPIsYgm1wP_L4BWwVmnG8UGxM_a5J_HJDkIamhgl2n4,954
|
|
10
|
-
dexcontrol/config/core/head.py,sha256=1eqsDPGBG8r8MocJwUMnDAQnOD152sl7P2k6Lg_ZKOA,1124
|
|
11
|
-
dexcontrol/config/core/misc.py,sha256=KQstrVKFL-vdoaHVdj-VGwMrrhzm4pVz2g4A2etnav4,1169
|
|
12
|
-
dexcontrol/config/core/torso.py,sha256=6B_-8LhT4rJ4K_oF9sjroOwIIj_JwlNS2JC8LmCCrSA,1456
|
|
13
|
-
dexcontrol/config/sensors/__init__.py,sha256=bYPMLxbbn5QeuPyA6OPGDS2JTYpnVvaZJT8PeILFjQY,252
|
|
14
|
-
dexcontrol/config/sensors/vega_sensors.py,sha256=oQrJcder-kcGujON5mwmThSgnBeIclq7OVWQ5lbwj1E,2581
|
|
15
|
-
dexcontrol/config/sensors/cameras/__init__.py,sha256=GmwRW9ovZ_JcpD2QmzTO_in_LRBoRDorjMVGY6XgGI8,383
|
|
16
|
-
dexcontrol/config/sensors/cameras/rgb_camera.py,sha256=20sniWVjo-Lj8SEfsXfwN07pm3MYOOaT1WP0G6Vrfxs,1465
|
|
17
|
-
dexcontrol/config/sensors/cameras/zed_camera.py,sha256=7wgY-jBePtAWC6PWYKb3S0XSxD0Eg3UlPzoy5p0Y1lw,1852
|
|
18
|
-
dexcontrol/config/sensors/imu/__init__.py,sha256=fW-DlevCvf_W8HV_fvLe9yIe-XL5op2mggoTKh-6fGQ,328
|
|
19
|
-
dexcontrol/config/sensors/imu/chassis_imu.py,sha256=3OlTTBH6k1QGM5c5bcg8NL3XUXzYA8gCLM8lpCq2KFM,559
|
|
20
|
-
dexcontrol/config/sensors/imu/zed_imu.py,sha256=y-dPI-XS6Kyq0WOf0wwuc2BgVnMN2hwCMxb0Vmwt4O4,550
|
|
21
|
-
dexcontrol/config/sensors/lidar/__init__.py,sha256=j8vFkF675Z7zKtCztJcyG7oSA_XqrD8OeQLEK0GACug,288
|
|
22
|
-
dexcontrol/config/sensors/lidar/rplidar.py,sha256=ybuT_f1ADWF3oGH1gi6D2F80TbJEm4vbm68Fe108OAA,541
|
|
23
|
-
dexcontrol/config/sensors/ultrasonic/__init__.py,sha256=-q83RhIMZJGVFVPYaA4hOugoG6wZw8EL6wJg7-HTSxU,294
|
|
24
|
-
dexcontrol/config/sensors/ultrasonic/ultrasonic.py,sha256=7b4dm1QOhy5_5RFVpY-frXZyDzqok0K1u7ed9gf3PL0,552
|
|
25
|
-
dexcontrol/core/__init__.py,sha256=bYPMLxbbn5QeuPyA6OPGDS2JTYpnVvaZJT8PeILFjQY,252
|
|
26
|
-
dexcontrol/core/arm.py,sha256=6acUfzOTGEzPrdKDFcdMGgf5ovYNLP14PwGYkSnSpLM,13917
|
|
27
|
-
dexcontrol/core/chassis.py,sha256=tB-tsx6MjKJDOtQxBf7PIX0L1JwgnsXUzmNPC1VKsQU,23165
|
|
28
|
-
dexcontrol/core/component.py,sha256=Z1-Q80yPJJ3njp45jrd51mEWKUtGgqq3oLYDTI4mBcw,33279
|
|
29
|
-
dexcontrol/core/hand.py,sha256=wd__YB5wcM-LlksEm3PatXhy665zLnu9nV_9x85WxIA,8649
|
|
30
|
-
dexcontrol/core/head.py,sha256=_COrqMmGzefK8lK38i6J3FqvcaeTAsY6Ss2rkHf1yoE,10097
|
|
31
|
-
dexcontrol/core/misc.py,sha256=m7WtziXGyhM7z27MjxiIQfTMu0_z30ReLkUCHzaRk9E,22547
|
|
32
|
-
dexcontrol/core/torso.py,sha256=xJc8tTC5vbvT-pXz6fHgZEa17YNF-V8f9pHoEsUzn6s,8259
|
|
33
|
-
dexcontrol/proto/dexcontrol_msg_pb2.py,sha256=iRvfKLjV7eRxb9jOB_KrCsd77GbgzByThW_JIKd_ibM,5691
|
|
34
|
-
dexcontrol/proto/dexcontrol_msg_pb2.pyi,sha256=_vzo6hozKpC5jzdKUOTH81VXCNYO1awcgTFhVNo91N0,9371
|
|
35
|
-
dexcontrol/proto/dexcontrol_query_pb2.py,sha256=Aa98bPmOuImBheN6fv4Ysy1Bmk5oX2tGatqcykDUz0E,5328
|
|
36
|
-
dexcontrol/proto/dexcontrol_query_pb2.pyi,sha256=iZXySZ_GJkB23ALpLpf2r5bpiGEtsf1zQt0wALz9aKU,5839
|
|
37
|
-
dexcontrol/sensors/__init__.py,sha256=Dp06cuO_3xC6i4u5rHqfK5NqlIC5kaCue_bAtTC6JEE,960
|
|
38
|
-
dexcontrol/sensors/manager.py,sha256=pBseqoAcrYdbBbSpFGChh_ROQlxnKDcolcKzKCEjpwM,6853
|
|
39
|
-
dexcontrol/sensors/ultrasonic.py,sha256=WAHvHh64iQ0HfqVf-Oo0Rg8R32Cdk5d8k8kDSwa3Xrc,3258
|
|
40
|
-
dexcontrol/sensors/camera/__init__.py,sha256=Vwe98I4Lvdv3F2UslOzKkeUkt5Rl2jSqbKlU6gIBeF0,609
|
|
41
|
-
dexcontrol/sensors/camera/rgb_camera.py,sha256=UaEk8aszHeBRg5xMQlHxZk2KMP7wU3m6UnE_qgh6V4Q,5892
|
|
42
|
-
dexcontrol/sensors/camera/zed_camera.py,sha256=OrmyZmamM2tpZD4Wu66MJUjvX4zZPIWsl0DZZHhAloE,14964
|
|
43
|
-
dexcontrol/sensors/imu/__init__.py,sha256=bBC7_NSLJ5qLMvUYu2-9yXKO2bRpQLC0HyywBwnbM0A,768
|
|
44
|
-
dexcontrol/sensors/imu/chassis_imu.py,sha256=9gziCrtFKfWmeiDdbgD4aIkkdtjJahbckayYj_Lv5r4,4858
|
|
45
|
-
dexcontrol/sensors/imu/zed_imu.py,sha256=VB0TfQYIqKNEPGPCbdAO9YtshWs4nE7y0y9FnWU-Mko,5148
|
|
46
|
-
dexcontrol/sensors/lidar/__init__.py,sha256=frF16HmeQnfbvH0dVJ4pPjD4TySF13wCk-O9L3Memeg,317
|
|
47
|
-
dexcontrol/sensors/lidar/rplidar.py,sha256=xi3y0imYJwfKTzRX66okrxwbo-ZWZmreUnXIK-RZfoU,4439
|
|
48
|
-
dexcontrol/utils/__init__.py,sha256=ayMZ6xNlA9xKfS_XRr8bWcoXW4-8Jg_25XSbMd5Jx58,468
|
|
49
|
-
dexcontrol/utils/constants.py,sha256=qTaMgMPexSOgn9eGkKNZBAmvac_QCfU2g_fCTaMjb78,661
|
|
50
|
-
dexcontrol/utils/io_utils.py,sha256=4TYV33ufECo8fuQivrZR9vtSdwWYUiPvpAUSneEzOOs,850
|
|
51
|
-
dexcontrol/utils/motion_utils.py,sha256=p4kXQm_YorISDC2crrpY0gwCVw_yQCPv-acxPUSfh8w,7172
|
|
52
|
-
dexcontrol/utils/os_utils.py,sha256=CC2st_Pb0C5cWfCg-i1P5bgBx3ZBX4LWVUiBq63dNeo,1852
|
|
53
|
-
dexcontrol/utils/pb_utils.py,sha256=_6nFLKwAtq56vYXMZ6YmHnMfL5SarD96MVEA-9cxXns,3178
|
|
54
|
-
dexcontrol/utils/rate_limiter.py,sha256=wFNaJ1fh-GO6zItuksKd_DSxLA1esE71WAiNDLpGsU0,6176
|
|
55
|
-
dexcontrol/utils/rtc_utils.py,sha256=o2F9puC7CdAPnqiVq2vzomFZ7hMHljwtAbp9UiLhxJY,4426
|
|
56
|
-
dexcontrol/utils/timer.py,sha256=1sOYYEapbZ5aBqJwknClsxgjDx0FDRQuGEdcTGnYTCI,3948
|
|
57
|
-
dexcontrol/utils/trajectory_utils.py,sha256=gEi-hYSkySUO8rZPFig8t14vMxJPBY7hK-UldsXY1uA,1420
|
|
58
|
-
dexcontrol/utils/viz_utils.py,sha256=UZZ-IX9yz7T9e8Rb-xN1wtD4H_vDBZxf-BSc7VGEMZo,2770
|
|
59
|
-
dexcontrol/utils/zenoh_utils.py,sha256=JlfhNwg4agPSRb6_Gkqi3ymuw_b13bnnTWClchWpGn8,2809
|
|
60
|
-
dexcontrol/utils/subscribers/__init__.py,sha256=Sqa-PPElwdUKxdh9BbU5MSqnf_i7BFqANrzVUXYUNuQ,1380
|
|
61
|
-
dexcontrol/utils/subscribers/base.py,sha256=t4zcps_kjFG1wj6WSrZ4HJg0Bxcdnu-C8NkVVupmNVg,9769
|
|
62
|
-
dexcontrol/utils/subscribers/camera.py,sha256=0kaeoKjKCxRQ5iaKK3r_94xEaVxNDBAMd2ZHL6X1kWU,11201
|
|
63
|
-
dexcontrol/utils/subscribers/decoders.py,sha256=X39NY7zNEUlOaG0b1Eooc1T7U5SCQ3rZ2ddaz12fi0o,2134
|
|
64
|
-
dexcontrol/utils/subscribers/generic.py,sha256=EKRutiu2zJBfzNIHCfYEfkcGE6QQTJmkOEMRRvEXJXA,3704
|
|
65
|
-
dexcontrol/utils/subscribers/imu.py,sha256=Us4ZWzLfqujg16jvrNIoHcvUyxbRCv6mZlaAizvX6uo,5925
|
|
66
|
-
dexcontrol/utils/subscribers/lidar.py,sha256=ZIUpzfb-n5zLnCfZBDxJMMI4FKmlwdOYHQzpVlfIGQw,5631
|
|
67
|
-
dexcontrol/utils/subscribers/protobuf.py,sha256=gtE2b9ZtR2UXftKA5nX7bvTLkj8AeXDYZMqe4B3t5BQ,3696
|
|
68
|
-
dexcontrol/utils/subscribers/rtc.py,sha256=mxD-IIeQwluvq0_D63lQJJEXrJsIc6yxX7uD0PDh08k,11350
|
|
69
|
-
dexcontrol-0.2.10.dist-info/METADATA,sha256=VNSJzSGYSXAhUaKM3oj8Y7qy8hH1tkX4QAEGLV-mDDY,36791
|
|
70
|
-
dexcontrol-0.2.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
71
|
-
dexcontrol-0.2.10.dist-info/licenses/LICENSE,sha256=0J2KCMNNnW5WZPK5x8xUiCxApBf7h83693ggSJYiue0,31745
|
|
72
|
-
dexcontrol-0.2.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|