rainbow-rb-sdk 0.0.9.dev14__tar.gz → 0.0.9.dev16__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 (61) hide show
  1. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/PKG-INFO +6 -6
  2. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/pyproject.toml +6 -6
  3. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/base.py +70 -29
  4. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_move.py +6 -2
  5. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow_rb_sdk.egg-info/PKG-INFO +6 -6
  6. rainbow_rb_sdk-0.0.9.dev16/src/rainbow_rb_sdk.egg-info/requires.txt +6 -0
  7. rainbow_rb_sdk-0.0.9.dev14/src/rainbow_rb_sdk.egg-info/requires.txt +0 -6
  8. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/README.md +0 -0
  9. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/setup.cfg +0 -0
  10. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/__init__.py +0 -0
  11. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr.py +0 -0
  12. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
  13. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py +0 -0
  14. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py +0 -0
  15. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_control.py +0 -0
  16. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_file.py +0 -0
  17. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_localization.py +0 -0
  18. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_map.py +0 -0
  19. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_move.py +0 -0
  20. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_program.py +0 -0
  21. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py +0 -0
  22. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/amr_status.py +0 -0
  23. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/amr_sdk/schema/__init__.py +0 -0
  24. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
  25. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/base_sdk/base_schema.py +0 -0
  26. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate.py +0 -0
  27. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
  28. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_config.py +0 -0
  29. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_get_data.py +0 -0
  30. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_io.py +0 -0
  31. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_maintenance.py +0 -0
  32. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_point.py +0 -0
  33. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_program.py +0 -0
  34. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_service.py +0 -0
  35. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_state.py +0 -0
  36. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/schema/__init__.py +0 -0
  37. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_config_schema.py +0 -0
  38. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_io_schema.py +0 -0
  39. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_move_schema.py +0 -0
  40. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_program_schema.py +0 -0
  41. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/program_sdk/__init__.py +0 -0
  42. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/program_sdk/client_modules.pyi +0 -0
  43. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/program_sdk/program.py +0 -0
  44. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/program_sdk/program_interface.py +0 -0
  45. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/program_sdk/test_binding.py +0 -0
  46. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1.py +0 -0
  47. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
  48. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/base.py +0 -0
  49. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -0
  50. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/config.py +0 -0
  51. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -0
  52. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
  53. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/rby1_sdk/state.py +0 -0
  54. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
  55. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
  56. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
  57. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
  58. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow/rb_sdk/schema/program_schema.py +0 -0
  59. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +0 -0
  60. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow_rb_sdk.egg-info/dependency_links.txt +0 -0
  61. {rainbow_rb_sdk-0.0.9.dev14 → rainbow_rb_sdk-0.0.9.dev16}/src/rainbow_rb_sdk.egg-info/top_level.txt +0 -0
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rainbow-rb-sdk
3
- Version: 0.0.9.dev14
3
+ Version: 0.0.9.dev16
4
4
  Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
5
5
  Author-email: Derek <dfd1123@rainbow-robotics.com>
6
6
  Requires-Python: <3.13,>=3.12
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev14
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev14
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev14
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev14
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev14
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev16
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev16
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev16
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev16
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev16
13
13
  Requires-Dist: rby1-sdk>=0.9.1
14
14
 
15
15
  # rb_sdk
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "rainbow-rb-sdk"
7
- version = "0.0.9.dev14"
7
+ version = "0.0.9.dev16"
8
8
  requires-python = ">=3.12,<3.13"
9
9
  description = "Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동"
10
10
  authors = [
@@ -13,11 +13,11 @@ authors = [
13
13
  readme = "README.md"
14
14
 
15
15
  dependencies = [
16
- "rainbow-rb-utils==0.0.9.dev14",
17
- "rainbow-rb-zenoh==0.0.9.dev14",
18
- "rainbow-rb-flat-buffers==0.0.9.dev14",
19
- "rainbow-rb-schemas==0.0.9.dev14",
20
- "rainbow-rb-log==0.0.9.dev14",
16
+ "rainbow-rb-utils==0.0.9.dev16",
17
+ "rainbow-rb-zenoh==0.0.9.dev16",
18
+ "rainbow-rb-flat-buffers==0.0.9.dev16",
19
+ "rainbow-rb-schemas==0.0.9.dev16",
20
+ "rainbow-rb-log==0.0.9.dev16",
21
21
  "rby1-sdk>=0.9.1",
22
22
  ]
23
23
 
@@ -10,6 +10,7 @@ import sys
10
10
  import threading
11
11
  import urllib.error
12
12
  import urllib.request
13
+ import uuid
13
14
  from collections.abc import Callable
14
15
  from typing import TYPE_CHECKING, ClassVar, Literal, TypeVar, overload
15
16
 
@@ -33,7 +34,8 @@ if TYPE_CHECKING:
33
34
 
34
35
  T = TypeVar("T", bound="RBBaseSDK")
35
36
  TSubObj = TypeVar("TSubObj")
36
- ZENOH_MESH_PROBE_KEYEXPR = "muscat/zenoh/ready"
37
+ ZENOH_ECHO_REQ_KEYEXPR = "muscat/zenoh/echo_req"
38
+ ZENOH_ECHO_RES_KEYEXPR = "muscat/zenoh/echo_res"
37
39
 
38
40
 
39
41
  class RBBaseSDK:
@@ -472,44 +474,82 @@ class RBBaseSDK:
472
474
  zenoh_client.close()
473
475
  zenoh_client.connect()
474
476
 
475
- def _probe_zenoh_mesh(self, keyexpr: str, *, timeout: float) -> bool:
476
- try:
477
- for _ in self.zenoh_client.query(keyexpr, timeout=timeout):
478
- return True
479
- except (ZenohNoReply, ZenohTransportError):
480
- return False
481
- return False
482
-
483
- async def _wait_for_zenoh_mesh(
477
+ async def _wait_for_zenoh_echo(
484
478
  self,
485
479
  *,
486
- keyexpr: str,
480
+ req_keyexpr: str,
481
+ res_keyexpr: str,
487
482
  timeout: float | None,
488
483
  probe_timeout: float,
489
484
  interval: float,
490
485
  ) -> bool:
486
+ """bridge ↔ 내부 mesh 의 양방향 pub/sub propagation이 settled 되었는지 검증한다.
487
+
488
+ unique nonce를 echo_req에 publish하고 echo_res로 동일 nonce가 돌아올 때까지 대기한다.
489
+ queryable probe와 달리 양방향 subscription declaration이 모두 전파되어야만 성공하므로
490
+ 실제 pub/sub 경로가 동작함을 보장한다.
491
+ """
491
492
  loop = asyncio.get_running_loop()
492
493
  deadline = None if timeout is None else loop.time() + timeout
493
494
 
494
- while True:
495
- if await asyncio.to_thread(self._probe_zenoh_mesh, keyexpr, timeout=probe_timeout):
496
- print(f"[SDK] zenoh mesh ready: {keyexpr}", flush=True)
497
- return True
495
+ expected: set[str] = set()
496
+ received: asyncio.Event = asyncio.Event()
497
+ matched: dict[str, str] = {}
498
498
 
499
- if deadline is None:
500
- await asyncio.sleep(interval)
501
- continue
499
+ def _cb(*, mv: memoryview, **kwargs):
500
+ try:
501
+ n = bytes(mv).decode("utf-8", "ignore")
502
+ except Exception:
503
+ return
504
+ if n in expected:
505
+ matched["nonce"] = n
506
+ loop.call_soon_threadsafe(received.set)
507
+
508
+ handle = self.zenoh_client.subscribe(
509
+ res_keyexpr,
510
+ _cb,
511
+ options=SubscribeOptions(parse_dict_payload=False, allowed_same_sender=True),
512
+ )
502
513
 
503
- remaining = deadline - loop.time()
504
- if remaining <= 0:
505
- print(
506
- f"[SDK] zenoh mesh still warming up: no reply from {keyexpr!r} "
507
- f"within {timeout:.1f}s",
508
- flush=True,
509
- )
510
- return False
514
+ try:
515
+ while True:
516
+ nonce = uuid.uuid4().hex
517
+ expected.add(nonce)
518
+ received.clear()
519
+ matched.pop("nonce", None)
520
+ with contextlib.suppress(Exception):
521
+ self.zenoh_client.publish(req_keyexpr, payload=nonce.encode())
522
+
523
+ try:
524
+ await asyncio.wait_for(received.wait(), timeout=probe_timeout)
525
+ if matched.get("nonce") == nonce:
526
+ print(
527
+ f"[SDK] zenoh echo verified: {req_keyexpr} → {res_keyexpr}",
528
+ flush=True,
529
+ )
530
+ return True
531
+ except TimeoutError:
532
+ pass
533
+
534
+ if deadline is None:
535
+ await asyncio.sleep(interval)
536
+ continue
537
+
538
+ remaining = deadline - loop.time()
539
+ if remaining <= 0:
540
+ print(
541
+ f"[SDK] zenoh echo still warming up: no matching reply on "
542
+ f"{res_keyexpr!r} within {timeout:.1f}s",
543
+ flush=True,
544
+ )
545
+ return False
511
546
 
512
- await asyncio.sleep(min(interval, remaining))
547
+ await asyncio.sleep(min(interval, remaining))
548
+ finally:
549
+ with contextlib.suppress(Exception):
550
+ handle.close()
551
+ with contextlib.suppress(Exception):
552
+ self.zenoh_client.unsubscribe_topic(res_keyexpr)
513
553
 
514
554
  @staticmethod
515
555
  def _http_json(
@@ -614,8 +654,9 @@ class RBBaseSDK:
614
654
  )
615
655
 
616
656
  try:
617
- await self._wait_for_zenoh_mesh(
618
- keyexpr=ZENOH_MESH_PROBE_KEYEXPR,
657
+ await self._wait_for_zenoh_echo(
658
+ req_keyexpr=ZENOH_ECHO_REQ_KEYEXPR,
659
+ res_keyexpr=ZENOH_ECHO_RES_KEYEXPR,
619
660
  timeout=mesh_timeout,
620
661
  probe_timeout=mesh_probe_timeout,
621
662
  interval=mesh_probe_interval,
@@ -62,6 +62,7 @@ from rainbow.rb_utils.flow_manager import eval_value
62
62
  from rainbow.rb_utils.manipulate import validate_single_return_value
63
63
  from rainbow.rb_zenoh.client import QueryResult
64
64
  from rainbow.rb_zenoh.schema import OverflowPolicy, SubscribeOptions
65
+ from zenoh import CongestionControl, Priority
65
66
 
66
67
  from ..base import RBBaseSDK
67
68
  from .manipulate_get_data import RBManipulateGetDataSDK, Response_Get_Relative_ValueT
@@ -153,7 +154,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
153
154
  if variable_name is not None:
154
155
  carte_x_ref = []
155
156
  try:
156
- carte_x_ref_obj = obj_payload.CarteXRef()
157
+ carte_x_ref_obj = obj_payload.CarteXRefAsNumpy()
157
158
  if carte_x_ref_obj is not None:
158
159
  carte_x_ref_values = carte_x_ref_obj.FAsNumpy()
159
160
  carte_x_ref = (
@@ -2141,7 +2142,10 @@ class RBManipulateMoveSDK(RBBaseSDK):
2141
2142
  self.zenoh_client.publish(
2142
2143
  f"{robot_model}/pub_servo_j",
2143
2144
  flatbuffer_req_obj=req,
2144
- flatbuffer_buf_size=80
2145
+ flatbuffer_buf_size=80,
2146
+ congestion_control=CongestionControl.DROP,
2147
+ priority=Priority.REAL_TIME,
2148
+ express=True,
2145
2149
  )
2146
2150
 
2147
2151
  if flow_manager_args is not None:
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rainbow-rb-sdk
3
- Version: 0.0.9.dev14
3
+ Version: 0.0.9.dev16
4
4
  Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
5
5
  Author-email: Derek <dfd1123@rainbow-robotics.com>
6
6
  Requires-Python: <3.13,>=3.12
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev14
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev14
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev14
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev14
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev14
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev16
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev16
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev16
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev16
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev16
13
13
  Requires-Dist: rby1-sdk>=0.9.1
14
14
 
15
15
  # rb_sdk
@@ -0,0 +1,6 @@
1
+ rainbow-rb-utils==0.0.9.dev16
2
+ rainbow-rb-zenoh==0.0.9.dev16
3
+ rainbow-rb-flat-buffers==0.0.9.dev16
4
+ rainbow-rb-schemas==0.0.9.dev16
5
+ rainbow-rb-log==0.0.9.dev16
6
+ rby1-sdk>=0.9.1
@@ -1,6 +0,0 @@
1
- rainbow-rb-utils==0.0.9.dev14
2
- rainbow-rb-zenoh==0.0.9.dev14
3
- rainbow-rb-flat-buffers==0.0.9.dev14
4
- rainbow-rb-schemas==0.0.9.dev14
5
- rainbow-rb-log==0.0.9.dev14
6
- rby1-sdk>=0.9.1