rainbow-rb-sdk 0.0.9.dev6__tar.gz → 0.0.9.dev8__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.
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/PKG-INFO +6 -6
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/pyproject.toml +6 -6
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base.py +94 -31
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/PKG-INFO +6 -6
- rainbow_rb_sdk-0.0.9.dev8/src/rainbow_rb_sdk.egg-info/requires.txt +6 -0
- rainbow_rb_sdk-0.0.9.dev6/src/rainbow_rb_sdk.egg-info/requires.txt +0 -6
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/README.md +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/setup.cfg +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_control.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_file.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_localization.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_map.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_move.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_program.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_status.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/schema/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base_sdk/base_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_config.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_get_data.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_io.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_maintenance.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_move.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_point.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_program.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_service.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_state.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_config_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_io_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_move_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_program_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/client_modules.pyi +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/program.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/program_interface.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/test_binding.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/base.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/config.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/state.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/program_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/dependency_links.txt +0 -0
- {rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/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.
|
|
3
|
+
Version: 0.0.9.dev8
|
|
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.
|
|
9
|
-
Requires-Dist: rainbow-rb-zenoh==0.0.9.
|
|
10
|
-
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.
|
|
11
|
-
Requires-Dist: rainbow-rb-schemas==0.0.9.
|
|
12
|
-
Requires-Dist: rainbow-rb-log==0.0.9.
|
|
8
|
+
Requires-Dist: rainbow-rb-utils==0.0.9.dev8
|
|
9
|
+
Requires-Dist: rainbow-rb-zenoh==0.0.9.dev8
|
|
10
|
+
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev8
|
|
11
|
+
Requires-Dist: rainbow-rb-schemas==0.0.9.dev8
|
|
12
|
+
Requires-Dist: rainbow-rb-log==0.0.9.dev8
|
|
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.
|
|
7
|
+
version = "0.0.9.dev8"
|
|
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.
|
|
17
|
-
"rainbow-rb-zenoh==0.0.9.
|
|
18
|
-
"rainbow-rb-flat-buffers==0.0.9.
|
|
19
|
-
"rainbow-rb-schemas==0.0.9.
|
|
20
|
-
"rainbow-rb-log==0.0.9.
|
|
16
|
+
"rainbow-rb-utils==0.0.9.dev8",
|
|
17
|
+
"rainbow-rb-zenoh==0.0.9.dev8",
|
|
18
|
+
"rainbow-rb-flat-buffers==0.0.9.dev8",
|
|
19
|
+
"rainbow-rb-schemas==0.0.9.dev8",
|
|
20
|
+
"rainbow-rb-log==0.0.9.dev8",
|
|
21
21
|
"rby1-sdk>=0.9.1",
|
|
22
22
|
]
|
|
23
23
|
|
|
@@ -11,7 +11,7 @@ import threading
|
|
|
11
11
|
import urllib.error
|
|
12
12
|
import urllib.request
|
|
13
13
|
from collections.abc import Callable
|
|
14
|
-
from typing import TYPE_CHECKING,
|
|
14
|
+
from typing import TYPE_CHECKING, ClassVar, Literal, TypeVar, overload
|
|
15
15
|
|
|
16
16
|
from rainbow.rb_flat_buffers.program.RB_Program_Log import RB_Program_LogT
|
|
17
17
|
from rainbow.rb_flat_buffers.program.RB_Program_Log_Type import RB_Program_Log_Type
|
|
@@ -27,8 +27,6 @@ from rainbow.rb_zenoh.client import (
|
|
|
27
27
|
)
|
|
28
28
|
from rainbow.rb_zenoh.exception import ZenohNoReply, ZenohTransportError
|
|
29
29
|
from rainbow.rb_zenoh.schema import SubscribeOptions
|
|
30
|
-
from zenoh import Config
|
|
31
|
-
from zenoh import open as zenoh_open
|
|
32
30
|
|
|
33
31
|
if TYPE_CHECKING:
|
|
34
32
|
pass
|
|
@@ -263,7 +261,6 @@ class RBBaseSDK:
|
|
|
263
261
|
self._peer_id: str | None = None
|
|
264
262
|
self._peer_common_url: str | None = None
|
|
265
263
|
self._peer_token: str | None = None
|
|
266
|
-
self._peer_session: Any = None # 전용 raw Zenoh 세션 (free port)
|
|
267
264
|
self._heartbeat_task: asyncio.Task | None = None
|
|
268
265
|
|
|
269
266
|
self._initialized = True
|
|
@@ -422,6 +419,71 @@ class RBBaseSDK:
|
|
|
422
419
|
s.bind(("", 0))
|
|
423
420
|
return s.getsockname()[1]
|
|
424
421
|
|
|
422
|
+
@staticmethod
|
|
423
|
+
def _split_endpoint_env(value: str | None) -> list[str]:
|
|
424
|
+
if not value:
|
|
425
|
+
return []
|
|
426
|
+
normalized = value.replace("\n", ",")
|
|
427
|
+
return [endpoint.strip() for endpoint in normalized.split(",") if endpoint.strip()]
|
|
428
|
+
|
|
429
|
+
@staticmethod
|
|
430
|
+
def _merge_endpoint_env(name: str, endpoint: str) -> None:
|
|
431
|
+
endpoints = RBBaseSDK._split_endpoint_env(os.getenv(name))
|
|
432
|
+
if endpoint not in endpoints:
|
|
433
|
+
endpoints.append(endpoint)
|
|
434
|
+
os.environ[name] = ",".join(endpoints)
|
|
435
|
+
|
|
436
|
+
def _reconnect_shared_zenoh_for_remote_peer(
|
|
437
|
+
self,
|
|
438
|
+
*,
|
|
439
|
+
listen_port: int,
|
|
440
|
+
) -> None:
|
|
441
|
+
"""Make the SDK's real query session reachable from remote common.
|
|
442
|
+
|
|
443
|
+
``connect()`` used to open a separate raw Zenoh session for peer tracking,
|
|
444
|
+
but SDK calls such as ``move_j`` use the process-wide ``ZenohClient``.
|
|
445
|
+
The shared client must therefore own the externally reachable listen
|
|
446
|
+
endpoint that common connects to.
|
|
447
|
+
"""
|
|
448
|
+
self._merge_endpoint_env("ZENOH_PEER_LISTEN_ENDPOINTS", f"tcp/0.0.0.0:{listen_port}")
|
|
449
|
+
|
|
450
|
+
zenoh_client = self._refresh_zenoh_client_for_pid(self._pid)
|
|
451
|
+
with contextlib.suppress(Exception):
|
|
452
|
+
zenoh_client.close()
|
|
453
|
+
zenoh_client.connect()
|
|
454
|
+
|
|
455
|
+
def _probe_zenoh_mesh(self, keyexpr: str, *, timeout: float) -> bool:
|
|
456
|
+
try:
|
|
457
|
+
for _ in self.zenoh_client.query(keyexpr, timeout=timeout):
|
|
458
|
+
return True
|
|
459
|
+
except (ZenohNoReply, ZenohTransportError):
|
|
460
|
+
return False
|
|
461
|
+
return False
|
|
462
|
+
|
|
463
|
+
async def _wait_for_zenoh_mesh(
|
|
464
|
+
self,
|
|
465
|
+
*,
|
|
466
|
+
keyexpr: str,
|
|
467
|
+
timeout: float,
|
|
468
|
+
probe_timeout: float,
|
|
469
|
+
interval: float,
|
|
470
|
+
) -> None:
|
|
471
|
+
loop = asyncio.get_running_loop()
|
|
472
|
+
deadline = loop.time() + timeout
|
|
473
|
+
|
|
474
|
+
while True:
|
|
475
|
+
if await asyncio.to_thread(self._probe_zenoh_mesh, keyexpr, timeout=probe_timeout):
|
|
476
|
+
print(f"[SDK] zenoh mesh ready: {keyexpr}", flush=True)
|
|
477
|
+
return
|
|
478
|
+
|
|
479
|
+
remaining = deadline - loop.time()
|
|
480
|
+
if remaining <= 0:
|
|
481
|
+
raise RuntimeError(
|
|
482
|
+
f"zenoh mesh not ready: no reply from {keyexpr!r} within {timeout:.1f}s"
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
await asyncio.sleep(min(interval, remaining))
|
|
486
|
+
|
|
425
487
|
@staticmethod
|
|
426
488
|
def _http_json(
|
|
427
489
|
method: str,
|
|
@@ -463,13 +525,17 @@ class RBBaseSDK:
|
|
|
463
525
|
zenoh_port: int | None = None,
|
|
464
526
|
ttl: int = 30,
|
|
465
527
|
heartbeat_interval: float | None = None,
|
|
528
|
+
mesh_probe_keyexpr: str | None = "robot-state",
|
|
529
|
+
mesh_timeout: float = 10.0,
|
|
530
|
+
mesh_probe_timeout: float = 1.0,
|
|
531
|
+
mesh_probe_interval: float = 0.5,
|
|
466
532
|
) -> str | None:
|
|
467
533
|
"""common 서비스에 외부 Zenoh peer로 등록하고 자동 heartbeat를 시작한다.
|
|
468
534
|
|
|
469
535
|
common과 같은 PC에서 실행 중이라면 이미 Zenoh 메시가 형성되어 있으므로
|
|
470
536
|
아무것도 하지 않고 ``None`` 을 반환한다.
|
|
471
537
|
|
|
472
|
-
내부적으로
|
|
538
|
+
내부적으로 SDK 호출이 사용하는 공유 Zenoh 세션을 외부 listen 포트로 재연결한다.
|
|
473
539
|
``zenoh_port`` 를 생략하면 OS가 빈 포트를 자동으로 배정하므로 충돌이 없다.
|
|
474
540
|
|
|
475
541
|
Args:
|
|
@@ -478,6 +544,10 @@ class RBBaseSDK:
|
|
|
478
544
|
zenoh_port: 이 머신의 Zenoh listen 포트. ``None`` 이면 OS가 자동 배정.
|
|
479
545
|
ttl: common 측 브리지 세션 TTL(초). heartbeat를 보내지 않으면 이 시간 후 자동 해제.
|
|
480
546
|
heartbeat_interval: heartbeat 전송 주기(초). None 이면 ``ttl / 2`` 사용.
|
|
547
|
+
mesh_probe_keyexpr: mesh 형성 확인용 Zenoh query keyexpr. None 이면 확인을 건너뜀.
|
|
548
|
+
mesh_timeout: mesh 형성 대기 최대 시간(초).
|
|
549
|
+
mesh_probe_timeout: probe query 1회 timeout(초).
|
|
550
|
+
mesh_probe_interval: probe 재시도 간격(초).
|
|
481
551
|
|
|
482
552
|
Returns:
|
|
483
553
|
common이 발급한 peer_id, 또는 같은 PC라서 불필요한 경우 ``None``.
|
|
@@ -495,25 +565,7 @@ class RBBaseSDK:
|
|
|
495
565
|
my_ip = self._detect_local_ip(host)
|
|
496
566
|
free_port = zenoh_port if zenoh_port is not None else self._find_free_port()
|
|
497
567
|
print(f"[SDK] local IP={my_ip}, zenoh port={free_port}", flush=True)
|
|
498
|
-
|
|
499
|
-
# 전용 Zenoh 세션: common Zenoh(7447)에 직접 connect + free_port로 listen(gossip용)
|
|
500
|
-
conf = Config()
|
|
501
|
-
conf.insert_json5("mode", '"peer"')
|
|
502
|
-
conf.insert_json5("connect/endpoints", f'["tcp/{host}:7447"]')
|
|
503
|
-
conf.insert_json5("listen/endpoints", f'{{"peer": ["tcp/0.0.0.0:{free_port}"]}}')
|
|
504
|
-
conf.insert_json5("scouting/multicast/enabled", "false")
|
|
505
|
-
conf.insert_json5("scouting/gossip/enabled", "true")
|
|
506
|
-
conf.insert_json5("scouting/gossip/multihop", "false")
|
|
507
|
-
conf.insert_json5("scouting/gossip/autoconnect", '{"peer": ["peer"]}')
|
|
508
|
-
conf.insert_json5(
|
|
509
|
-
"scouting/gossip/autoconnect_strategy",
|
|
510
|
-
'{"peer": {"to_peer": "greater-zid", "to_router": "always"}}',
|
|
511
|
-
)
|
|
512
|
-
conf.insert_json5("listen/exit_on_failure", "false")
|
|
513
|
-
conf.insert_json5("connect/timeout_ms", '{"peer": 1000}')
|
|
514
|
-
conf.insert_json5("transport/shared_memory/enabled", "false")
|
|
515
|
-
|
|
516
|
-
self._peer_session = await asyncio.to_thread(zenoh_open, conf)
|
|
568
|
+
self._reconnect_shared_zenoh_for_remote_peer(listen_port=free_port)
|
|
517
569
|
|
|
518
570
|
headers = {"Authorization": f"Bearer {token}"}
|
|
519
571
|
payload = {"ip": my_ip, "port": free_port, "ttl": ttl}
|
|
@@ -527,6 +579,24 @@ class RBBaseSDK:
|
|
|
527
579
|
self._peer_common_url = url
|
|
528
580
|
self._peer_token = token
|
|
529
581
|
|
|
582
|
+
try:
|
|
583
|
+
if mesh_probe_keyexpr is not None:
|
|
584
|
+
await self._wait_for_zenoh_mesh(
|
|
585
|
+
keyexpr=mesh_probe_keyexpr,
|
|
586
|
+
timeout=mesh_timeout,
|
|
587
|
+
probe_timeout=mesh_probe_timeout,
|
|
588
|
+
interval=mesh_probe_interval,
|
|
589
|
+
)
|
|
590
|
+
except Exception:
|
|
591
|
+
self._peer_id = None
|
|
592
|
+
self._peer_common_url = None
|
|
593
|
+
self._peer_token = None
|
|
594
|
+
with contextlib.suppress(Exception):
|
|
595
|
+
await asyncio.to_thread(
|
|
596
|
+
self._http_json, "DELETE", f"{url}/zenoh/peer/{peer_id}", None, headers, 5.0
|
|
597
|
+
)
|
|
598
|
+
raise
|
|
599
|
+
|
|
530
600
|
interval = heartbeat_interval if heartbeat_interval is not None else max(1.0, ttl / 2)
|
|
531
601
|
self._heartbeat_task = asyncio.create_task(
|
|
532
602
|
self._heartbeat_loop(peer_id, ttl=ttl, interval=interval)
|
|
@@ -562,13 +632,6 @@ class RBBaseSDK:
|
|
|
562
632
|
self._http_json, "DELETE", f"{url}/zenoh/peer/{peer_id}", None, headers, 5.0
|
|
563
633
|
)
|
|
564
634
|
|
|
565
|
-
# 전용 Zenoh 세션 종료
|
|
566
|
-
peer_session = self._peer_session
|
|
567
|
-
self._peer_session = None
|
|
568
|
-
if peer_session is not None:
|
|
569
|
-
with contextlib.suppress(Exception):
|
|
570
|
-
await asyncio.to_thread(peer_session.close)
|
|
571
|
-
|
|
572
635
|
print(f"[SDK] disconnected zenoh peer {peer_id}", flush=True)
|
|
573
636
|
return True
|
|
574
637
|
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/PKG-INFO
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rainbow-rb-sdk
|
|
3
|
-
Version: 0.0.9.
|
|
3
|
+
Version: 0.0.9.dev8
|
|
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.
|
|
9
|
-
Requires-Dist: rainbow-rb-zenoh==0.0.9.
|
|
10
|
-
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.
|
|
11
|
-
Requires-Dist: rainbow-rb-schemas==0.0.9.
|
|
12
|
-
Requires-Dist: rainbow-rb-log==0.0.9.
|
|
8
|
+
Requires-Dist: rainbow-rb-utils==0.0.9.dev8
|
|
9
|
+
Requires-Dist: rainbow-rb-zenoh==0.0.9.dev8
|
|
10
|
+
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev8
|
|
11
|
+
Requires-Dist: rainbow-rb-schemas==0.0.9.dev8
|
|
12
|
+
Requires-Dist: rainbow-rb-log==0.0.9.dev8
|
|
13
13
|
Requires-Dist: rby1-sdk>=0.9.1
|
|
14
14
|
|
|
15
15
|
# rb_sdk
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_control.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_file.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_map.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_move.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_program.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/amr_sdk/amr_status.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base_sdk/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/base_sdk/base_schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/program_sdk/program.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/client.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/config.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/control.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/rby1_sdk/state.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/amr_schema.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/base_schema.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow/rb_sdk/schema/program_schema.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev6 → rainbow_rb_sdk-0.0.9.dev8}/src/rainbow_rb_sdk.egg-info/top_level.txt
RENAMED
|
File without changes
|