dexcontrol 0.2.7__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 +6 -0
- dexcontrol/config/core/hand.py +5 -16
- 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 +95 -43
- dexcontrol/core/component.py +92 -6
- dexcontrol/core/hand.py +81 -13
- dexcontrol/core/head.py +55 -26
- dexcontrol/core/misc.py +94 -13
- dexcontrol/core/torso.py +44 -11
- 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 +319 -75
- dexcontrol/sensors/__init__.py +2 -1
- dexcontrol/sensors/camera/__init__.py +2 -0
- dexcontrol/sensors/camera/luxonis_camera.py +169 -0
- dexcontrol/sensors/camera/rgb_camera.py +36 -0
- dexcontrol/sensors/camera/zed_camera.py +48 -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.7.dist-info → dexcontrol-0.2.12.dist-info}/METADATA +6 -4
- dexcontrol-0.2.12.dist-info/RECORD +75 -0
- dexcontrol-0.2.7.dist-info/RECORD +0 -72
- {dexcontrol-0.2.7.dist-info → dexcontrol-0.2.12.dist-info}/WHEEL +0 -0
- {dexcontrol-0.2.7.dist-info → dexcontrol-0.2.12.dist-info}/licenses/LICENSE +0 -0
dexcontrol/core/misc.py
CHANGED
|
@@ -95,6 +95,14 @@ class Battery(RobotComponent):
|
|
|
95
95
|
- power: Power consumption in Watts
|
|
96
96
|
"""
|
|
97
97
|
state = self._get_state()
|
|
98
|
+
if state is None:
|
|
99
|
+
return {
|
|
100
|
+
"percentage": 0.0,
|
|
101
|
+
"temperature": 0.0,
|
|
102
|
+
"current": 0.0,
|
|
103
|
+
"voltage": 0.0,
|
|
104
|
+
"power": 0.0,
|
|
105
|
+
}
|
|
98
106
|
return {
|
|
99
107
|
"percentage": float(state.percentage),
|
|
100
108
|
"temperature": float(state.temperature),
|
|
@@ -111,6 +119,11 @@ class Battery(RobotComponent):
|
|
|
111
119
|
table.add_column("Parameter", style="cyan")
|
|
112
120
|
table.add_column("Value")
|
|
113
121
|
|
|
122
|
+
if state is None:
|
|
123
|
+
table.add_row("Status", "[red]No battery data available[/]")
|
|
124
|
+
self._console.print(table)
|
|
125
|
+
return
|
|
126
|
+
|
|
114
127
|
battery_style = self._get_battery_level_style(state.percentage)
|
|
115
128
|
table.add_row("Battery Level", f"[{battery_style}]{state.percentage:.1f}%[/]")
|
|
116
129
|
|
|
@@ -213,10 +226,14 @@ class EStop(RobotComponent):
|
|
|
213
226
|
configs: EStop configuration containing subscription topics.
|
|
214
227
|
zenoh_session: Active Zenoh session for communication.
|
|
215
228
|
"""
|
|
229
|
+
self._enabled = configs.enabled
|
|
216
230
|
super().__init__(
|
|
217
231
|
configs.state_sub_topic, zenoh_session, dexcontrol_msg_pb2.EStopState
|
|
218
232
|
)
|
|
219
233
|
self._estop_query_name = configs.estop_query_name
|
|
234
|
+
if not self._enabled:
|
|
235
|
+
logger.warning("EStop monitoring is DISABLED via configuration")
|
|
236
|
+
return
|
|
220
237
|
self._shutdown_event = threading.Event()
|
|
221
238
|
self._monitor_thread = threading.Thread(target=self._estop_monitor, daemon=True)
|
|
222
239
|
self._monitor_thread.start()
|
|
@@ -264,6 +281,11 @@ class EStop(RobotComponent):
|
|
|
264
281
|
- software_estop_enabled: Software EStop enabled
|
|
265
282
|
"""
|
|
266
283
|
state = self._get_state()
|
|
284
|
+
if state is None:
|
|
285
|
+
return {
|
|
286
|
+
"button_pressed": False,
|
|
287
|
+
"software_estop_enabled": False,
|
|
288
|
+
}
|
|
267
289
|
return {
|
|
268
290
|
"button_pressed": state.button_pressed,
|
|
269
291
|
"software_estop_enabled": state.software_estop_enabled,
|
|
@@ -271,11 +293,13 @@ class EStop(RobotComponent):
|
|
|
271
293
|
|
|
272
294
|
def is_button_pressed(self) -> bool:
|
|
273
295
|
"""Checks if the EStop button is pressed."""
|
|
274
|
-
|
|
296
|
+
state = self._get_state()
|
|
297
|
+
return state.button_pressed if state is not None else False
|
|
275
298
|
|
|
276
299
|
def is_software_estop_enabled(self) -> bool:
|
|
277
300
|
"""Checks if the software EStop is enabled."""
|
|
278
|
-
|
|
301
|
+
state = self._get_state()
|
|
302
|
+
return state.software_estop_enabled if state is not None else False
|
|
279
303
|
|
|
280
304
|
def activate(self) -> None:
|
|
281
305
|
"""Activates the software emergency stop (E-Stop)."""
|
|
@@ -291,11 +315,12 @@ class EStop(RobotComponent):
|
|
|
291
315
|
|
|
292
316
|
def shutdown(self) -> None:
|
|
293
317
|
"""Shuts down the EStop component and stops monitoring thread."""
|
|
294
|
-
self.
|
|
295
|
-
|
|
296
|
-
self._monitor_thread.
|
|
297
|
-
|
|
298
|
-
|
|
318
|
+
if self._enabled:
|
|
319
|
+
self._shutdown_event.set()
|
|
320
|
+
if self._monitor_thread and self._monitor_thread.is_alive():
|
|
321
|
+
self._monitor_thread.join(timeout=2.0) # Extended timeout
|
|
322
|
+
if self._monitor_thread.is_alive():
|
|
323
|
+
logger.warning("EStop monitor thread did not terminate cleanly")
|
|
299
324
|
super().shutdown()
|
|
300
325
|
|
|
301
326
|
def show(self) -> None:
|
|
@@ -306,6 +331,12 @@ class EStop(RobotComponent):
|
|
|
306
331
|
table.add_column("Parameter", style="cyan")
|
|
307
332
|
table.add_column("Value")
|
|
308
333
|
|
|
334
|
+
if state is None:
|
|
335
|
+
table.add_row("Status", "[red]No E-Stop data available[/]")
|
|
336
|
+
console = Console()
|
|
337
|
+
console.print(table)
|
|
338
|
+
return
|
|
339
|
+
|
|
309
340
|
button_style = "bold red" if state.button_pressed else "bold dark_green"
|
|
310
341
|
table.add_row("Button Pressed", f"[{button_style}]{state.button_pressed}[/]")
|
|
311
342
|
|
|
@@ -387,9 +418,12 @@ class Heartbeat:
|
|
|
387
418
|
Returns:
|
|
388
419
|
Decoded heartbeat timestamp value in seconds.
|
|
389
420
|
"""
|
|
390
|
-
|
|
391
|
-
#
|
|
392
|
-
|
|
421
|
+
# Decode UTF-8 string and convert to float
|
|
422
|
+
# Publisher sends: str(self.timecount_now).encode() in milliseconds
|
|
423
|
+
timestamp_str = data.to_bytes().decode("utf-8")
|
|
424
|
+
timestamp_ms = float(timestamp_str)
|
|
425
|
+
# Convert from milliseconds to seconds
|
|
426
|
+
return timestamp_ms / 1000.0
|
|
393
427
|
|
|
394
428
|
def _heartbeat_monitor(self) -> None:
|
|
395
429
|
"""Background thread that continuously monitors heartbeat signal."""
|
|
@@ -527,6 +561,52 @@ class Heartbeat:
|
|
|
527
561
|
return False
|
|
528
562
|
return self._subscriber.is_active()
|
|
529
563
|
|
|
564
|
+
@staticmethod
|
|
565
|
+
def _format_uptime(seconds: float) -> str:
|
|
566
|
+
"""Convert seconds to human-readable uptime format with high resolution.
|
|
567
|
+
|
|
568
|
+
Args:
|
|
569
|
+
seconds: Total seconds of uptime.
|
|
570
|
+
|
|
571
|
+
Returns:
|
|
572
|
+
Human-readable string like "1mo 2d 3h 45m 12s 345ms".
|
|
573
|
+
"""
|
|
574
|
+
# Calculate months (assuming 30 days per month)
|
|
575
|
+
months = int(seconds // (86400 * 30))
|
|
576
|
+
remaining = seconds % (86400 * 30)
|
|
577
|
+
|
|
578
|
+
# Calculate days
|
|
579
|
+
days = int(remaining // 86400)
|
|
580
|
+
remaining = remaining % 86400
|
|
581
|
+
|
|
582
|
+
# Calculate hours
|
|
583
|
+
hours = int(remaining // 3600)
|
|
584
|
+
remaining = remaining % 3600
|
|
585
|
+
|
|
586
|
+
# Calculate minutes
|
|
587
|
+
minutes = int(remaining // 60)
|
|
588
|
+
remaining = remaining % 60
|
|
589
|
+
|
|
590
|
+
# Calculate seconds and milliseconds
|
|
591
|
+
secs = int(remaining)
|
|
592
|
+
milliseconds = int((remaining - secs) * 1000)
|
|
593
|
+
|
|
594
|
+
parts = []
|
|
595
|
+
if months > 0:
|
|
596
|
+
parts.append(f"{months}mo")
|
|
597
|
+
if days > 0:
|
|
598
|
+
parts.append(f"{days}d")
|
|
599
|
+
if hours > 0:
|
|
600
|
+
parts.append(f"{hours}h")
|
|
601
|
+
if minutes > 0:
|
|
602
|
+
parts.append(f"{minutes}m")
|
|
603
|
+
if secs > 0:
|
|
604
|
+
parts.append(f"{secs}s")
|
|
605
|
+
if milliseconds > 0 or not parts:
|
|
606
|
+
parts.append(f"{milliseconds}ms")
|
|
607
|
+
|
|
608
|
+
return " ".join(parts)
|
|
609
|
+
|
|
530
610
|
def shutdown(self) -> None:
|
|
531
611
|
"""Shuts down the heartbeat monitor and stops monitoring thread."""
|
|
532
612
|
if not self._enabled:
|
|
@@ -567,12 +647,13 @@ class Heartbeat:
|
|
|
567
647
|
active_style = "bold dark_green" if status["is_active"] else "bold red"
|
|
568
648
|
table.add_row("Signal Active", f"[{active_style}]{status['is_active']}[/]")
|
|
569
649
|
|
|
570
|
-
# Last heartbeat value
|
|
650
|
+
# Last heartbeat value (robot uptime)
|
|
571
651
|
last_value = status["last_value"]
|
|
572
652
|
if last_value is not None:
|
|
573
|
-
|
|
653
|
+
uptime_str = self._format_uptime(last_value)
|
|
654
|
+
table.add_row("Robot server uptime", f"[blue]{uptime_str}[/]")
|
|
574
655
|
else:
|
|
575
|
-
table.add_row("
|
|
656
|
+
table.add_row("Robot server uptime", "[red]No data[/]")
|
|
576
657
|
|
|
577
658
|
# Time since last heartbeat
|
|
578
659
|
time_since = status["time_since_last"]
|
dexcontrol/core/torso.py
CHANGED
|
@@ -14,8 +14,6 @@ This module provides the Torso class for controlling a robot torso through Zenoh
|
|
|
14
14
|
communication. It handles joint position and velocity control and state monitoring.
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
|
-
import time
|
|
18
|
-
|
|
19
17
|
import numpy as np
|
|
20
18
|
import zenoh
|
|
21
19
|
from jaxtyping import Float
|
|
@@ -54,10 +52,15 @@ class Torso(RobotJointComponent):
|
|
|
54
52
|
state_message_type=dexcontrol_msg_pb2.TorsoState,
|
|
55
53
|
zenoh_session=zenoh_session,
|
|
56
54
|
joint_name=configs.joint_name,
|
|
55
|
+
joint_limit=configs.joint_limit
|
|
56
|
+
if hasattr(configs, "joint_limit")
|
|
57
|
+
else None,
|
|
58
|
+
joint_vel_limit=configs.joint_vel_limit
|
|
59
|
+
if hasattr(configs, "joint_vel_limit")
|
|
60
|
+
else None,
|
|
57
61
|
pose_pool=configs.pose_pool,
|
|
58
62
|
)
|
|
59
|
-
self.
|
|
60
|
-
self.max_vel = configs.max_vel
|
|
63
|
+
assert self._joint_vel_limit is not None, "joint_vel_limit is not set"
|
|
61
64
|
|
|
62
65
|
def set_joint_pos_vel(
|
|
63
66
|
self,
|
|
@@ -69,6 +72,8 @@ class Torso(RobotJointComponent):
|
|
|
69
72
|
| None = None,
|
|
70
73
|
relative: bool = False,
|
|
71
74
|
wait_time: float = 0.0,
|
|
75
|
+
exit_on_reach: bool = False,
|
|
76
|
+
exit_on_reach_kwargs: dict[str, float] | None = None,
|
|
72
77
|
) -> None:
|
|
73
78
|
"""Send control commands to the torso.
|
|
74
79
|
|
|
@@ -86,6 +91,8 @@ class Torso(RobotJointComponent):
|
|
|
86
91
|
relative: If True, the joint positions are relative to the current position.
|
|
87
92
|
wait_time: Time to wait after sending command in seconds. If 0, returns
|
|
88
93
|
immediately after sending command.
|
|
94
|
+
exit_on_reach: If True, the function will exit when the joint positions are reached.
|
|
95
|
+
exit_on_reach_kwargs: Optional parameters for exit when the joint positions are reached.
|
|
89
96
|
|
|
90
97
|
Raises:
|
|
91
98
|
ValueError: If wait_time is negative or joint_pos dictionary contains
|
|
@@ -102,6 +109,15 @@ class Torso(RobotJointComponent):
|
|
|
102
109
|
joint_pos = self._convert_joint_cmd_to_array(joint_pos)
|
|
103
110
|
joint_vel = self._process_joint_velocities(joint_vel, joint_pos)
|
|
104
111
|
|
|
112
|
+
if self._joint_limit is not None:
|
|
113
|
+
joint_pos = np.clip(
|
|
114
|
+
joint_pos, self._joint_limit[:, 0], self._joint_limit[:, 1]
|
|
115
|
+
)
|
|
116
|
+
if self._joint_vel_limit is not None:
|
|
117
|
+
joint_vel = np.clip(
|
|
118
|
+
joint_vel, -self._joint_vel_limit, self._joint_vel_limit
|
|
119
|
+
)
|
|
120
|
+
|
|
105
121
|
# Create and send control message
|
|
106
122
|
control_msg = dexcontrol_msg_pb2.TorsoCommand()
|
|
107
123
|
control_msg.joint_pos.extend(joint_pos.tolist())
|
|
@@ -109,8 +125,12 @@ class Torso(RobotJointComponent):
|
|
|
109
125
|
self._publish_control(control_msg)
|
|
110
126
|
|
|
111
127
|
# Wait if specified
|
|
112
|
-
|
|
113
|
-
|
|
128
|
+
self._wait_for_position(
|
|
129
|
+
joint_pos=joint_pos,
|
|
130
|
+
wait_time=wait_time,
|
|
131
|
+
exit_on_reach=exit_on_reach,
|
|
132
|
+
exit_on_reach_kwargs=exit_on_reach_kwargs,
|
|
133
|
+
)
|
|
114
134
|
|
|
115
135
|
def set_joint_pos(
|
|
116
136
|
self,
|
|
@@ -118,6 +138,8 @@ class Torso(RobotJointComponent):
|
|
|
118
138
|
relative: bool = False,
|
|
119
139
|
wait_time: float = 0.0,
|
|
120
140
|
wait_kwargs: dict[str, float] | None = None,
|
|
141
|
+
exit_on_reach: bool = False,
|
|
142
|
+
exit_on_reach_kwargs: dict[str, float] | None = None,
|
|
121
143
|
) -> None:
|
|
122
144
|
"""Send joint position control commands to the torso.
|
|
123
145
|
|
|
@@ -130,12 +152,19 @@ class Torso(RobotJointComponent):
|
|
|
130
152
|
wait_time: Time to wait after sending command in seconds. If 0, returns
|
|
131
153
|
immediately after sending command.
|
|
132
154
|
wait_kwargs: Optional parameters for trajectory generation (not used in Torso).
|
|
155
|
+
exit_on_reach: If True, the function will exit when the joint positions are reached.
|
|
156
|
+
exit_on_reach_kwargs: Optional parameters for exit when the joint positions are reached.
|
|
133
157
|
|
|
134
158
|
Raises:
|
|
135
159
|
ValueError: If joint_pos dictionary contains invalid joint names.
|
|
136
160
|
"""
|
|
137
161
|
self.set_joint_pos_vel(
|
|
138
|
-
joint_pos,
|
|
162
|
+
joint_pos,
|
|
163
|
+
joint_vel=None,
|
|
164
|
+
relative=relative,
|
|
165
|
+
wait_time=wait_time,
|
|
166
|
+
exit_on_reach=exit_on_reach,
|
|
167
|
+
exit_on_reach_kwargs=exit_on_reach_kwargs,
|
|
139
168
|
)
|
|
140
169
|
|
|
141
170
|
def stop(self) -> None:
|
|
@@ -192,12 +221,16 @@ class Torso(RobotJointComponent):
|
|
|
192
221
|
if motion_norm < 1e-6: # Avoid division by zero
|
|
193
222
|
return np.zeros(3, dtype=np.float32)
|
|
194
223
|
|
|
195
|
-
|
|
196
|
-
|
|
224
|
+
default_vel = (
|
|
225
|
+
0.6 if self._joint_vel_limit is None else np.min(self._joint_vel_limit)
|
|
226
|
+
)
|
|
227
|
+
return (joint_motion / motion_norm) * default_vel
|
|
197
228
|
|
|
198
229
|
if isinstance(joint_vel, (int, float)):
|
|
199
230
|
# Single value - apply to all joints
|
|
200
231
|
return np.full(3, joint_vel, dtype=np.float32)
|
|
201
232
|
|
|
202
|
-
# Convert to array and clip to
|
|
203
|
-
return self._convert_joint_cmd_to_array(
|
|
233
|
+
# Convert to array and clip to velocity limits
|
|
234
|
+
return self._convert_joint_cmd_to_array(
|
|
235
|
+
joint_vel, clip_value=self._joint_vel_limit
|
|
236
|
+
)
|
|
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x64\x65xcontrol_msg.proto\x12\ndexcontrol\"
|
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x64\x65xcontrol_msg.proto\x12\ndexcontrol\"l\n\x08\x41rmState\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\x12\x11\n\tjoint_vel\x18\x02 \x03(\x02\x12\x11\n\tjoint_cur\x18\x03 \x03(\x02\x12\x11\n\tjoint_err\x18\x04 \x03(\r\x12\x14\n\x0ctimestamp_ns\x18\x05 \x01(\x04\"\\\n\tHandState\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\x12\x11\n\tjoint_vel\x18\x02 \x03(\x02\x12\x13\n\x0bjoint_statu\x18\x03 \x03(\r\x12\x14\n\x0ctimestamp_ns\x18\x04 \x01(\x04\"G\n\tHeadState\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\x12\x11\n\tjoint_vel\x18\x02 \x03(\x02\x12\x14\n\x0ctimestamp_ns\x18\x03 \x01(\x04\"H\n\nTorsoState\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\x12\x11\n\tjoint_vel\x18\x02 \x03(\x02\x12\x14\n\x0ctimestamp_ns\x18\x03 \x01(\x04\"a\n\x10SingleWheelState\x12\x14\n\x0csteering_pos\x18\x01 \x01(\x02\x12\x11\n\twheel_pos\x18\x02 \x01(\x02\x12\x11\n\twheel_vel\x18\x03 \x01(\x02\x12\x11\n\twheel_cur\x18\x04 \x01(\x02\"}\n\x0c\x43hassisState\x12*\n\x04left\x18\x01 \x01(\x0b\x32\x1c.dexcontrol.SingleWheelState\x12+\n\x05right\x18\x02 \x01(\x0b\x32\x1c.dexcontrol.SingleWheelState\x12\x14\n\x0ctimestamp_ns\x18\x05 \x01(\x04\"\x8f\x01\n\x08\x42MSState\x12\x0f\n\x07voltage\x18\x01 \x01(\x02\x12\x0f\n\x07\x63urrent\x18\x02 \x01(\x02\x12\x13\n\x0btemperature\x18\x03 \x01(\x02\x12\x12\n\npercentage\x18\x04 \x01(\r\x12\x13\n\x0bis_charging\x18\x05 \x01(\x08\x12\r\n\x05\x65rror\x18\x06 \x01(\r\x12\x14\n\x0ctimestamp_ns\x18\x07 \x01(\x04\"^\n\x0bWrenchState\x12\x0e\n\x06wrench\x18\x01 \x03(\x02\x12\x13\n\x0b\x62lue_button\x18\x02 \x01(\x08\x12\x14\n\x0cgreen_button\x18\x03 \x01(\x08\x12\x14\n\x0ctimestamp_ns\x18\x04 \x01(\x04\"Z\n\nEStopState\x12\x16\n\x0e\x62utton_pressed\x18\x01 \x01(\x08\x12\x1e\n\x16software_estop_enabled\x18\x02 \x01(\x08\x12\x14\n\x0ctimestamp_ns\x18\x03 \x01(\x04\"w\n\x0fUltrasonicState\x12\x12\n\nfront_left\x18\x01 \x01(\x02\x12\x13\n\x0b\x66ront_right\x18\x02 \x01(\x02\x12\x11\n\tback_left\x18\x03 \x01(\x02\x12\x12\n\nback_right\x18\x04 \x01(\x02\x12\x14\n\x0ctimestamp_ns\x18\x05 \x01(\x04\"\xbd\x01\n\x08IMUState\x12\r\n\x05\x61\x63\x63_x\x18\x01 \x01(\x02\x12\r\n\x05\x61\x63\x63_y\x18\x02 \x01(\x02\x12\r\n\x05\x61\x63\x63_z\x18\x03 \x01(\x02\x12\x0e\n\x06gyro_x\x18\x04 \x01(\x02\x12\x0e\n\x06gyro_y\x18\x05 \x01(\x02\x12\x0e\n\x06gyro_z\x18\x06 \x01(\x02\x12\x0e\n\x06quat_w\x18\x07 \x01(\x02\x12\x0e\n\x06quat_x\x18\x08 \x01(\x02\x12\x0e\n\x06quat_y\x18\t \x01(\x02\x12\x0e\n\x06quat_z\x18\n \x01(\x02\x12\x14\n\x0ctimestamp_ns\x18\x0b \x01(\x04\"\xa3\x01\n\nArmCommand\x12\x38\n\x0c\x63ommand_type\x18\x01 \x01(\x0e\x32\".dexcontrol.ArmCommand.CommandType\x12\x11\n\tjoint_pos\x18\x02 \x03(\x02\x12\x11\n\tjoint_vel\x18\x03 \x03(\x02\"5\n\x0b\x43ommandType\x12\x0c\n\x08POSITION\x10\x00\x12\x18\n\x14VELOCITY_FEEDFORWARD\x10\x01\" \n\x0bHandCommand\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\"3\n\x0bHeadCommand\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\x12\x11\n\tjoint_vel\x18\x02 \x03(\x02\"4\n\x0cTorsoCommand\x12\x11\n\tjoint_pos\x18\x01 \x03(\x02\x12\x11\n\tjoint_vel\x18\x02 \x03(\x02\"=\n\x12SingleWheelCommand\x12\x14\n\x0csteering_pos\x18\x01 \x01(\x02\x12\x11\n\twheel_vel\x18\x02 \x01(\x02\"m\n\x0e\x43hassisCommand\x12,\n\x04left\x18\x01 \x01(\x0b\x32\x1e.dexcontrol.SingleWheelCommand\x12-\n\x05right\x18\x02 \x01(\x0b\x32\x1e.dexcontrol.SingleWheelCommand\"-\n\x1d\x45ndEffectorPassThroughCommand\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x62\x06proto3')
|
|
29
29
|
|
|
30
30
|
_globals = globals()
|
|
31
31
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -33,39 +33,41 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dexcontrol_msg_pb2', _globa
|
|
|
33
33
|
if not _descriptor._USE_C_DESCRIPTORS:
|
|
34
34
|
DESCRIPTOR._loaded_options = None
|
|
35
35
|
_globals['_ARMSTATE']._serialized_start=36
|
|
36
|
-
_globals['_ARMSTATE']._serialized_end=
|
|
37
|
-
_globals['_HANDSTATE']._serialized_start=
|
|
38
|
-
_globals['_HANDSTATE']._serialized_end=
|
|
39
|
-
_globals['_HEADSTATE']._serialized_start=
|
|
40
|
-
_globals['_HEADSTATE']._serialized_end=
|
|
41
|
-
_globals['_TORSOSTATE']._serialized_start=
|
|
42
|
-
_globals['_TORSOSTATE']._serialized_end=
|
|
43
|
-
_globals['_SINGLEWHEELSTATE']._serialized_start=
|
|
44
|
-
_globals['_SINGLEWHEELSTATE']._serialized_end=
|
|
45
|
-
_globals['_CHASSISSTATE']._serialized_start=
|
|
46
|
-
_globals['_CHASSISSTATE']._serialized_end=
|
|
47
|
-
_globals['_BMSSTATE']._serialized_start=
|
|
48
|
-
_globals['_BMSSTATE']._serialized_end=
|
|
49
|
-
_globals['_WRENCHSTATE']._serialized_start=
|
|
50
|
-
_globals['_WRENCHSTATE']._serialized_end=
|
|
51
|
-
_globals['_ESTOPSTATE']._serialized_start=
|
|
52
|
-
_globals['_ESTOPSTATE']._serialized_end=
|
|
53
|
-
_globals['_ULTRASONICSTATE']._serialized_start=
|
|
54
|
-
_globals['_ULTRASONICSTATE']._serialized_end=
|
|
55
|
-
_globals['_IMUSTATE']._serialized_start=
|
|
56
|
-
_globals['_IMUSTATE']._serialized_end=
|
|
57
|
-
_globals['_ARMCOMMAND']._serialized_start=
|
|
58
|
-
_globals['_ARMCOMMAND']._serialized_end=
|
|
59
|
-
_globals['_ARMCOMMAND_COMMANDTYPE']._serialized_start=
|
|
60
|
-
_globals['_ARMCOMMAND_COMMANDTYPE']._serialized_end=
|
|
61
|
-
_globals['_HANDCOMMAND']._serialized_start=
|
|
62
|
-
_globals['_HANDCOMMAND']._serialized_end=
|
|
63
|
-
_globals['_HEADCOMMAND']._serialized_start=
|
|
64
|
-
_globals['_HEADCOMMAND']._serialized_end=
|
|
65
|
-
_globals['_TORSOCOMMAND']._serialized_start=
|
|
66
|
-
_globals['_TORSOCOMMAND']._serialized_end=
|
|
67
|
-
_globals['_SINGLEWHEELCOMMAND']._serialized_start=
|
|
68
|
-
_globals['_SINGLEWHEELCOMMAND']._serialized_end=
|
|
69
|
-
_globals['_CHASSISCOMMAND']._serialized_start=
|
|
70
|
-
_globals['_CHASSISCOMMAND']._serialized_end=
|
|
36
|
+
_globals['_ARMSTATE']._serialized_end=144
|
|
37
|
+
_globals['_HANDSTATE']._serialized_start=146
|
|
38
|
+
_globals['_HANDSTATE']._serialized_end=238
|
|
39
|
+
_globals['_HEADSTATE']._serialized_start=240
|
|
40
|
+
_globals['_HEADSTATE']._serialized_end=311
|
|
41
|
+
_globals['_TORSOSTATE']._serialized_start=313
|
|
42
|
+
_globals['_TORSOSTATE']._serialized_end=385
|
|
43
|
+
_globals['_SINGLEWHEELSTATE']._serialized_start=387
|
|
44
|
+
_globals['_SINGLEWHEELSTATE']._serialized_end=484
|
|
45
|
+
_globals['_CHASSISSTATE']._serialized_start=486
|
|
46
|
+
_globals['_CHASSISSTATE']._serialized_end=611
|
|
47
|
+
_globals['_BMSSTATE']._serialized_start=614
|
|
48
|
+
_globals['_BMSSTATE']._serialized_end=757
|
|
49
|
+
_globals['_WRENCHSTATE']._serialized_start=759
|
|
50
|
+
_globals['_WRENCHSTATE']._serialized_end=853
|
|
51
|
+
_globals['_ESTOPSTATE']._serialized_start=855
|
|
52
|
+
_globals['_ESTOPSTATE']._serialized_end=945
|
|
53
|
+
_globals['_ULTRASONICSTATE']._serialized_start=947
|
|
54
|
+
_globals['_ULTRASONICSTATE']._serialized_end=1066
|
|
55
|
+
_globals['_IMUSTATE']._serialized_start=1069
|
|
56
|
+
_globals['_IMUSTATE']._serialized_end=1258
|
|
57
|
+
_globals['_ARMCOMMAND']._serialized_start=1261
|
|
58
|
+
_globals['_ARMCOMMAND']._serialized_end=1424
|
|
59
|
+
_globals['_ARMCOMMAND_COMMANDTYPE']._serialized_start=1371
|
|
60
|
+
_globals['_ARMCOMMAND_COMMANDTYPE']._serialized_end=1424
|
|
61
|
+
_globals['_HANDCOMMAND']._serialized_start=1426
|
|
62
|
+
_globals['_HANDCOMMAND']._serialized_end=1458
|
|
63
|
+
_globals['_HEADCOMMAND']._serialized_start=1460
|
|
64
|
+
_globals['_HEADCOMMAND']._serialized_end=1511
|
|
65
|
+
_globals['_TORSOCOMMAND']._serialized_start=1513
|
|
66
|
+
_globals['_TORSOCOMMAND']._serialized_end=1565
|
|
67
|
+
_globals['_SINGLEWHEELCOMMAND']._serialized_start=1567
|
|
68
|
+
_globals['_SINGLEWHEELCOMMAND']._serialized_end=1628
|
|
69
|
+
_globals['_CHASSISCOMMAND']._serialized_start=1630
|
|
70
|
+
_globals['_CHASSISCOMMAND']._serialized_end=1739
|
|
71
|
+
_globals['_ENDEFFECTORPASSTHROUGHCOMMAND']._serialized_start=1741
|
|
72
|
+
_globals['_ENDEFFECTORPASSTHROUGHCOMMAND']._serialized_end=1786
|
|
71
73
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -12,42 +12,50 @@ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
|
|
12
12
|
DESCRIPTOR: _descriptor.FileDescriptor
|
|
13
13
|
|
|
14
14
|
class ArmState(_message.Message):
|
|
15
|
-
__slots__ = ("joint_pos", "joint_vel", "joint_cur", "joint_err")
|
|
15
|
+
__slots__ = ("joint_pos", "joint_vel", "joint_cur", "joint_err", "timestamp_ns")
|
|
16
16
|
JOINT_POS_FIELD_NUMBER: _ClassVar[int]
|
|
17
17
|
JOINT_VEL_FIELD_NUMBER: _ClassVar[int]
|
|
18
18
|
JOINT_CUR_FIELD_NUMBER: _ClassVar[int]
|
|
19
19
|
JOINT_ERR_FIELD_NUMBER: _ClassVar[int]
|
|
20
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
20
21
|
joint_pos: _containers.RepeatedScalarFieldContainer[float]
|
|
21
22
|
joint_vel: _containers.RepeatedScalarFieldContainer[float]
|
|
22
23
|
joint_cur: _containers.RepeatedScalarFieldContainer[float]
|
|
23
24
|
joint_err: _containers.RepeatedScalarFieldContainer[int]
|
|
24
|
-
|
|
25
|
+
timestamp_ns: int
|
|
26
|
+
def __init__(self, joint_pos: _Optional[_Iterable[float]] = ..., joint_vel: _Optional[_Iterable[float]] = ..., joint_cur: _Optional[_Iterable[float]] = ..., joint_err: _Optional[_Iterable[int]] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
25
27
|
|
|
26
28
|
class HandState(_message.Message):
|
|
27
|
-
__slots__ = ("joint_pos", "joint_vel", "joint_statu")
|
|
29
|
+
__slots__ = ("joint_pos", "joint_vel", "joint_statu", "timestamp_ns")
|
|
28
30
|
JOINT_POS_FIELD_NUMBER: _ClassVar[int]
|
|
29
31
|
JOINT_VEL_FIELD_NUMBER: _ClassVar[int]
|
|
30
32
|
JOINT_STATU_FIELD_NUMBER: _ClassVar[int]
|
|
33
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
31
34
|
joint_pos: _containers.RepeatedScalarFieldContainer[float]
|
|
32
35
|
joint_vel: _containers.RepeatedScalarFieldContainer[float]
|
|
33
36
|
joint_statu: _containers.RepeatedScalarFieldContainer[int]
|
|
34
|
-
|
|
37
|
+
timestamp_ns: int
|
|
38
|
+
def __init__(self, joint_pos: _Optional[_Iterable[float]] = ..., joint_vel: _Optional[_Iterable[float]] = ..., joint_statu: _Optional[_Iterable[int]] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
35
39
|
|
|
36
40
|
class HeadState(_message.Message):
|
|
37
|
-
__slots__ = ("joint_pos", "joint_vel")
|
|
41
|
+
__slots__ = ("joint_pos", "joint_vel", "timestamp_ns")
|
|
38
42
|
JOINT_POS_FIELD_NUMBER: _ClassVar[int]
|
|
39
43
|
JOINT_VEL_FIELD_NUMBER: _ClassVar[int]
|
|
44
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
40
45
|
joint_pos: _containers.RepeatedScalarFieldContainer[float]
|
|
41
46
|
joint_vel: _containers.RepeatedScalarFieldContainer[float]
|
|
42
|
-
|
|
47
|
+
timestamp_ns: int
|
|
48
|
+
def __init__(self, joint_pos: _Optional[_Iterable[float]] = ..., joint_vel: _Optional[_Iterable[float]] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
43
49
|
|
|
44
50
|
class TorsoState(_message.Message):
|
|
45
|
-
__slots__ = ("joint_pos", "joint_vel")
|
|
51
|
+
__slots__ = ("joint_pos", "joint_vel", "timestamp_ns")
|
|
46
52
|
JOINT_POS_FIELD_NUMBER: _ClassVar[int]
|
|
47
53
|
JOINT_VEL_FIELD_NUMBER: _ClassVar[int]
|
|
54
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
48
55
|
joint_pos: _containers.RepeatedScalarFieldContainer[float]
|
|
49
56
|
joint_vel: _containers.RepeatedScalarFieldContainer[float]
|
|
50
|
-
|
|
57
|
+
timestamp_ns: int
|
|
58
|
+
def __init__(self, joint_pos: _Optional[_Iterable[float]] = ..., joint_vel: _Optional[_Iterable[float]] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
51
59
|
|
|
52
60
|
class SingleWheelState(_message.Message):
|
|
53
61
|
__slots__ = ("steering_pos", "wheel_pos", "wheel_vel", "wheel_cur")
|
|
@@ -62,59 +70,71 @@ class SingleWheelState(_message.Message):
|
|
|
62
70
|
def __init__(self, steering_pos: _Optional[float] = ..., wheel_pos: _Optional[float] = ..., wheel_vel: _Optional[float] = ..., wheel_cur: _Optional[float] = ...) -> None: ...
|
|
63
71
|
|
|
64
72
|
class ChassisState(_message.Message):
|
|
65
|
-
__slots__ = ("left", "right")
|
|
73
|
+
__slots__ = ("left", "right", "timestamp_ns")
|
|
66
74
|
LEFT_FIELD_NUMBER: _ClassVar[int]
|
|
67
75
|
RIGHT_FIELD_NUMBER: _ClassVar[int]
|
|
76
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
68
77
|
left: SingleWheelState
|
|
69
78
|
right: SingleWheelState
|
|
70
|
-
|
|
79
|
+
timestamp_ns: int
|
|
80
|
+
def __init__(self, left: _Optional[_Union[SingleWheelState, _Mapping]] = ..., right: _Optional[_Union[SingleWheelState, _Mapping]] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
71
81
|
|
|
72
82
|
class BMSState(_message.Message):
|
|
73
|
-
__slots__ = ("voltage", "current", "temperature", "percentage", "is_charging")
|
|
83
|
+
__slots__ = ("voltage", "current", "temperature", "percentage", "is_charging", "error", "timestamp_ns")
|
|
74
84
|
VOLTAGE_FIELD_NUMBER: _ClassVar[int]
|
|
75
85
|
CURRENT_FIELD_NUMBER: _ClassVar[int]
|
|
76
86
|
TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
|
|
77
87
|
PERCENTAGE_FIELD_NUMBER: _ClassVar[int]
|
|
78
88
|
IS_CHARGING_FIELD_NUMBER: _ClassVar[int]
|
|
89
|
+
ERROR_FIELD_NUMBER: _ClassVar[int]
|
|
90
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
79
91
|
voltage: float
|
|
80
92
|
current: float
|
|
81
93
|
temperature: float
|
|
82
94
|
percentage: int
|
|
83
95
|
is_charging: bool
|
|
84
|
-
|
|
96
|
+
error: int
|
|
97
|
+
timestamp_ns: int
|
|
98
|
+
def __init__(self, voltage: _Optional[float] = ..., current: _Optional[float] = ..., temperature: _Optional[float] = ..., percentage: _Optional[int] = ..., is_charging: bool = ..., error: _Optional[int] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
85
99
|
|
|
86
100
|
class WrenchState(_message.Message):
|
|
87
|
-
__slots__ = ("wrench", "blue_button", "green_button")
|
|
101
|
+
__slots__ = ("wrench", "blue_button", "green_button", "timestamp_ns")
|
|
88
102
|
WRENCH_FIELD_NUMBER: _ClassVar[int]
|
|
89
103
|
BLUE_BUTTON_FIELD_NUMBER: _ClassVar[int]
|
|
90
104
|
GREEN_BUTTON_FIELD_NUMBER: _ClassVar[int]
|
|
105
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
91
106
|
wrench: _containers.RepeatedScalarFieldContainer[float]
|
|
92
107
|
blue_button: bool
|
|
93
108
|
green_button: bool
|
|
94
|
-
|
|
109
|
+
timestamp_ns: int
|
|
110
|
+
def __init__(self, wrench: _Optional[_Iterable[float]] = ..., blue_button: bool = ..., green_button: bool = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
95
111
|
|
|
96
112
|
class EStopState(_message.Message):
|
|
97
|
-
__slots__ = ("button_pressed", "software_estop_enabled")
|
|
113
|
+
__slots__ = ("button_pressed", "software_estop_enabled", "timestamp_ns")
|
|
98
114
|
BUTTON_PRESSED_FIELD_NUMBER: _ClassVar[int]
|
|
99
115
|
SOFTWARE_ESTOP_ENABLED_FIELD_NUMBER: _ClassVar[int]
|
|
116
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
100
117
|
button_pressed: bool
|
|
101
118
|
software_estop_enabled: bool
|
|
102
|
-
|
|
119
|
+
timestamp_ns: int
|
|
120
|
+
def __init__(self, button_pressed: bool = ..., software_estop_enabled: bool = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
103
121
|
|
|
104
122
|
class UltrasonicState(_message.Message):
|
|
105
|
-
__slots__ = ("front_left", "front_right", "back_left", "back_right")
|
|
123
|
+
__slots__ = ("front_left", "front_right", "back_left", "back_right", "timestamp_ns")
|
|
106
124
|
FRONT_LEFT_FIELD_NUMBER: _ClassVar[int]
|
|
107
125
|
FRONT_RIGHT_FIELD_NUMBER: _ClassVar[int]
|
|
108
126
|
BACK_LEFT_FIELD_NUMBER: _ClassVar[int]
|
|
109
127
|
BACK_RIGHT_FIELD_NUMBER: _ClassVar[int]
|
|
128
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
110
129
|
front_left: float
|
|
111
130
|
front_right: float
|
|
112
131
|
back_left: float
|
|
113
132
|
back_right: float
|
|
114
|
-
|
|
133
|
+
timestamp_ns: int
|
|
134
|
+
def __init__(self, front_left: _Optional[float] = ..., front_right: _Optional[float] = ..., back_left: _Optional[float] = ..., back_right: _Optional[float] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
115
135
|
|
|
116
136
|
class IMUState(_message.Message):
|
|
117
|
-
__slots__ = ("acc_x", "acc_y", "acc_z", "gyro_x", "gyro_y", "gyro_z", "quat_w", "quat_x", "quat_y", "quat_z")
|
|
137
|
+
__slots__ = ("acc_x", "acc_y", "acc_z", "gyro_x", "gyro_y", "gyro_z", "quat_w", "quat_x", "quat_y", "quat_z", "timestamp_ns")
|
|
118
138
|
ACC_X_FIELD_NUMBER: _ClassVar[int]
|
|
119
139
|
ACC_Y_FIELD_NUMBER: _ClassVar[int]
|
|
120
140
|
ACC_Z_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -125,6 +145,7 @@ class IMUState(_message.Message):
|
|
|
125
145
|
QUAT_X_FIELD_NUMBER: _ClassVar[int]
|
|
126
146
|
QUAT_Y_FIELD_NUMBER: _ClassVar[int]
|
|
127
147
|
QUAT_Z_FIELD_NUMBER: _ClassVar[int]
|
|
148
|
+
TIMESTAMP_NS_FIELD_NUMBER: _ClassVar[int]
|
|
128
149
|
acc_x: float
|
|
129
150
|
acc_y: float
|
|
130
151
|
acc_z: float
|
|
@@ -135,7 +156,8 @@ class IMUState(_message.Message):
|
|
|
135
156
|
quat_x: float
|
|
136
157
|
quat_y: float
|
|
137
158
|
quat_z: float
|
|
138
|
-
|
|
159
|
+
timestamp_ns: int
|
|
160
|
+
def __init__(self, acc_x: _Optional[float] = ..., acc_y: _Optional[float] = ..., acc_z: _Optional[float] = ..., gyro_x: _Optional[float] = ..., gyro_y: _Optional[float] = ..., gyro_z: _Optional[float] = ..., quat_w: _Optional[float] = ..., quat_x: _Optional[float] = ..., quat_y: _Optional[float] = ..., quat_z: _Optional[float] = ..., timestamp_ns: _Optional[int] = ...) -> None: ...
|
|
139
161
|
|
|
140
162
|
class ArmCommand(_message.Message):
|
|
141
163
|
__slots__ = ("command_type", "joint_pos", "joint_vel")
|
|
@@ -190,3 +212,9 @@ class ChassisCommand(_message.Message):
|
|
|
190
212
|
left: SingleWheelCommand
|
|
191
213
|
right: SingleWheelCommand
|
|
192
214
|
def __init__(self, left: _Optional[_Union[SingleWheelCommand, _Mapping]] = ..., right: _Optional[_Union[SingleWheelCommand, _Mapping]] = ...) -> None: ...
|
|
215
|
+
|
|
216
|
+
class EndEffectorPassThroughCommand(_message.Message):
|
|
217
|
+
__slots__ = ("data",)
|
|
218
|
+
DATA_FIELD_NUMBER: _ClassVar[int]
|
|
219
|
+
data: bytes
|
|
220
|
+
def __init__(self, data: _Optional[bytes] = ...) -> None: ...
|
|
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x64\x65xcontrol_query.proto\x12\ndexcontrol\"Z\n\nSetArmMode\x12)\n\x04mode\x18\x01 \x01(\x0e\x32\x1b.dexcontrol.SetArmMode.Mode\"!\n\x04Mode\x12\x0c\n\x08POSITION\x10\x00\x12\x0b\n\x07\x44ISABLE\x10\x01\"Z\n\x0bSetHeadMode\x12*\n\x04mode\x18\x01 \x01(\x0e\x32\x1c.dexcontrol.SetHeadMode.Mode\"\x1f\n\x04Mode\x12\n\n\x06\x45NABLE\x10\x00\x12\x0b\n\x07\x44ISABLE\x10\x01\"\x1a\n\x08SetEstop\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"\x18\n\x06SetLed\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"\x82\x01\n\nClearError\x12\x33\n\tcomponent\x18\x01 \x01(\x0e\x32 .dexcontrol.ClearError.Component\"?\n\tComponent\x12\x0c\n\x08LEFT_ARM\x10\x00\x12\r\n\tRIGHT_ARM\x10\x01\x12\x08\n\x04HEAD\x10\x02\x12\x0b\n\x07\x43HASSIS\x10\x03\"y\n\x0fRebootComponent\x12\x38\n\tcomponent\x18\x01 \x01(\x0e\x32%.dexcontrol.RebootComponent.Component\",\n\tComponent\x12\x07\n\x03\x41RM\x10\x00\x12\t\n\x05TORSO\x10\x01\x12\x0b\n\x07\x43HASSIS\x10\x02\"\x80\x01\n\x0f\x46irmwareVersion\x12\x18\n\x10hardware_version\x18\x01 \x01(\x05\x12\x18\n\x10software_version\x18\x02 \x01(\x05\x12\x14\n\x0c\x63ompile_time\x18\x03 \x01(\x05\x12\x11\n\tmain_hash\x18\x04 \x01(\t\x12\x10\n\x08sub_hash\x18\x05 \x01(\t\"\xb2\x01\n\x0fSoftwareVersion\x12J\n\x10\x66irmware_version\x18\x01 \x03(\x0b\x32\x30.dexcontrol.SoftwareVersion.FirmwareVersionEntry\x1aS\n\x14\x46irmwareVersionEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.dexcontrol.FirmwareVersion:\x02\x38\x01\"\x9d\x01\n\x14SingleComponentState\x12\x11\n\tconnected\x18\x01 \x01(\x08\x12,\n\x07\x65nabled\x18\x02 \x01(\x0e\x32\x1b.dexcontrol.ComponentStatus\x12\x30\n\x0b\x65rror_state\x18\x03 \x01(\x0e\x32\x1b.dexcontrol.ComponentStatus\x12\x12\n\nerror_code\x18\x04 \x01(\t\"\x9b\x01\n\x0f\x43omponentStates\x12\x37\n\x06states\x18\x01 \x03(\x0b\x32\'.dexcontrol.ComponentStates.StatesEntry\x1aO\n\x0bStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .dexcontrol.SingleComponentState:\x02\x38\x01*0\n\x0f\x43omponentStatus\x12\n\n\x06NORMAL\x10\x00\x12\x06\n\x02NA\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x62\x06proto3')
|
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x64\x65xcontrol_query.proto\x12\ndexcontrol\"Z\n\nSetArmMode\x12)\n\x04mode\x18\x01 \x01(\x0e\x32\x1b.dexcontrol.SetArmMode.Mode\"!\n\x04Mode\x12\x0c\n\x08POSITION\x10\x00\x12\x0b\n\x07\x44ISABLE\x10\x01\"Z\n\x0bSetHeadMode\x12*\n\x04mode\x18\x01 \x01(\x0e\x32\x1c.dexcontrol.SetHeadMode.Mode\"\x1f\n\x04Mode\x12\n\n\x06\x45NABLE\x10\x00\x12\x0b\n\x07\x44ISABLE\x10\x01\"\x1a\n\x08SetEstop\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"\x18\n\x06SetLed\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"\x82\x01\n\nClearError\x12\x33\n\tcomponent\x18\x01 \x01(\x0e\x32 .dexcontrol.ClearError.Component\"?\n\tComponent\x12\x0c\n\x08LEFT_ARM\x10\x00\x12\r\n\tRIGHT_ARM\x10\x01\x12\x08\n\x04HEAD\x10\x02\x12\x0b\n\x07\x43HASSIS\x10\x03\"y\n\x0fRebootComponent\x12\x38\n\tcomponent\x18\x01 \x01(\x0e\x32%.dexcontrol.RebootComponent.Component\",\n\tComponent\x12\x07\n\x03\x41RM\x10\x00\x12\t\n\x05TORSO\x10\x01\x12\x0b\n\x07\x43HASSIS\x10\x02\"\x80\x01\n\x0f\x46irmwareVersion\x12\x18\n\x10hardware_version\x18\x01 \x01(\x05\x12\x18\n\x10software_version\x18\x02 \x01(\x05\x12\x14\n\x0c\x63ompile_time\x18\x03 \x01(\x05\x12\x11\n\tmain_hash\x18\x04 \x01(\t\x12\x10\n\x08sub_hash\x18\x05 \x01(\t\"\xb2\x01\n\x0fSoftwareVersion\x12J\n\x10\x66irmware_version\x18\x01 \x03(\x0b\x32\x30.dexcontrol.SoftwareVersion.FirmwareVersionEntry\x1aS\n\x14\x46irmwareVersionEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.dexcontrol.FirmwareVersion:\x02\x38\x01\"\x9d\x01\n\x14SingleComponentState\x12\x11\n\tconnected\x18\x01 \x01(\x08\x12,\n\x07\x65nabled\x18\x02 \x01(\x0e\x32\x1b.dexcontrol.ComponentStatus\x12\x30\n\x0b\x65rror_state\x18\x03 \x01(\x0e\x32\x1b.dexcontrol.ComponentStatus\x12\x12\n\nerror_code\x18\x04 \x01(\t\"\x9b\x01\n\x0f\x43omponentStates\x12\x37\n\x06states\x18\x01 \x03(\x0b\x32\'.dexcontrol.ComponentStates.StatesEntry\x1aO\n\x0bStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .dexcontrol.SingleComponentState:\x02\x38\x01\"U\n\nNTPRequest\x12\x1b\n\x13\x63lient_send_time_ns\x18\x01 \x01(\x04\x12\x14\n\x0csample_count\x18\x02 \x01(\r\x12\x14\n\x0csample_index\x18\x03 \x01(\r\"\x94\x01\n\x0bNTPResponse\x12\x1b\n\x13\x63lient_send_time_ns\x18\x01 \x01(\x04\x12\x1e\n\x16server_receive_time_ns\x18\x02 \x01(\x04\x12\x1b\n\x13server_send_time_ns\x18\x03 \x01(\x04\x12\x14\n\x0csample_index\x18\x04 \x01(\r\x12\x15\n\rtotal_samples\x18\x05 \x01(\r*0\n\x0f\x43omponentStatus\x12\n\n\x06NORMAL\x10\x00\x12\x06\n\x02NA\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x62\x06proto3')
|
|
29
29
|
|
|
30
30
|
_globals = globals()
|
|
31
31
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -36,8 +36,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
36
36
|
_globals['_SOFTWAREVERSION_FIRMWAREVERSIONENTRY']._serialized_options = b'8\001'
|
|
37
37
|
_globals['_COMPONENTSTATES_STATESENTRY']._loaded_options = None
|
|
38
38
|
_globals['_COMPONENTSTATES_STATESENTRY']._serialized_options = b'8\001'
|
|
39
|
-
_globals['_COMPONENTSTATUS']._serialized_start=
|
|
40
|
-
_globals['_COMPONENTSTATUS']._serialized_end=
|
|
39
|
+
_globals['_COMPONENTSTATUS']._serialized_start=1400
|
|
40
|
+
_globals['_COMPONENTSTATUS']._serialized_end=1448
|
|
41
41
|
_globals['_SETARMMODE']._serialized_start=38
|
|
42
42
|
_globals['_SETARMMODE']._serialized_end=128
|
|
43
43
|
_globals['_SETARMMODE_MODE']._serialized_start=95
|
|
@@ -70,4 +70,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
70
70
|
_globals['_COMPONENTSTATES']._serialized_end=1160
|
|
71
71
|
_globals['_COMPONENTSTATES_STATESENTRY']._serialized_start=1081
|
|
72
72
|
_globals['_COMPONENTSTATES_STATESENTRY']._serialized_end=1160
|
|
73
|
+
_globals['_NTPREQUEST']._serialized_start=1162
|
|
74
|
+
_globals['_NTPREQUEST']._serialized_end=1247
|
|
75
|
+
_globals['_NTPRESPONSE']._serialized_start=1250
|
|
76
|
+
_globals['_NTPRESPONSE']._serialized_end=1398
|
|
73
77
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -136,3 +136,27 @@ class ComponentStates(_message.Message):
|
|
|
136
136
|
STATES_FIELD_NUMBER: _ClassVar[int]
|
|
137
137
|
states: _containers.MessageMap[str, SingleComponentState]
|
|
138
138
|
def __init__(self, states: _Optional[_Mapping[str, SingleComponentState]] = ...) -> None: ...
|
|
139
|
+
|
|
140
|
+
class NTPRequest(_message.Message):
|
|
141
|
+
__slots__ = ("client_send_time_ns", "sample_count", "sample_index")
|
|
142
|
+
CLIENT_SEND_TIME_NS_FIELD_NUMBER: _ClassVar[int]
|
|
143
|
+
SAMPLE_COUNT_FIELD_NUMBER: _ClassVar[int]
|
|
144
|
+
SAMPLE_INDEX_FIELD_NUMBER: _ClassVar[int]
|
|
145
|
+
client_send_time_ns: int
|
|
146
|
+
sample_count: int
|
|
147
|
+
sample_index: int
|
|
148
|
+
def __init__(self, client_send_time_ns: _Optional[int] = ..., sample_count: _Optional[int] = ..., sample_index: _Optional[int] = ...) -> None: ...
|
|
149
|
+
|
|
150
|
+
class NTPResponse(_message.Message):
|
|
151
|
+
__slots__ = ("client_send_time_ns", "server_receive_time_ns", "server_send_time_ns", "sample_index", "total_samples")
|
|
152
|
+
CLIENT_SEND_TIME_NS_FIELD_NUMBER: _ClassVar[int]
|
|
153
|
+
SERVER_RECEIVE_TIME_NS_FIELD_NUMBER: _ClassVar[int]
|
|
154
|
+
SERVER_SEND_TIME_NS_FIELD_NUMBER: _ClassVar[int]
|
|
155
|
+
SAMPLE_INDEX_FIELD_NUMBER: _ClassVar[int]
|
|
156
|
+
TOTAL_SAMPLES_FIELD_NUMBER: _ClassVar[int]
|
|
157
|
+
client_send_time_ns: int
|
|
158
|
+
server_receive_time_ns: int
|
|
159
|
+
server_send_time_ns: int
|
|
160
|
+
sample_index: int
|
|
161
|
+
total_samples: int
|
|
162
|
+
def __init__(self, client_send_time_ns: _Optional[int] = ..., server_receive_time_ns: _Optional[int] = ..., server_send_time_ns: _Optional[int] = ..., sample_index: _Optional[int] = ..., total_samples: _Optional[int] = ...) -> None: ...
|