luckyrobots 0.1.73__tar.gz → 0.1.74__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.
Files changed (47) hide show
  1. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/PKG-INFO +1 -1
  2. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/pyproject.toml +1 -1
  3. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/client.py +151 -0
  4. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/config/robots.yaml +24 -0
  5. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/agent_pb2.py +4 -4
  6. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/agent_pb2_grpc.py +1 -1
  7. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/camera_pb2.py +2 -2
  8. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/camera_pb2_grpc.py +2 -2
  9. luckyrobots-0.1.74/src/luckyrobots/grpc/generated/debug_pb2.py +51 -0
  10. luckyrobots-0.1.74/src/luckyrobots/grpc/generated/debug_pb2_grpc.py +100 -0
  11. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/hazel_rpc_pb2.py +10 -9
  12. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/mujoco_pb2_grpc.py +1 -1
  13. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/scene_pb2.py +1 -1
  14. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/scene_pb2_grpc.py +1 -1
  15. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/telemetry_pb2_grpc.py +1 -1
  16. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/viewport_pb2.py +1 -1
  17. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/viewport_pb2_grpc.py +2 -2
  18. luckyrobots-0.1.74/src/luckyrobots/grpc/proto/debug.proto +63 -0
  19. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/hazel_rpc.proto +1 -0
  20. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/.gitignore +0 -0
  21. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/LICENSE +0 -0
  22. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/README.md +0 -0
  23. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/__init__.py +0 -0
  24. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/config/__init__.py +0 -0
  25. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/engine/__init__.py +0 -0
  26. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/engine/manager.py +0 -0
  27. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/__init__.py +0 -0
  28. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/__init__.py +0 -0
  29. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/common_pb2.py +0 -0
  30. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/common_pb2_grpc.py +0 -0
  31. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/hazel_rpc_pb2_grpc.py +0 -0
  32. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/media_pb2.py +0 -0
  33. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/media_pb2_grpc.py +0 -0
  34. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/mujoco_pb2.py +0 -0
  35. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/generated/telemetry_pb2.py +0 -0
  36. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/agent.proto +0 -0
  37. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/camera.proto +0 -0
  38. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/common.proto +0 -0
  39. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/media.proto +0 -0
  40. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/mujoco.proto +0 -0
  41. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/scene.proto +0 -0
  42. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/telemetry.proto +0 -0
  43. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/grpc/proto/viewport.proto +0 -0
  44. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/luckyrobots.py +0 -0
  45. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/models/__init__.py +0 -0
  46. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/models/observation.py +0 -0
  47. {luckyrobots-0.1.73 → luckyrobots-0.1.74}/src/luckyrobots/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luckyrobots
3
- Version: 0.1.73
3
+ Version: 0.1.74
4
4
  Summary: Robotics-AI Training in Hyperrealistic Game Environments
5
5
  Project-URL: Homepage, https://github.com/luckyrobots/luckyrobots
6
6
  Project-URL: Documentation, https://luckyrobots.readthedocs.io
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "luckyrobots"
7
- version = "0.1.73"
7
+ version = "0.1.74"
8
8
  description = "Robotics-AI Training in Hyperrealistic Game Environments"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -18,6 +18,8 @@ try:
18
18
  from .grpc.generated import agent_pb2 # type: ignore
19
19
  from .grpc.generated import agent_pb2_grpc # type: ignore
20
20
  from .grpc.generated import common_pb2 # type: ignore
21
+ from .grpc.generated import debug_pb2 # type: ignore
22
+ from .grpc.generated import debug_pb2_grpc # type: ignore
21
23
  from .grpc.generated import mujoco_pb2 # type: ignore
22
24
  from .grpc.generated import mujoco_pb2_grpc # type: ignore
23
25
  from .grpc.generated import scene_pb2 # type: ignore
@@ -87,6 +89,7 @@ class LuckyEngineClient:
87
89
  self._scene = None
88
90
  self._mujoco = None
89
91
  self._agent = None
92
+ self._debug = None
90
93
 
91
94
  # Cached agent schemas: agent_name -> (observation_names, action_names)
92
95
  self._schema_cache: dict[str, tuple[list[str], list[str]]] = {}
@@ -97,6 +100,7 @@ class LuckyEngineClient:
97
100
  scene=scene_pb2,
98
101
  mujoco=mujoco_pb2,
99
102
  agent=agent_pb2,
103
+ debug=debug_pb2,
100
104
  )
101
105
 
102
106
  def connect(self) -> None:
@@ -122,6 +126,7 @@ class LuckyEngineClient:
122
126
  self._scene = scene_pb2_grpc.SceneServiceStub(self._channel)
123
127
  self._mujoco = mujoco_pb2_grpc.MujocoServiceStub(self._channel)
124
128
  self._agent = agent_pb2_grpc.AgentServiceStub(self._channel)
129
+ self._debug = debug_pb2_grpc.DebugServiceStub(self._channel)
125
130
 
126
131
  logger.info(f"Channel opened to {target} (server not verified yet)")
127
132
 
@@ -136,6 +141,7 @@ class LuckyEngineClient:
136
141
  self._scene = None
137
142
  self._mujoco = None
138
143
  self._agent = None
144
+ self._debug = None
139
145
  logger.info("gRPC channel closed")
140
146
 
141
147
  def is_connected(self) -> bool:
@@ -231,6 +237,13 @@ class LuckyEngineClient:
231
237
  raise GrpcConnectionError("Not connected. Call connect() first.")
232
238
  return self._agent
233
239
 
240
+ @property
241
+ def debug(self) -> Any:
242
+ """DebugService stub."""
243
+ if self._debug is None:
244
+ raise GrpcConnectionError("Not connected. Call connect() first.")
245
+ return self._debug
246
+
234
247
  def get_mujoco_info(self, robot_name: str = "", timeout: Optional[float] = None):
235
248
  """Get MuJoCo model information (joint names, limits, etc.)."""
236
249
  timeout = timeout or self.timeout
@@ -524,3 +537,141 @@ class LuckyEngineClient:
524
537
  proto_kwargs["terrain_difficulty"] = terrain_diff
525
538
 
526
539
  return self.pb.agent.DomainRandomizationConfig(**proto_kwargs)
540
+
541
+ def draw_velocity_command(
542
+ self,
543
+ origin: tuple[float, float, float],
544
+ lin_vel_x: float,
545
+ lin_vel_y: float,
546
+ ang_vel_z: float,
547
+ scale: float = 1.0,
548
+ clear_previous: bool = True,
549
+ timeout: Optional[float] = None,
550
+ ) -> bool:
551
+ """
552
+ Draw velocity command visualization in LuckyEngine.
553
+
554
+ Args:
555
+ origin: (x, y, z) position of the robot.
556
+ lin_vel_x: Forward velocity command.
557
+ lin_vel_y: Lateral velocity command.
558
+ ang_vel_z: Angular velocity command (yaw rate).
559
+ scale: Scale factor for visualization.
560
+ clear_previous: Clear previous debug draws before drawing.
561
+ timeout: RPC timeout in seconds.
562
+
563
+ Returns:
564
+ True if draw succeeded, False otherwise.
565
+ """
566
+ timeout = timeout or self.timeout
567
+
568
+ velocity_cmd = self.pb.debug.DebugVelocityCommand(
569
+ origin=self.pb.debug.DebugVector3(x=origin[0], y=origin[1], z=origin[2]),
570
+ lin_vel_x=lin_vel_x,
571
+ lin_vel_y=lin_vel_y,
572
+ ang_vel_z=ang_vel_z,
573
+ scale=scale,
574
+ )
575
+
576
+ request = self.pb.debug.DebugDrawRequest(
577
+ velocity_command=velocity_cmd,
578
+ clear_previous=clear_previous,
579
+ )
580
+
581
+ try:
582
+ resp = self.debug.Draw(request, timeout=timeout)
583
+ return resp.success
584
+ except Exception as e:
585
+ logger.debug(f"Debug draw failed: {e}")
586
+ return False
587
+
588
+ def draw_arrow(
589
+ self,
590
+ origin: tuple[float, float, float],
591
+ direction: tuple[float, float, float],
592
+ color: tuple[float, float, float, float] = (1.0, 0.0, 0.0, 1.0),
593
+ scale: float = 1.0,
594
+ clear_previous: bool = False,
595
+ timeout: Optional[float] = None,
596
+ ) -> bool:
597
+ """
598
+ Draw a debug arrow in LuckyEngine.
599
+
600
+ Args:
601
+ origin: (x, y, z) start position.
602
+ direction: (x, y, z) direction and magnitude.
603
+ color: (r, g, b, a) color values (0-1 range).
604
+ scale: Scale factor for visualization.
605
+ clear_previous: Clear previous debug draws before drawing.
606
+ timeout: RPC timeout in seconds.
607
+
608
+ Returns:
609
+ True if draw succeeded, False otherwise.
610
+ """
611
+ timeout = timeout or self.timeout
612
+
613
+ arrow = self.pb.debug.DebugArrow(
614
+ origin=self.pb.debug.DebugVector3(x=origin[0], y=origin[1], z=origin[2]),
615
+ direction=self.pb.debug.DebugVector3(
616
+ x=direction[0], y=direction[1], z=direction[2]
617
+ ),
618
+ color=self.pb.debug.DebugColor(
619
+ r=color[0], g=color[1], b=color[2], a=color[3]
620
+ ),
621
+ scale=scale,
622
+ )
623
+
624
+ request = self.pb.debug.DebugDrawRequest(
625
+ arrows=[arrow],
626
+ clear_previous=clear_previous,
627
+ )
628
+
629
+ try:
630
+ resp = self.debug.Draw(request, timeout=timeout)
631
+ return resp.success
632
+ except Exception as e:
633
+ logger.debug(f"Debug draw failed: {e}")
634
+ return False
635
+
636
+ def draw_line(
637
+ self,
638
+ start: tuple[float, float, float],
639
+ end: tuple[float, float, float],
640
+ color: tuple[float, float, float, float] = (1.0, 1.0, 1.0, 1.0),
641
+ clear_previous: bool = False,
642
+ timeout: Optional[float] = None,
643
+ ) -> bool:
644
+ """
645
+ Draw a debug line in LuckyEngine.
646
+
647
+ Args:
648
+ start: (x, y, z) start position.
649
+ end: (x, y, z) end position.
650
+ color: (r, g, b, a) color values (0-1 range).
651
+ clear_previous: Clear previous debug draws before drawing.
652
+ timeout: RPC timeout in seconds.
653
+
654
+ Returns:
655
+ True if draw succeeded, False otherwise.
656
+ """
657
+ timeout = timeout or self.timeout
658
+
659
+ line = self.pb.debug.DebugLine(
660
+ start=self.pb.debug.DebugVector3(x=start[0], y=start[1], z=start[2]),
661
+ end=self.pb.debug.DebugVector3(x=end[0], y=end[1], z=end[2]),
662
+ color=self.pb.debug.DebugColor(
663
+ r=color[0], g=color[1], b=color[2], a=color[3]
664
+ ),
665
+ )
666
+
667
+ request = self.pb.debug.DebugDrawRequest(
668
+ lines=[line],
669
+ clear_previous=clear_previous,
670
+ )
671
+
672
+ try:
673
+ resp = self.debug.Draw(request, timeout=timeout)
674
+ return resp.success
675
+ except Exception as e:
676
+ logger.debug(f"Debug draw failed: {e}")
677
+ return False
@@ -166,50 +166,62 @@ unitreego1:
166
166
  lower: -0.863
167
167
  upper: 0.863
168
168
  default: 0.1
169
+ scale: 0.3727530387083568
169
170
  - name: FR_thigh_joint
170
171
  lower: -0.686
171
172
  upper: 4.501
172
173
  default: 0.9
174
+ scale: 0.3727530387083568
173
175
  - name: FR_calf_joint
174
176
  lower: -2.818
175
177
  upper: -0.888
176
178
  default: -1.8
179
+ scale: 0.24850202580557115
177
180
  - name: FL_hip_joint
178
181
  lower: -0.863
179
182
  upper: 0.863
180
183
  default: -0.1
184
+ scale: 0.3727530387083568
181
185
  - name: FL_thigh_joint
182
186
  lower: -0.686
183
187
  upper: 4.501
184
188
  default: 0.9
189
+ scale: 0.3727530387083568
185
190
  - name: FL_calf_joint
186
191
  lower: -2.818
187
192
  upper: -0.888
188
193
  default: -1.8
194
+ scale: 0.24850202580557115
189
195
  - name: RR_hip_joint
190
196
  lower: -0.863
191
197
  upper: 0.863
192
198
  default: 0.1
199
+ scale: 0.3727530387083568
193
200
  - name: RR_thigh_joint
194
201
  lower: -0.686
195
202
  upper: 4.501
196
203
  default: 0.9
204
+ scale: 0.3727530387083568
197
205
  - name: RR_calf_joint
198
206
  lower: -2.818
199
207
  upper: -0.888
200
208
  default: -1.8
209
+ scale: 0.24850202580557115
201
210
  - name: RL_hip_joint
202
211
  lower: -0.863
203
212
  upper: 0.863
204
213
  default: -0.1
214
+ scale: 0.3727530387083568
205
215
  - name: RL_thigh_joint
206
216
  lower: -0.686
207
217
  upper: 4.501
208
218
  default: 0.9
219
+ scale: 0.3727530387083568
209
220
  - name: RL_calf_joint
210
221
  lower: -2.818
211
222
  upper: -0.888
212
223
  default: -1.8
224
+ scale: 0.24850202580557115
213
225
  observation_space:
214
226
  actuator_names:
215
227
  - FR_hip_joint
@@ -229,47 +241,59 @@ unitreego1:
229
241
  lower: -0.863
230
242
  upper: 0.863
231
243
  default: 0.1
244
+ scale: 0.3727530387083568
232
245
  - name: FR_thigh_joint
233
246
  lower: -0.686
234
247
  upper: 4.501
235
248
  default: 0.9
249
+ scale: 0.3727530387083568
236
250
  - name: FR_calf_joint
237
251
  lower: -2.818
238
252
  upper: -0.888
239
253
  default: -1.8
254
+ scale: 0.24850202580557115
240
255
  - name: FL_hip_joint
241
256
  lower: -0.863
242
257
  upper: 0.863
243
258
  default: -0.1
259
+ scale: 0.3727530387083568
244
260
  - name: FL_thigh_joint
245
261
  lower: -0.686
246
262
  upper: 4.501
247
263
  default: 0.9
264
+ scale: 0.3727530387083568
248
265
  - name: FL_calf_joint
249
266
  lower: -2.818
250
267
  upper: -0.888
251
268
  default: -1.8
269
+ scale: 0.24850202580557115
252
270
  - name: RR_hip_joint
253
271
  lower: -0.863
254
272
  upper: 0.863
255
273
  default: 0.1
274
+ scale: 0.3727530387083568
256
275
  - name: RR_thigh_joint
257
276
  lower: -0.686
258
277
  upper: 4.501
259
278
  default: 0.9
279
+ scale: 0.3727530387083568
260
280
  - name: RR_calf_joint
261
281
  lower: -2.818
262
282
  upper: -0.888
263
283
  default: -1.8
284
+ scale: 0.24850202580557115
264
285
  - name: RL_hip_joint
265
286
  lower: -0.863
266
287
  upper: 0.863
267
288
  default: -0.1
289
+ scale: 0.3727530387083568
268
290
  - name: RL_thigh_joint
269
291
  lower: -0.686
270
292
  upper: 4.501
271
293
  default: 0.9
294
+ scale: 0.3727530387083568
272
295
  - name: RL_calf_joint
273
296
  lower: -2.818
274
297
  upper: -0.888
275
298
  default: -1.8
299
+ scale: 0.24850202580557115
@@ -22,10 +22,10 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
- from . import common_pb2 as common__pb2
26
- from . import media_pb2 as media__pb2
27
- from . import mujoco_pb2 as mujoco__pb2
28
- from . import telemetry_pb2 as telemetry__pb2
25
+ import common_pb2 as common__pb2
26
+ import media_pb2 as media__pb2
27
+ import mujoco_pb2 as mujoco__pb2
28
+ import telemetry_pb2 as telemetry__pb2
29
29
 
30
30
 
31
31
  DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61gent.proto\x12\thazel.rpc\x1a\x0c\x63ommon.proto\x1a\x0bmedia.proto\x1a\x0cmujoco.proto\x1a\x0ftelemetry.proto\"\x81\x01\n\x0b\x41gentSchema\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x19\n\x11observation_names\x18\x02 \x03(\t\x12\x14\n\x0c\x61\x63tion_names\x18\x03 \x03(\t\x12\x18\n\x10observation_size\x18\x04 \x01(\r\x12\x13\n\x0b\x61\x63tion_size\x18\x05 \x01(\r\"+\n\x15GetAgentSchemaRequest\x12\x12\n\nagent_name\x18\x01 \x01(\t\"@\n\x16GetAgentSchemaResponse\x12&\n\x06schema\x18\x01 \x01(\x0b\x32\x16.hazel.rpc.AgentSchema\"<\n\x12StreamAgentRequest\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x12\n\ntarget_fps\x18\x02 \x01(\r\"\xa1\x03\n\x19\x44omainRandomizationConfig\x12\x1b\n\x13pose_position_noise\x18\x01 \x03(\x02\x12\x1e\n\x16pose_orientation_noise\x18\x02 \x01(\x02\x12\x1c\n\x14joint_position_noise\x18\x03 \x01(\x02\x12\x1c\n\x14joint_velocity_noise\x18\x04 \x01(\x02\x12\x16\n\x0e\x66riction_range\x18\x05 \x03(\x02\x12\x19\n\x11restitution_range\x18\x06 \x03(\x02\x12\x18\n\x10mass_scale_range\x18\x07 \x03(\x02\x12\x18\n\x10\x63om_offset_range\x18\x08 \x03(\x02\x12\x1c\n\x14motor_strength_range\x18\t \x03(\x02\x12\x1a\n\x12motor_offset_range\x18\n \x03(\x02\x12\x1b\n\x13push_interval_range\x18\x0b \x03(\x02\x12\x1b\n\x13push_velocity_range\x18\x0c \x03(\x02\x12\x14\n\x0cterrain_type\x18\r \x01(\t\x12\x1a\n\x12terrain_difficulty\x18\x0e \x01(\x02\"`\n\x11ResetAgentRequest\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x37\n\tdr_config\x18\x02 \x01(\x0b\x32$.hazel.rpc.DomainRandomizationConfig\"6\n\x12ResetAgentResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x87\x01\n\nAgentFrame\x12\x14\n\x0ctimestamp_ms\x18\x01 \x01(\x04\x12\x14\n\x0c\x66rame_number\x18\x02 \x01(\r\x12\x14\n\x0cobservations\x18\x03 \x03(\x02\x12\x0f\n\x07\x61\x63tions\x18\x04 \x03(\x02\x12\x12\n\nagent_name\x18\x05 \x01(\t\x12\x12\n\ntarget_fps\x18\x06 \x01(\r\"\x87\x01\n\x15GetCameraFrameRequest\x12!\n\x02id\x18\x01 \x01(\x0b\x32\x13.hazel.rpc.EntityIdH\x00\x12\x0e\n\x04name\x18\x02 \x01(\tH\x00\x12\r\n\x05width\x18\x03 \x01(\r\x12\x0e\n\x06height\x18\x04 \x01(\r\x12\x0e\n\x06\x66ormat\x18\x05 \x01(\tB\x0c\n\nidentifier\"_\n\x17GetViewportFrameRequest\x12\x15\n\rviewport_name\x18\x01 \x01(\t\x12\r\n\x05width\x18\x02 \x01(\r\x12\x0e\n\x06height\x18\x03 \x01(\r\x12\x0e\n\x06\x66ormat\x18\x04 \x01(\t\"\xfe\x01\n\x15GetObservationRequest\x12\x12\n\nrobot_name\x18\x01 \x01(\t\x12\x12\n\nagent_name\x18\x02 \x01(\t\x12\x1b\n\x13include_joint_state\x18\x03 \x01(\x08\x12\x1b\n\x13include_agent_frame\x18\x04 \x01(\x08\x12\x19\n\x11include_telemetry\x18\x05 \x01(\x08\x12\x31\n\x07\x63\x61meras\x18\x06 \x03(\x0b\x32 .hazel.rpc.GetCameraFrameRequest\x12\x35\n\tviewports\x18\x07 \x03(\x0b\x32\".hazel.rpc.GetViewportFrameRequest\"\xd4\x02\n\x16GetObservationResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x03 \x01(\x04\x12\x14\n\x0c\x66rame_number\x18\x04 \x01(\r\x12*\n\x0bjoint_state\x18\x05 \x01(\x0b\x32\x15.hazel.rpc.JointState\x12*\n\x0b\x61gent_frame\x18\x06 \x01(\x0b\x32\x15.hazel.rpc.AgentFrame\x12,\n\ttelemetry\x18\x07 \x01(\x0b\x32\x19.hazel.rpc.TelemetryFrame\x12\x31\n\rcamera_frames\x18\x08 \x03(\x0b\x32\x1a.hazel.rpc.NamedImageFrame\x12\x33\n\x0fviewport_frames\x18\t \x03(\x0b\x32\x1a.hazel.rpc.NamedImageFrame\"F\n\x0bStepRequest\x12\x12\n\nagent_name\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x63tions\x18\x02 \x03(\x02\x12\x12\n\ntimeout_ms\x18\x03 \x01(\r\"~\n\x0cStepResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\x12*\n\x0bobservation\x18\x03 \x01(\x0b\x32\x15.hazel.rpc.AgentFrame\x12 \n\x18physics_step_duration_us\x18\x04 \x01(\x04\x32\x87\x03\n\x0c\x41gentService\x12U\n\x0eGetAgentSchema\x12 .hazel.rpc.GetAgentSchemaRequest\x1a!.hazel.rpc.GetAgentSchemaResponse\x12U\n\x0eGetObservation\x12 .hazel.rpc.GetObservationRequest\x1a!.hazel.rpc.GetObservationResponse\x12\x45\n\x0bStreamAgent\x12\x1d.hazel.rpc.StreamAgentRequest\x1a\x15.hazel.rpc.AgentFrame0\x01\x12I\n\nResetAgent\x12\x1c.hazel.rpc.ResetAgentRequest\x1a\x1d.hazel.rpc.ResetAgentResponse\x12\x37\n\x04Step\x12\x16.hazel.rpc.StepRequest\x1a\x17.hazel.rpc.StepResponseB\x03\xf8\x01\x01\x62\x06proto3')
@@ -3,7 +3,7 @@
3
3
  import grpc
4
4
  import warnings
5
5
 
6
- from . import agent_pb2 as agent__pb2
6
+ import agent_pb2 as agent__pb2
7
7
 
8
8
  GRPC_GENERATED_VERSION = '1.76.0'
9
9
  GRPC_VERSION = grpc.__version__
@@ -22,8 +22,8 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
- from . import common_pb2 as common__pb2
26
- from . import media_pb2 as media__pb2
25
+ import common_pb2 as common__pb2
26
+ import media_pb2 as media__pb2
27
27
 
28
28
 
29
29
  DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63\x61mera.proto\x12\thazel.rpc\x1a\x0c\x63ommon.proto\x1a\x0bmedia.proto\";\n\nCameraInfo\x12\x1f\n\x02id\x18\x01 \x01(\x0b\x32\x13.hazel.rpc.EntityId\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x14\n\x12ListCamerasRequest\"=\n\x13ListCamerasResponse\x12&\n\x07\x63\x61meras\x18\x01 \x03(\x0b\x32\x15.hazel.rpc.CameraInfo\"\x99\x01\n\x13StreamCameraRequest\x12!\n\x02id\x18\x01 \x01(\x0b\x32\x13.hazel.rpc.EntityIdH\x00\x12\x0e\n\x04name\x18\x02 \x01(\tH\x00\x12\x12\n\ntarget_fps\x18\x03 \x01(\r\x12\r\n\x05width\x18\x04 \x01(\r\x12\x0e\n\x06height\x18\x05 \x01(\r\x12\x0e\n\x06\x66ormat\x18\x06 \x01(\tB\x0c\n\nidentifier2\xa6\x01\n\rCameraService\x12L\n\x0bListCameras\x12\x1d.hazel.rpc.ListCamerasRequest\x1a\x1e.hazel.rpc.ListCamerasResponse\x12G\n\x0cStreamCamera\x12\x1e.hazel.rpc.StreamCameraRequest\x1a\x15.hazel.rpc.ImageFrame0\x01\x42\x03\xf8\x01\x01\x62\x06proto3')
@@ -3,8 +3,8 @@
3
3
  import grpc
4
4
  import warnings
5
5
 
6
- from . import camera_pb2 as camera__pb2
7
- from . import media_pb2 as media__pb2
6
+ import camera_pb2 as camera__pb2
7
+ import media_pb2 as media__pb2
8
8
 
9
9
  GRPC_GENERATED_VERSION = '1.76.0'
10
10
  GRPC_VERSION = grpc.__version__
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: debug.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'debug.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x64\x65\x62ug.proto\x12\thazel.rpc\"/\n\x0c\x44\x65\x62ugVector3\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"8\n\nDebugColor\x12\t\n\x01r\x18\x01 \x01(\x02\x12\t\n\x01g\x18\x02 \x01(\x02\x12\t\n\x01\x62\x18\x03 \x01(\x02\x12\t\n\x01\x61\x18\x04 \x01(\x02\"\x7f\n\tDebugLine\x12&\n\x05start\x18\x01 \x01(\x0b\x32\x17.hazel.rpc.DebugVector3\x12$\n\x03\x65nd\x18\x02 \x01(\x0b\x32\x17.hazel.rpc.DebugVector3\x12$\n\x05\x63olor\x18\x03 \x01(\x0b\x32\x15.hazel.rpc.DebugColor\"\x96\x01\n\nDebugArrow\x12\'\n\x06origin\x18\x01 \x01(\x0b\x32\x17.hazel.rpc.DebugVector3\x12*\n\tdirection\x18\x02 \x01(\x0b\x32\x17.hazel.rpc.DebugVector3\x12$\n\x05\x63olor\x18\x03 \x01(\x0b\x32\x15.hazel.rpc.DebugColor\x12\r\n\x05scale\x18\x04 \x01(\x02\"\x87\x01\n\x14\x44\x65\x62ugVelocityCommand\x12\'\n\x06origin\x18\x01 \x01(\x0b\x32\x17.hazel.rpc.DebugVector3\x12\x11\n\tlin_vel_x\x18\x02 \x01(\x02\x12\x11\n\tlin_vel_y\x18\x03 \x01(\x02\x12\x11\n\tang_vel_z\x18\x04 \x01(\x02\x12\r\n\x05scale\x18\x05 \x01(\x02\"\xb1\x01\n\x10\x44\x65\x62ugDrawRequest\x12#\n\x05lines\x18\x01 \x03(\x0b\x32\x14.hazel.rpc.DebugLine\x12%\n\x06\x61rrows\x18\x02 \x03(\x0b\x32\x15.hazel.rpc.DebugArrow\x12\x39\n\x10velocity_command\x18\x03 \x01(\x0b\x32\x1f.hazel.rpc.DebugVelocityCommand\x12\x16\n\x0e\x63lear_previous\x18\x04 \x01(\x08\"$\n\x11\x44\x65\x62ugDrawResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x32Q\n\x0c\x44\x65\x62ugService\x12\x41\n\x04\x44raw\x12\x1b.hazel.rpc.DebugDrawRequest\x1a\x1c.hazel.rpc.DebugDrawResponseB\x03\xf8\x01\x01\x62\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'debug_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ _globals['DESCRIPTOR']._loaded_options = None
34
+ _globals['DESCRIPTOR']._serialized_options = b'\370\001\001'
35
+ _globals['_DEBUGVECTOR3']._serialized_start=26
36
+ _globals['_DEBUGVECTOR3']._serialized_end=73
37
+ _globals['_DEBUGCOLOR']._serialized_start=75
38
+ _globals['_DEBUGCOLOR']._serialized_end=131
39
+ _globals['_DEBUGLINE']._serialized_start=133
40
+ _globals['_DEBUGLINE']._serialized_end=260
41
+ _globals['_DEBUGARROW']._serialized_start=263
42
+ _globals['_DEBUGARROW']._serialized_end=413
43
+ _globals['_DEBUGVELOCITYCOMMAND']._serialized_start=416
44
+ _globals['_DEBUGVELOCITYCOMMAND']._serialized_end=551
45
+ _globals['_DEBUGDRAWREQUEST']._serialized_start=554
46
+ _globals['_DEBUGDRAWREQUEST']._serialized_end=731
47
+ _globals['_DEBUGDRAWRESPONSE']._serialized_start=733
48
+ _globals['_DEBUGDRAWRESPONSE']._serialized_end=769
49
+ _globals['_DEBUGSERVICE']._serialized_start=771
50
+ _globals['_DEBUGSERVICE']._serialized_end=852
51
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,100 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
5
+
6
+ import debug_pb2 as debug__pb2
7
+
8
+ GRPC_GENERATED_VERSION = '1.76.0'
9
+ GRPC_VERSION = grpc.__version__
10
+ _version_not_supported = False
11
+
12
+ try:
13
+ from grpc._utilities import first_version_is_lower
14
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
15
+ except ImportError:
16
+ _version_not_supported = True
17
+
18
+ if _version_not_supported:
19
+ raise RuntimeError(
20
+ f'The grpc package installed is at version {GRPC_VERSION},'
21
+ + ' but the generated code in debug_pb2_grpc.py depends on'
22
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
23
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
24
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
25
+ )
26
+
27
+
28
+ class DebugServiceStub(object):
29
+ """Debug visualization service.
30
+ """
31
+
32
+ def __init__(self, channel):
33
+ """Constructor.
34
+
35
+ Args:
36
+ channel: A grpc.Channel.
37
+ """
38
+ self.Draw = channel.unary_unary(
39
+ '/hazel.rpc.DebugService/Draw',
40
+ request_serializer=debug__pb2.DebugDrawRequest.SerializeToString,
41
+ response_deserializer=debug__pb2.DebugDrawResponse.FromString,
42
+ _registered_method=True)
43
+
44
+
45
+ class DebugServiceServicer(object):
46
+ """Debug visualization service.
47
+ """
48
+
49
+ def Draw(self, request, context):
50
+ """Missing associated documentation comment in .proto file."""
51
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
52
+ context.set_details('Method not implemented!')
53
+ raise NotImplementedError('Method not implemented!')
54
+
55
+
56
+ def add_DebugServiceServicer_to_server(servicer, server):
57
+ rpc_method_handlers = {
58
+ 'Draw': grpc.unary_unary_rpc_method_handler(
59
+ servicer.Draw,
60
+ request_deserializer=debug__pb2.DebugDrawRequest.FromString,
61
+ response_serializer=debug__pb2.DebugDrawResponse.SerializeToString,
62
+ ),
63
+ }
64
+ generic_handler = grpc.method_handlers_generic_handler(
65
+ 'hazel.rpc.DebugService', rpc_method_handlers)
66
+ server.add_generic_rpc_handlers((generic_handler,))
67
+ server.add_registered_method_handlers('hazel.rpc.DebugService', rpc_method_handlers)
68
+
69
+
70
+ # This class is part of an EXPERIMENTAL API.
71
+ class DebugService(object):
72
+ """Debug visualization service.
73
+ """
74
+
75
+ @staticmethod
76
+ def Draw(request,
77
+ target,
78
+ options=(),
79
+ channel_credentials=None,
80
+ call_credentials=None,
81
+ insecure=False,
82
+ compression=None,
83
+ wait_for_ready=None,
84
+ timeout=None,
85
+ metadata=None):
86
+ return grpc.experimental.unary_unary(
87
+ request,
88
+ target,
89
+ '/hazel.rpc.DebugService/Draw',
90
+ debug__pb2.DebugDrawRequest.SerializeToString,
91
+ debug__pb2.DebugDrawResponse.FromString,
92
+ options,
93
+ channel_credentials,
94
+ insecure,
95
+ call_credentials,
96
+ compression,
97
+ wait_for_ready,
98
+ timeout,
99
+ metadata,
100
+ _registered_method=True)
@@ -22,17 +22,18 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
- from . import common_pb2 as common__pb2
26
- from . import scene_pb2 as scene__pb2
27
- from . import mujoco_pb2 as mujoco__pb2
28
- from . import telemetry_pb2 as telemetry__pb2
29
- from . import media_pb2 as media__pb2
30
- from . import agent_pb2 as agent__pb2
31
- from . import viewport_pb2 as viewport__pb2
32
- from . import camera_pb2 as camera__pb2
25
+ import common_pb2 as common__pb2
26
+ import scene_pb2 as scene__pb2
27
+ import mujoco_pb2 as mujoco__pb2
28
+ import telemetry_pb2 as telemetry__pb2
29
+ import media_pb2 as media__pb2
30
+ import agent_pb2 as agent__pb2
31
+ import viewport_pb2 as viewport__pb2
32
+ import camera_pb2 as camera__pb2
33
+ import debug_pb2 as debug__pb2
33
34
 
34
35
 
35
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fhazel_rpc.proto\x12\thazel.rpc\x1a\x0c\x63ommon.proto\x1a\x0bscene.proto\x1a\x0cmujoco.proto\x1a\x0ftelemetry.proto\x1a\x0bmedia.proto\x1a\x0b\x61gent.proto\x1a\x0eviewport.proto\x1a\x0c\x63\x61mera.protoB\x03\xf8\x01\x01\x62\x06proto3')
36
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fhazel_rpc.proto\x12\thazel.rpc\x1a\x0c\x63ommon.proto\x1a\x0bscene.proto\x1a\x0cmujoco.proto\x1a\x0ftelemetry.proto\x1a\x0bmedia.proto\x1a\x0b\x61gent.proto\x1a\x0eviewport.proto\x1a\x0c\x63\x61mera.proto\x1a\x0b\x64\x65\x62ug.protoB\x03\xf8\x01\x01\x62\x06proto3')
36
37
 
37
38
  _globals = globals()
38
39
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -3,7 +3,7 @@
3
3
  import grpc
4
4
  import warnings
5
5
 
6
- from . import mujoco_pb2 as mujoco__pb2
6
+ import mujoco_pb2 as mujoco__pb2
7
7
 
8
8
  GRPC_GENERATED_VERSION = '1.76.0'
9
9
  GRPC_VERSION = grpc.__version__
@@ -22,7 +22,7 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
- from . import common_pb2 as common__pb2
25
+ import common_pb2 as common__pb2
26
26
 
27
27
 
28
28
  DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bscene.proto\x12\thazel.rpc\x1a\x0c\x63ommon.proto\"x\n\nEntityInfo\x12\x1f\n\x02id\x18\x01 \x01(\x0b\x32\x13.hazel.rpc.EntityId\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\'\n\ttransform\x18\x03 \x01(\x0b\x32\x14.hazel.rpc.Transform\x12\x12\n\ncomponents\x18\x04 \x03(\t\"\x15\n\x13GetSceneInfoRequest\"T\n\x14GetSceneInfoResponse\x12\x12\n\nscene_name\x18\x01 \x01(\t\x12\x12\n\nscene_path\x18\x02 \x01(\t\x12\x14\n\x0c\x65ntity_count\x18\x03 \x01(\r\"M\n\x13ListEntitiesRequest\x12\x1a\n\x12include_transforms\x18\x01 \x01(\x08\x12\x1a\n\x12include_components\x18\x02 \x01(\x08\"?\n\x14ListEntitiesResponse\x12\'\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\x15.hazel.rpc.EntityInfo\"S\n\x10GetEntityRequest\x12!\n\x02id\x18\x01 \x01(\x0b\x32\x13.hazel.rpc.EntityIdH\x00\x12\x0e\n\x04name\x18\x02 \x01(\tH\x00\x42\x0c\n\nidentifier\"I\n\x11GetEntityResponse\x12\r\n\x05\x66ound\x18\x01 \x01(\x08\x12%\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\x15.hazel.rpc.EntityInfo\"e\n\x19SetEntityTransformRequest\x12\x1f\n\x02id\x18\x01 \x01(\x0b\x32\x13.hazel.rpc.EntityId\x12\'\n\ttransform\x18\x02 \x01(\x0b\x32\x14.hazel.rpc.Transform\">\n\x1aSetEntityTransformResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"C\n\x18SetSimulationModeRequest\x12\'\n\x04mode\x18\x01 \x01(\x0e\x32\x19.hazel.rpc.SimulationMode\"n\n\x19SetSimulationModeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\x12/\n\x0c\x63urrent_mode\x18\x03 \x01(\x0e\x32\x19.hazel.rpc.SimulationMode\"\x1a\n\x18GetSimulationModeRequest\"D\n\x19GetSimulationModeResponse\x12\'\n\x04mode\x18\x01 \x01(\x0e\x32\x19.hazel.rpc.SimulationMode*k\n\x0eSimulationMode\x12\x1c\n\x18SIMULATION_MODE_REALTIME\x10\x00\x12!\n\x1dSIMULATION_MODE_DETERMINISTIC\x10\x01\x12\x18\n\x14SIMULATION_MODE_FAST\x10\x02\x32\x9b\x04\n\x0cSceneService\x12O\n\x0cGetSceneInfo\x12\x1e.hazel.rpc.GetSceneInfoRequest\x1a\x1f.hazel.rpc.GetSceneInfoResponse\x12O\n\x0cListEntities\x12\x1e.hazel.rpc.ListEntitiesRequest\x1a\x1f.hazel.rpc.ListEntitiesResponse\x12\x46\n\tGetEntity\x12\x1b.hazel.rpc.GetEntityRequest\x1a\x1c.hazel.rpc.GetEntityResponse\x12\x61\n\x12SetEntityTransform\x12$.hazel.rpc.SetEntityTransformRequest\x1a%.hazel.rpc.SetEntityTransformResponse\x12^\n\x11SetSimulationMode\x12#.hazel.rpc.SetSimulationModeRequest\x1a$.hazel.rpc.SetSimulationModeResponse\x12^\n\x11GetSimulationMode\x12#.hazel.rpc.GetSimulationModeRequest\x1a$.hazel.rpc.GetSimulationModeResponseB\x03\xf8\x01\x01\x62\x06proto3')
@@ -3,7 +3,7 @@
3
3
  import grpc
4
4
  import warnings
5
5
 
6
- from . import scene_pb2 as scene__pb2
6
+ import scene_pb2 as scene__pb2
7
7
 
8
8
  GRPC_GENERATED_VERSION = '1.76.0'
9
9
  GRPC_VERSION = grpc.__version__
@@ -3,7 +3,7 @@
3
3
  import grpc
4
4
  import warnings
5
5
 
6
- from . import telemetry_pb2 as telemetry__pb2
6
+ import telemetry_pb2 as telemetry__pb2
7
7
 
8
8
  GRPC_GENERATED_VERSION = '1.76.0'
9
9
  GRPC_VERSION = grpc.__version__
@@ -22,7 +22,7 @@ _runtime_version.ValidateProtobufRuntimeVersion(
22
22
  _sym_db = _symbol_database.Default()
23
23
 
24
24
 
25
- from . import media_pb2 as media__pb2
25
+ import media_pb2 as media__pb2
26
26
 
27
27
 
28
28
  DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eviewport.proto\x12\thazel.rpc\x1a\x0bmedia.proto\"v\n\x1aStartViewportStreamRequest\x12\x15\n\rviewport_name\x18\x01 \x01(\t\x12\x12\n\ntarget_fps\x18\x02 \x01(\r\x12\r\n\x05width\x18\x03 \x01(\r\x12\x0e\n\x06height\x18\x04 \x01(\r\x12\x0e\n\x06\x66ormat\x18\x05 \x01(\t\"l\n\x14ViewportStreamConfig\x12\x11\n\tstreaming\x18\x01 \x01(\x08\x12\x15\n\rviewport_name\x18\x02 \x01(\t\x12\x0b\n\x03\x66ps\x18\x03 \x01(\r\x12\r\n\x05width\x18\x04 \x01(\r\x12\x0e\n\x06height\x18\x05 \x01(\r\"\x1b\n\x19StopViewportStreamRequest\"-\n\x1aStopViewportStreamResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\x18\n\x16GetViewportInfoRequest\"o\n\x17GetViewportInfoResponse\x12\x1b\n\x13\x61vailable_viewports\x18\x01 \x03(\t\x12\x37\n\x0e\x63urrent_config\x18\x02 \x01(\x0b\x32\x1f.hazel.rpc.ViewportStreamConfig2\xbd\x01\n\x0fViewportService\x12X\n\x0fGetViewportInfo\x12!.hazel.rpc.GetViewportInfoRequest\x1a\".hazel.rpc.GetViewportInfoResponse\x12P\n\x0eStreamViewport\x12%.hazel.rpc.StartViewportStreamRequest\x1a\x15.hazel.rpc.ImageFrame0\x01\x42\x03\xf8\x01\x01\x62\x06proto3')
@@ -3,8 +3,8 @@
3
3
  import grpc
4
4
  import warnings
5
5
 
6
- from . import media_pb2 as media__pb2
7
- from . import viewport_pb2 as viewport__pb2
6
+ import media_pb2 as media__pb2
7
+ import viewport_pb2 as viewport__pb2
8
8
 
9
9
  GRPC_GENERATED_VERSION = '1.76.0'
10
10
  GRPC_VERSION = grpc.__version__
@@ -0,0 +1,63 @@
1
+ syntax = "proto3";
2
+
3
+ // Debug visualization service for the LuckyEngine / Hazel ScriptCore gRPC API (v1).
4
+
5
+ package hazel.rpc;
6
+
7
+ option cc_enable_arenas = true;
8
+
9
+ // A 3D vector for debug drawing.
10
+ message DebugVector3 {
11
+ float x = 1;
12
+ float y = 2;
13
+ float z = 3;
14
+ }
15
+
16
+ // RGBA color (0-1 range).
17
+ message DebugColor {
18
+ float r = 1;
19
+ float g = 2;
20
+ float b = 3;
21
+ float a = 4;
22
+ }
23
+
24
+ // A debug line to draw.
25
+ message DebugLine {
26
+ DebugVector3 start = 1;
27
+ DebugVector3 end = 2;
28
+ DebugColor color = 3;
29
+ }
30
+
31
+ // A debug arrow (line with arrowhead).
32
+ message DebugArrow {
33
+ DebugVector3 origin = 1;
34
+ DebugVector3 direction = 2; // Direction and magnitude
35
+ DebugColor color = 3;
36
+ float scale = 4; // Scale factor for visualization
37
+ }
38
+
39
+ // Velocity command visualization.
40
+ message DebugVelocityCommand {
41
+ DebugVector3 origin = 1; // Robot position
42
+ float lin_vel_x = 2; // Forward velocity command
43
+ float lin_vel_y = 3; // Lateral velocity command
44
+ float ang_vel_z = 4; // Angular velocity command
45
+ float scale = 5; // Visualization scale
46
+ }
47
+
48
+ // Collection of debug primitives to draw for one frame.
49
+ message DebugDrawRequest {
50
+ repeated DebugLine lines = 1;
51
+ repeated DebugArrow arrows = 2;
52
+ DebugVelocityCommand velocity_command = 3;
53
+ bool clear_previous = 4; // Clear previous frame's debug draws
54
+ }
55
+
56
+ message DebugDrawResponse {
57
+ bool success = 1;
58
+ }
59
+
60
+ // Debug visualization service.
61
+ service DebugService {
62
+ rpc Draw(DebugDrawRequest) returns (DebugDrawResponse);
63
+ }
@@ -30,3 +30,4 @@ import "media.proto";
30
30
  import "agent.proto";
31
31
  import "viewport.proto";
32
32
  import "camera.proto";
33
+ import "debug.proto";
File without changes
File without changes
File without changes