rainbow-rb-sdk 0.0.9.dev10__tar.gz → 0.0.9.dev11__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.dev10/README.md → rainbow_rb_sdk-0.0.9.dev11/PKG-INFO +33 -63
- rainbow_rb_sdk-0.0.9.dev10/src/rainbow_rb_sdk.egg-info/PKG-INFO → rainbow_rb_sdk-0.0.9.dev11/README.md +19 -77
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/pyproject.toml +6 -6
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11/src/rainbow_rb_sdk.egg-info}/PKG-INFO +25 -69
- rainbow_rb_sdk-0.0.9.dev11/src/rainbow_rb_sdk.egg-info/requires.txt +6 -0
- rainbow_rb_sdk-0.0.9.dev10/src/rainbow_rb_sdk.egg-info/requires.txt +0 -6
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/setup.cfg +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_control.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_file.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_localization.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_map.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_move.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_program.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_status.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/schema/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/base.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/base_sdk/base_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_config.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_get_data.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_io.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_maintenance.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_move.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_point.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_program.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_service.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_state.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/schema/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_config_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_io_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_move_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_program_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/program_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/program_sdk/client_modules.pyi +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/program_sdk/program.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/program_sdk/program_interface.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/program_sdk/test_binding.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/base.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/config.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/state.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/program_schema.py +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow_rb_sdk.egg-info/dependency_links.txt +0 -0
- {rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow_rb_sdk.egg-info/top_level.txt +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rainbow-rb-sdk
|
|
3
|
+
Version: 0.0.9.dev11
|
|
4
|
+
Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
|
|
5
|
+
Author-email: Derek <dfd1123@rainbow-robotics.com>
|
|
6
|
+
Requires-Python: <3.13,>=3.12
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: rainbow-rb-utils==0.0.9.dev11
|
|
9
|
+
Requires-Dist: rainbow-rb-zenoh==0.0.9.dev11
|
|
10
|
+
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev11
|
|
11
|
+
Requires-Dist: rainbow-rb-schemas==0.0.9.dev11
|
|
12
|
+
Requires-Dist: rainbow-rb-log==0.0.9.dev11
|
|
13
|
+
Requires-Dist: rby1-sdk>=0.9.1
|
|
14
|
+
|
|
1
15
|
# rb_sdk
|
|
2
16
|
|
|
3
17
|
Rainbow Robotics 통합 Python SDK. AMR · Manipulator · RB-Y1 휴머노이드 제어와 Rainbow Robot Service(common) 연동을 단일 API로 제공합니다.
|
|
@@ -17,15 +31,6 @@ Rainbow Robotics 통합 Python SDK. AMR · Manipulator · RB-Y1 휴머노이드
|
|
|
17
31
|
|
|
18
32
|
## 1. 설치
|
|
19
33
|
|
|
20
|
-
### 워크스페이스(rby2 모노레포 내부)
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
cd /path/to/rby2/backend
|
|
24
|
-
uv add rb_sdk --package your_package
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### PyPI 설치
|
|
28
|
-
|
|
29
34
|
```bash
|
|
30
35
|
pip install rb_sdk
|
|
31
36
|
# RB-Y1 휴머노이드 제어가 필요하면 함께 설치
|
|
@@ -41,7 +46,7 @@ pip install rby1-sdk
|
|
|
41
46
|
`common` 서비스와 같은 PC에서 실행되는 스크립트라면 추가 설정 없이 그대로 사용 가능합니다.
|
|
42
47
|
|
|
43
48
|
```python
|
|
44
|
-
from rb_sdk import RBAmrSDK, RBManipulateSDK
|
|
49
|
+
from rainbow.rb_sdk import RBAmrSDK, RBManipulateSDK
|
|
45
50
|
|
|
46
51
|
amr = RBAmrSDK()
|
|
47
52
|
manipulate = RBManipulateSDK()
|
|
@@ -53,38 +58,23 @@ manipulate.move.call_move_j(
|
|
|
53
58
|
)
|
|
54
59
|
```
|
|
55
60
|
|
|
56
|
-
`rb_sdk`는 lazy import 지원: `from rb_sdk import ...` 한 줄로 가져옵니다.
|
|
57
|
-
|
|
58
61
|
---
|
|
59
62
|
|
|
60
63
|
## 3. 외부 PC에서 사용 (Remote Connect)
|
|
61
64
|
|
|
62
|
-
개발용
|
|
63
|
-
|
|
64
|
-
### 3-1. Zenoh 메시 연결 (필수)
|
|
65
|
-
|
|
66
|
-
ZenohClient가 remote common에 붙도록 환경변수 설정:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
export ZENOH_PEER_CONNECT_ENDPOINTS=tcp/<common_host_ip>:7447
|
|
70
|
-
python my_script.py
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### 3-2. common 측 peer 등록 (권장) — `sdk.connect()`
|
|
74
|
-
|
|
75
|
-
서버에서 외부 peer를 추적하고 끊김 감지가 필요하면 SDK의 `connect()`를 호출합니다.
|
|
65
|
+
개발용 노트북 등 **로봇 본체와 다른 머신**에서 로봇과 통신하고 싶다면 `sdk.connect()`를 호출합니다.
|
|
76
66
|
|
|
77
67
|
```python
|
|
78
68
|
import asyncio
|
|
79
|
-
from rb_sdk import RBManipulateSDK
|
|
69
|
+
from rainbow.rb_sdk import RBManipulateSDK
|
|
80
70
|
|
|
81
71
|
async def main():
|
|
82
72
|
sdk = RBManipulateSDK()
|
|
83
73
|
|
|
84
|
-
# common
|
|
74
|
+
# 로봇(common 서비스)에 외부 peer로 등록 + 자동 heartbeat 시작
|
|
85
75
|
peer_id = await sdk.connect(
|
|
86
|
-
token="
|
|
87
|
-
host="192.168.1.100", #
|
|
76
|
+
token="외부 서비스 Token", # Muscat이 생성한 서비스 Token
|
|
77
|
+
host="192.168.1.100", # 로봇 IP
|
|
88
78
|
ttl=30, # 서버 측 세션 TTL(초). heartbeat 끊기면 자동 해제
|
|
89
79
|
# zenoh_port=None, # None → OS가 빈 포트 자동 배정 (충돌 없음)
|
|
90
80
|
# heartbeat_interval=15.0, # 기본: ttl / 2
|
|
@@ -100,7 +90,7 @@ asyncio.run(main())
|
|
|
100
90
|
|
|
101
91
|
#### 주요 특징
|
|
102
92
|
|
|
103
|
-
- **로컬 IP 자동 감지**: `host` 방향의 라우팅 인터페이스 IP를 자동으로 찾아
|
|
93
|
+
- **로컬 IP 자동 감지**: `host` 방향의 라우팅 인터페이스 IP를 자동으로 찾아 로봇에 알림
|
|
104
94
|
- **포트 자동 배정**: 별도 지정 없이 OS가 빈 포트를 잡아주므로 포트 충돌 없음
|
|
105
95
|
- **자동 heartbeat**: 주기적으로 TTL 연장. 스크립트 종료 / 크래시 시 TTL 만료로 서버 측 정리
|
|
106
96
|
- **같은 PC 자동 감지**: `host`가 localhost거나 자기 IP인 경우 `connect()`는 아무것도 하지 않고 `None` 반환 (이미 메시 안에 있음)
|
|
@@ -110,18 +100,20 @@ asyncio.run(main())
|
|
|
110
100
|
| 인자 | 타입 | 기본 | 설명 |
|
|
111
101
|
|---|---|---|---|
|
|
112
102
|
| `token` | `str` | (필수) | common 서비스 JWT |
|
|
113
|
-
| `host` | `str` | (필수) | common이 실행 중인
|
|
114
|
-
| `common_port` | `int` | `8000` | common HTTP 포트 |
|
|
103
|
+
| `host` | `str` | (필수) | common이 실행 중인 로봇 IP |
|
|
115
104
|
| `zenoh_port` | `int \| None` | `None` | 로컬 Zenoh listen 포트. `None`이면 자동 |
|
|
116
105
|
| `ttl` | `int` | `30` | 서버 측 세션 TTL(초) |
|
|
117
106
|
| `heartbeat_interval` | `float \| None` | `None` | heartbeat 주기. `None`이면 `ttl/2` |
|
|
107
|
+
| `mesh_timeout` | `float \| None` | `None` | mesh 형성 대기 최대 시간(초). `None`이면 무제한 대기 |
|
|
108
|
+
| `mesh_probe_timeout` | `float` | `1.0` | probe query 1회 timeout(초) |
|
|
109
|
+
| `mesh_probe_interval` | `float` | `0.5` | probe 재시도 간격(초) |
|
|
118
110
|
|
|
119
111
|
---
|
|
120
112
|
|
|
121
113
|
## 4. AMR SDK (`RBAmrSDK`)
|
|
122
114
|
|
|
123
115
|
```python
|
|
124
|
-
from rb_sdk import RBAmrSDK
|
|
116
|
+
from rainbow.rb_sdk import RBAmrSDK
|
|
125
117
|
|
|
126
118
|
sdk = RBAmrSDK()
|
|
127
119
|
```
|
|
@@ -141,7 +133,7 @@ sdk = RBAmrSDK()
|
|
|
141
133
|
## 5. Manipulate SDK (`RBManipulateSDK`)
|
|
142
134
|
|
|
143
135
|
```python
|
|
144
|
-
from rb_sdk import RBManipulateSDK
|
|
136
|
+
from rainbow.rb_sdk import RBManipulateSDK
|
|
145
137
|
|
|
146
138
|
sdk = RBManipulateSDK()
|
|
147
139
|
```
|
|
@@ -165,7 +157,7 @@ sdk = RBManipulateSDK()
|
|
|
165
157
|
공식 `rby1-sdk` 래퍼.
|
|
166
158
|
|
|
167
159
|
```python
|
|
168
|
-
from rb_sdk import RBRby1SDK
|
|
160
|
+
from rainbow.rb_sdk import RBRby1SDK
|
|
169
161
|
|
|
170
162
|
sdk = RBRby1SDK(endpoint="192.168.30.1:50051", model=None, auto_connect=True)
|
|
171
163
|
|
|
@@ -178,48 +170,26 @@ sdk.control.servo_on()
|
|
|
178
170
|
state = sdk.state.get_state()
|
|
179
171
|
print(state)
|
|
180
172
|
|
|
181
|
-
sdk.disconnect()
|
|
182
173
|
```
|
|
183
174
|
|
|
184
|
-
> ⚠️ `RBRby1SDK.connect()` / `disconnect()`는 RB-Y1 gRPC endpoint 전용 메서드로, `RBBaseSDK.connect()`(common HTTP 등록)와 별개입니다. 자세한 차이는 클래스 docstring 참조.
|
|
185
|
-
|
|
186
175
|
지원 메서드:
|
|
187
176
|
|
|
188
177
|
- 공통: `connect()`, `disconnect()`, `whoami()`, `call(method, *args, **kwargs)`
|
|
189
178
|
- 제어: `control.invoke(...)`, `control.power_on()`, `control.servo_on()`
|
|
190
179
|
- 상태: `state.get_state()`
|
|
191
180
|
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## 7. Flow Manager (PyFM) 연동
|
|
195
|
-
|
|
196
|
-
여러 SDK 메서드는 `flow_manager_args`를 받아 Step 실행 완료 시 `done()` 콜백을 호출합니다.
|
|
197
|
-
|
|
198
|
-
```python
|
|
199
|
-
from rb_schemas.sdk import FlowManagerArgs
|
|
200
|
-
from rb_sdk import RBManipulateSDK
|
|
201
|
-
|
|
202
|
-
sdk = RBManipulateSDK()
|
|
203
|
-
|
|
204
|
-
def step_func(flow_manager_args: FlowManagerArgs | None = None):
|
|
205
|
-
sdk.move.call_move_j(
|
|
206
|
-
robot_model="C500920",
|
|
207
|
-
target={"tar_values": [0]*6, "tar_frame": 0, "tar_unit": 0},
|
|
208
|
-
flow_manager_args=flow_manager_args,
|
|
209
|
-
)
|
|
210
|
-
```
|
|
211
181
|
|
|
212
182
|
---
|
|
213
183
|
|
|
214
|
-
##
|
|
184
|
+
## 7. 주의사항
|
|
215
185
|
|
|
216
186
|
- `RBBaseSDK`는 프로세스 단위 싱글톤 + 공유 ZenohClient 구조입니다. 같은 프로세스에서 여러 번 `RBManipulateSDK()`를 호출해도 동일 인스턴스가 반환됩니다.
|
|
217
187
|
- `RBRby1SDK`는 최초 `endpoint/model` 기준으로 세션이 공유됩니다.
|
|
218
|
-
- 연결 대상(zenoh, rby1 endpoint,
|
|
219
|
-
- 외부 PC에서 SDK 사용 시 **방화벽이 7447/TCP(zenoh)와 8000/TCP
|
|
188
|
+
- 연결 대상(zenoh, rby1 endpoint, Muscat HTTP)이 준비되지 않으면 런타임 예외가 발생합니다.
|
|
189
|
+
- 외부 PC에서 SDK 사용 시 **방화벽이 7447/TCP(zenoh)와 8000/TCP을 양방향으로 허용**해야 합니다.
|
|
220
190
|
|
|
221
191
|
---
|
|
222
192
|
|
|
223
|
-
##
|
|
193
|
+
## 8. 라이선스 / 문의
|
|
224
194
|
|
|
225
|
-
© Rainbow Robotics. 내부 이슈/문의: [GitHub Issues](https://github.com/
|
|
195
|
+
© Rainbow Robotics. 내부 이슈/문의: [GitHub Issues](https://github.com/rainbow-mobile/rainbow-release-apps/issues)
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: rainbow-rb-sdk
|
|
3
|
-
Version: 0.0.9.dev10
|
|
4
|
-
Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
|
|
5
|
-
Author-email: Derek <dfd1123@rainbow-robotics.com>
|
|
6
|
-
Requires-Python: <3.13,>=3.12
|
|
7
|
-
Description-Content-Type: text/markdown
|
|
8
|
-
Requires-Dist: rainbow-rb-utils==0.0.9.dev10
|
|
9
|
-
Requires-Dist: rainbow-rb-zenoh==0.0.9.dev10
|
|
10
|
-
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev10
|
|
11
|
-
Requires-Dist: rainbow-rb-schemas==0.0.9.dev10
|
|
12
|
-
Requires-Dist: rainbow-rb-log==0.0.9.dev10
|
|
13
|
-
Requires-Dist: rby1-sdk>=0.9.1
|
|
14
|
-
|
|
15
1
|
# rb_sdk
|
|
16
2
|
|
|
17
3
|
Rainbow Robotics 통합 Python SDK. AMR · Manipulator · RB-Y1 휴머노이드 제어와 Rainbow Robot Service(common) 연동을 단일 API로 제공합니다.
|
|
@@ -31,15 +17,6 @@ Rainbow Robotics 통합 Python SDK. AMR · Manipulator · RB-Y1 휴머노이드
|
|
|
31
17
|
|
|
32
18
|
## 1. 설치
|
|
33
19
|
|
|
34
|
-
### 워크스페이스(rby2 모노레포 내부)
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
cd /path/to/rby2/backend
|
|
38
|
-
uv add rb_sdk --package your_package
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### PyPI 설치
|
|
42
|
-
|
|
43
20
|
```bash
|
|
44
21
|
pip install rb_sdk
|
|
45
22
|
# RB-Y1 휴머노이드 제어가 필요하면 함께 설치
|
|
@@ -55,7 +32,7 @@ pip install rby1-sdk
|
|
|
55
32
|
`common` 서비스와 같은 PC에서 실행되는 스크립트라면 추가 설정 없이 그대로 사용 가능합니다.
|
|
56
33
|
|
|
57
34
|
```python
|
|
58
|
-
from rb_sdk import RBAmrSDK, RBManipulateSDK
|
|
35
|
+
from rainbow.rb_sdk import RBAmrSDK, RBManipulateSDK
|
|
59
36
|
|
|
60
37
|
amr = RBAmrSDK()
|
|
61
38
|
manipulate = RBManipulateSDK()
|
|
@@ -67,38 +44,23 @@ manipulate.move.call_move_j(
|
|
|
67
44
|
)
|
|
68
45
|
```
|
|
69
46
|
|
|
70
|
-
`rb_sdk`는 lazy import 지원: `from rb_sdk import ...` 한 줄로 가져옵니다.
|
|
71
|
-
|
|
72
47
|
---
|
|
73
48
|
|
|
74
49
|
## 3. 외부 PC에서 사용 (Remote Connect)
|
|
75
50
|
|
|
76
|
-
개발용
|
|
77
|
-
|
|
78
|
-
### 3-1. Zenoh 메시 연결 (필수)
|
|
79
|
-
|
|
80
|
-
ZenohClient가 remote common에 붙도록 환경변수 설정:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
export ZENOH_PEER_CONNECT_ENDPOINTS=tcp/<common_host_ip>:7447
|
|
84
|
-
python my_script.py
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### 3-2. common 측 peer 등록 (권장) — `sdk.connect()`
|
|
88
|
-
|
|
89
|
-
서버에서 외부 peer를 추적하고 끊김 감지가 필요하면 SDK의 `connect()`를 호출합니다.
|
|
51
|
+
개발용 노트북 등 **로봇 본체와 다른 머신**에서 로봇과 통신하고 싶다면 `sdk.connect()`를 호출합니다.
|
|
90
52
|
|
|
91
53
|
```python
|
|
92
54
|
import asyncio
|
|
93
|
-
from rb_sdk import RBManipulateSDK
|
|
55
|
+
from rainbow.rb_sdk import RBManipulateSDK
|
|
94
56
|
|
|
95
57
|
async def main():
|
|
96
58
|
sdk = RBManipulateSDK()
|
|
97
59
|
|
|
98
|
-
# common
|
|
60
|
+
# 로봇(common 서비스)에 외부 peer로 등록 + 자동 heartbeat 시작
|
|
99
61
|
peer_id = await sdk.connect(
|
|
100
|
-
token="
|
|
101
|
-
host="192.168.1.100", #
|
|
62
|
+
token="외부 서비스 Token", # Muscat이 생성한 서비스 Token
|
|
63
|
+
host="192.168.1.100", # 로봇 IP
|
|
102
64
|
ttl=30, # 서버 측 세션 TTL(초). heartbeat 끊기면 자동 해제
|
|
103
65
|
# zenoh_port=None, # None → OS가 빈 포트 자동 배정 (충돌 없음)
|
|
104
66
|
# heartbeat_interval=15.0, # 기본: ttl / 2
|
|
@@ -114,7 +76,7 @@ asyncio.run(main())
|
|
|
114
76
|
|
|
115
77
|
#### 주요 특징
|
|
116
78
|
|
|
117
|
-
- **로컬 IP 자동 감지**: `host` 방향의 라우팅 인터페이스 IP를 자동으로 찾아
|
|
79
|
+
- **로컬 IP 자동 감지**: `host` 방향의 라우팅 인터페이스 IP를 자동으로 찾아 로봇에 알림
|
|
118
80
|
- **포트 자동 배정**: 별도 지정 없이 OS가 빈 포트를 잡아주므로 포트 충돌 없음
|
|
119
81
|
- **자동 heartbeat**: 주기적으로 TTL 연장. 스크립트 종료 / 크래시 시 TTL 만료로 서버 측 정리
|
|
120
82
|
- **같은 PC 자동 감지**: `host`가 localhost거나 자기 IP인 경우 `connect()`는 아무것도 하지 않고 `None` 반환 (이미 메시 안에 있음)
|
|
@@ -124,18 +86,20 @@ asyncio.run(main())
|
|
|
124
86
|
| 인자 | 타입 | 기본 | 설명 |
|
|
125
87
|
|---|---|---|---|
|
|
126
88
|
| `token` | `str` | (필수) | common 서비스 JWT |
|
|
127
|
-
| `host` | `str` | (필수) | common이 실행 중인
|
|
128
|
-
| `common_port` | `int` | `8000` | common HTTP 포트 |
|
|
89
|
+
| `host` | `str` | (필수) | common이 실행 중인 로봇 IP |
|
|
129
90
|
| `zenoh_port` | `int \| None` | `None` | 로컬 Zenoh listen 포트. `None`이면 자동 |
|
|
130
91
|
| `ttl` | `int` | `30` | 서버 측 세션 TTL(초) |
|
|
131
92
|
| `heartbeat_interval` | `float \| None` | `None` | heartbeat 주기. `None`이면 `ttl/2` |
|
|
93
|
+
| `mesh_timeout` | `float \| None` | `None` | mesh 형성 대기 최대 시간(초). `None`이면 무제한 대기 |
|
|
94
|
+
| `mesh_probe_timeout` | `float` | `1.0` | probe query 1회 timeout(초) |
|
|
95
|
+
| `mesh_probe_interval` | `float` | `0.5` | probe 재시도 간격(초) |
|
|
132
96
|
|
|
133
97
|
---
|
|
134
98
|
|
|
135
99
|
## 4. AMR SDK (`RBAmrSDK`)
|
|
136
100
|
|
|
137
101
|
```python
|
|
138
|
-
from rb_sdk import RBAmrSDK
|
|
102
|
+
from rainbow.rb_sdk import RBAmrSDK
|
|
139
103
|
|
|
140
104
|
sdk = RBAmrSDK()
|
|
141
105
|
```
|
|
@@ -155,7 +119,7 @@ sdk = RBAmrSDK()
|
|
|
155
119
|
## 5. Manipulate SDK (`RBManipulateSDK`)
|
|
156
120
|
|
|
157
121
|
```python
|
|
158
|
-
from rb_sdk import RBManipulateSDK
|
|
122
|
+
from rainbow.rb_sdk import RBManipulateSDK
|
|
159
123
|
|
|
160
124
|
sdk = RBManipulateSDK()
|
|
161
125
|
```
|
|
@@ -179,7 +143,7 @@ sdk = RBManipulateSDK()
|
|
|
179
143
|
공식 `rby1-sdk` 래퍼.
|
|
180
144
|
|
|
181
145
|
```python
|
|
182
|
-
from rb_sdk import RBRby1SDK
|
|
146
|
+
from rainbow.rb_sdk import RBRby1SDK
|
|
183
147
|
|
|
184
148
|
sdk = RBRby1SDK(endpoint="192.168.30.1:50051", model=None, auto_connect=True)
|
|
185
149
|
|
|
@@ -192,48 +156,26 @@ sdk.control.servo_on()
|
|
|
192
156
|
state = sdk.state.get_state()
|
|
193
157
|
print(state)
|
|
194
158
|
|
|
195
|
-
sdk.disconnect()
|
|
196
159
|
```
|
|
197
160
|
|
|
198
|
-
> ⚠️ `RBRby1SDK.connect()` / `disconnect()`는 RB-Y1 gRPC endpoint 전용 메서드로, `RBBaseSDK.connect()`(common HTTP 등록)와 별개입니다. 자세한 차이는 클래스 docstring 참조.
|
|
199
|
-
|
|
200
161
|
지원 메서드:
|
|
201
162
|
|
|
202
163
|
- 공통: `connect()`, `disconnect()`, `whoami()`, `call(method, *args, **kwargs)`
|
|
203
164
|
- 제어: `control.invoke(...)`, `control.power_on()`, `control.servo_on()`
|
|
204
165
|
- 상태: `state.get_state()`
|
|
205
166
|
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## 7. Flow Manager (PyFM) 연동
|
|
209
|
-
|
|
210
|
-
여러 SDK 메서드는 `flow_manager_args`를 받아 Step 실행 완료 시 `done()` 콜백을 호출합니다.
|
|
211
|
-
|
|
212
|
-
```python
|
|
213
|
-
from rb_schemas.sdk import FlowManagerArgs
|
|
214
|
-
from rb_sdk import RBManipulateSDK
|
|
215
|
-
|
|
216
|
-
sdk = RBManipulateSDK()
|
|
217
|
-
|
|
218
|
-
def step_func(flow_manager_args: FlowManagerArgs | None = None):
|
|
219
|
-
sdk.move.call_move_j(
|
|
220
|
-
robot_model="C500920",
|
|
221
|
-
target={"tar_values": [0]*6, "tar_frame": 0, "tar_unit": 0},
|
|
222
|
-
flow_manager_args=flow_manager_args,
|
|
223
|
-
)
|
|
224
|
-
```
|
|
225
167
|
|
|
226
168
|
---
|
|
227
169
|
|
|
228
|
-
##
|
|
170
|
+
## 7. 주의사항
|
|
229
171
|
|
|
230
172
|
- `RBBaseSDK`는 프로세스 단위 싱글톤 + 공유 ZenohClient 구조입니다. 같은 프로세스에서 여러 번 `RBManipulateSDK()`를 호출해도 동일 인스턴스가 반환됩니다.
|
|
231
173
|
- `RBRby1SDK`는 최초 `endpoint/model` 기준으로 세션이 공유됩니다.
|
|
232
|
-
- 연결 대상(zenoh, rby1 endpoint,
|
|
233
|
-
- 외부 PC에서 SDK 사용 시 **방화벽이 7447/TCP(zenoh)와 8000/TCP
|
|
174
|
+
- 연결 대상(zenoh, rby1 endpoint, Muscat HTTP)이 준비되지 않으면 런타임 예외가 발생합니다.
|
|
175
|
+
- 외부 PC에서 SDK 사용 시 **방화벽이 7447/TCP(zenoh)와 8000/TCP을 양방향으로 허용**해야 합니다.
|
|
234
176
|
|
|
235
177
|
---
|
|
236
178
|
|
|
237
|
-
##
|
|
179
|
+
## 8. 라이선스 / 문의
|
|
238
180
|
|
|
239
|
-
© Rainbow Robotics. 내부 이슈/문의: [GitHub Issues](https://github.com/
|
|
181
|
+
© Rainbow Robotics. 내부 이슈/문의: [GitHub Issues](https://github.com/rainbow-mobile/rainbow-release-apps/issues)
|
|
@@ -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.dev11"
|
|
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.dev11",
|
|
17
|
+
"rainbow-rb-zenoh==0.0.9.dev11",
|
|
18
|
+
"rainbow-rb-flat-buffers==0.0.9.dev11",
|
|
19
|
+
"rainbow-rb-schemas==0.0.9.dev11",
|
|
20
|
+
"rainbow-rb-log==0.0.9.dev11",
|
|
21
21
|
"rby1-sdk>=0.9.1",
|
|
22
22
|
]
|
|
23
23
|
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11/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.dev11
|
|
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.dev11
|
|
9
|
+
Requires-Dist: rainbow-rb-zenoh==0.0.9.dev11
|
|
10
|
+
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev11
|
|
11
|
+
Requires-Dist: rainbow-rb-schemas==0.0.9.dev11
|
|
12
|
+
Requires-Dist: rainbow-rb-log==0.0.9.dev11
|
|
13
13
|
Requires-Dist: rby1-sdk>=0.9.1
|
|
14
14
|
|
|
15
15
|
# rb_sdk
|
|
@@ -31,15 +31,6 @@ Rainbow Robotics 통합 Python SDK. AMR · Manipulator · RB-Y1 휴머노이드
|
|
|
31
31
|
|
|
32
32
|
## 1. 설치
|
|
33
33
|
|
|
34
|
-
### 워크스페이스(rby2 모노레포 내부)
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
cd /path/to/rby2/backend
|
|
38
|
-
uv add rb_sdk --package your_package
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### PyPI 설치
|
|
42
|
-
|
|
43
34
|
```bash
|
|
44
35
|
pip install rb_sdk
|
|
45
36
|
# RB-Y1 휴머노이드 제어가 필요하면 함께 설치
|
|
@@ -55,7 +46,7 @@ pip install rby1-sdk
|
|
|
55
46
|
`common` 서비스와 같은 PC에서 실행되는 스크립트라면 추가 설정 없이 그대로 사용 가능합니다.
|
|
56
47
|
|
|
57
48
|
```python
|
|
58
|
-
from rb_sdk import RBAmrSDK, RBManipulateSDK
|
|
49
|
+
from rainbow.rb_sdk import RBAmrSDK, RBManipulateSDK
|
|
59
50
|
|
|
60
51
|
amr = RBAmrSDK()
|
|
61
52
|
manipulate = RBManipulateSDK()
|
|
@@ -67,38 +58,23 @@ manipulate.move.call_move_j(
|
|
|
67
58
|
)
|
|
68
59
|
```
|
|
69
60
|
|
|
70
|
-
`rb_sdk`는 lazy import 지원: `from rb_sdk import ...` 한 줄로 가져옵니다.
|
|
71
|
-
|
|
72
61
|
---
|
|
73
62
|
|
|
74
63
|
## 3. 외부 PC에서 사용 (Remote Connect)
|
|
75
64
|
|
|
76
|
-
개발용
|
|
77
|
-
|
|
78
|
-
### 3-1. Zenoh 메시 연결 (필수)
|
|
79
|
-
|
|
80
|
-
ZenohClient가 remote common에 붙도록 환경변수 설정:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
export ZENOH_PEER_CONNECT_ENDPOINTS=tcp/<common_host_ip>:7447
|
|
84
|
-
python my_script.py
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### 3-2. common 측 peer 등록 (권장) — `sdk.connect()`
|
|
88
|
-
|
|
89
|
-
서버에서 외부 peer를 추적하고 끊김 감지가 필요하면 SDK의 `connect()`를 호출합니다.
|
|
65
|
+
개발용 노트북 등 **로봇 본체와 다른 머신**에서 로봇과 통신하고 싶다면 `sdk.connect()`를 호출합니다.
|
|
90
66
|
|
|
91
67
|
```python
|
|
92
68
|
import asyncio
|
|
93
|
-
from rb_sdk import RBManipulateSDK
|
|
69
|
+
from rainbow.rb_sdk import RBManipulateSDK
|
|
94
70
|
|
|
95
71
|
async def main():
|
|
96
72
|
sdk = RBManipulateSDK()
|
|
97
73
|
|
|
98
|
-
# common
|
|
74
|
+
# 로봇(common 서비스)에 외부 peer로 등록 + 자동 heartbeat 시작
|
|
99
75
|
peer_id = await sdk.connect(
|
|
100
|
-
token="
|
|
101
|
-
host="192.168.1.100", #
|
|
76
|
+
token="외부 서비스 Token", # Muscat이 생성한 서비스 Token
|
|
77
|
+
host="192.168.1.100", # 로봇 IP
|
|
102
78
|
ttl=30, # 서버 측 세션 TTL(초). heartbeat 끊기면 자동 해제
|
|
103
79
|
# zenoh_port=None, # None → OS가 빈 포트 자동 배정 (충돌 없음)
|
|
104
80
|
# heartbeat_interval=15.0, # 기본: ttl / 2
|
|
@@ -114,7 +90,7 @@ asyncio.run(main())
|
|
|
114
90
|
|
|
115
91
|
#### 주요 특징
|
|
116
92
|
|
|
117
|
-
- **로컬 IP 자동 감지**: `host` 방향의 라우팅 인터페이스 IP를 자동으로 찾아
|
|
93
|
+
- **로컬 IP 자동 감지**: `host` 방향의 라우팅 인터페이스 IP를 자동으로 찾아 로봇에 알림
|
|
118
94
|
- **포트 자동 배정**: 별도 지정 없이 OS가 빈 포트를 잡아주므로 포트 충돌 없음
|
|
119
95
|
- **자동 heartbeat**: 주기적으로 TTL 연장. 스크립트 종료 / 크래시 시 TTL 만료로 서버 측 정리
|
|
120
96
|
- **같은 PC 자동 감지**: `host`가 localhost거나 자기 IP인 경우 `connect()`는 아무것도 하지 않고 `None` 반환 (이미 메시 안에 있음)
|
|
@@ -124,18 +100,20 @@ asyncio.run(main())
|
|
|
124
100
|
| 인자 | 타입 | 기본 | 설명 |
|
|
125
101
|
|---|---|---|---|
|
|
126
102
|
| `token` | `str` | (필수) | common 서비스 JWT |
|
|
127
|
-
| `host` | `str` | (필수) | common이 실행 중인
|
|
128
|
-
| `common_port` | `int` | `8000` | common HTTP 포트 |
|
|
103
|
+
| `host` | `str` | (필수) | common이 실행 중인 로봇 IP |
|
|
129
104
|
| `zenoh_port` | `int \| None` | `None` | 로컬 Zenoh listen 포트. `None`이면 자동 |
|
|
130
105
|
| `ttl` | `int` | `30` | 서버 측 세션 TTL(초) |
|
|
131
106
|
| `heartbeat_interval` | `float \| None` | `None` | heartbeat 주기. `None`이면 `ttl/2` |
|
|
107
|
+
| `mesh_timeout` | `float \| None` | `None` | mesh 형성 대기 최대 시간(초). `None`이면 무제한 대기 |
|
|
108
|
+
| `mesh_probe_timeout` | `float` | `1.0` | probe query 1회 timeout(초) |
|
|
109
|
+
| `mesh_probe_interval` | `float` | `0.5` | probe 재시도 간격(초) |
|
|
132
110
|
|
|
133
111
|
---
|
|
134
112
|
|
|
135
113
|
## 4. AMR SDK (`RBAmrSDK`)
|
|
136
114
|
|
|
137
115
|
```python
|
|
138
|
-
from rb_sdk import RBAmrSDK
|
|
116
|
+
from rainbow.rb_sdk import RBAmrSDK
|
|
139
117
|
|
|
140
118
|
sdk = RBAmrSDK()
|
|
141
119
|
```
|
|
@@ -155,7 +133,7 @@ sdk = RBAmrSDK()
|
|
|
155
133
|
## 5. Manipulate SDK (`RBManipulateSDK`)
|
|
156
134
|
|
|
157
135
|
```python
|
|
158
|
-
from rb_sdk import RBManipulateSDK
|
|
136
|
+
from rainbow.rb_sdk import RBManipulateSDK
|
|
159
137
|
|
|
160
138
|
sdk = RBManipulateSDK()
|
|
161
139
|
```
|
|
@@ -179,7 +157,7 @@ sdk = RBManipulateSDK()
|
|
|
179
157
|
공식 `rby1-sdk` 래퍼.
|
|
180
158
|
|
|
181
159
|
```python
|
|
182
|
-
from rb_sdk import RBRby1SDK
|
|
160
|
+
from rainbow.rb_sdk import RBRby1SDK
|
|
183
161
|
|
|
184
162
|
sdk = RBRby1SDK(endpoint="192.168.30.1:50051", model=None, auto_connect=True)
|
|
185
163
|
|
|
@@ -192,48 +170,26 @@ sdk.control.servo_on()
|
|
|
192
170
|
state = sdk.state.get_state()
|
|
193
171
|
print(state)
|
|
194
172
|
|
|
195
|
-
sdk.disconnect()
|
|
196
173
|
```
|
|
197
174
|
|
|
198
|
-
> ⚠️ `RBRby1SDK.connect()` / `disconnect()`는 RB-Y1 gRPC endpoint 전용 메서드로, `RBBaseSDK.connect()`(common HTTP 등록)와 별개입니다. 자세한 차이는 클래스 docstring 참조.
|
|
199
|
-
|
|
200
175
|
지원 메서드:
|
|
201
176
|
|
|
202
177
|
- 공통: `connect()`, `disconnect()`, `whoami()`, `call(method, *args, **kwargs)`
|
|
203
178
|
- 제어: `control.invoke(...)`, `control.power_on()`, `control.servo_on()`
|
|
204
179
|
- 상태: `state.get_state()`
|
|
205
180
|
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## 7. Flow Manager (PyFM) 연동
|
|
209
|
-
|
|
210
|
-
여러 SDK 메서드는 `flow_manager_args`를 받아 Step 실행 완료 시 `done()` 콜백을 호출합니다.
|
|
211
|
-
|
|
212
|
-
```python
|
|
213
|
-
from rb_schemas.sdk import FlowManagerArgs
|
|
214
|
-
from rb_sdk import RBManipulateSDK
|
|
215
|
-
|
|
216
|
-
sdk = RBManipulateSDK()
|
|
217
|
-
|
|
218
|
-
def step_func(flow_manager_args: FlowManagerArgs | None = None):
|
|
219
|
-
sdk.move.call_move_j(
|
|
220
|
-
robot_model="C500920",
|
|
221
|
-
target={"tar_values": [0]*6, "tar_frame": 0, "tar_unit": 0},
|
|
222
|
-
flow_manager_args=flow_manager_args,
|
|
223
|
-
)
|
|
224
|
-
```
|
|
225
181
|
|
|
226
182
|
---
|
|
227
183
|
|
|
228
|
-
##
|
|
184
|
+
## 7. 주의사항
|
|
229
185
|
|
|
230
186
|
- `RBBaseSDK`는 프로세스 단위 싱글톤 + 공유 ZenohClient 구조입니다. 같은 프로세스에서 여러 번 `RBManipulateSDK()`를 호출해도 동일 인스턴스가 반환됩니다.
|
|
231
187
|
- `RBRby1SDK`는 최초 `endpoint/model` 기준으로 세션이 공유됩니다.
|
|
232
|
-
- 연결 대상(zenoh, rby1 endpoint,
|
|
233
|
-
- 외부 PC에서 SDK 사용 시 **방화벽이 7447/TCP(zenoh)와 8000/TCP
|
|
188
|
+
- 연결 대상(zenoh, rby1 endpoint, Muscat HTTP)이 준비되지 않으면 런타임 예외가 발생합니다.
|
|
189
|
+
- 외부 PC에서 SDK 사용 시 **방화벽이 7447/TCP(zenoh)와 8000/TCP을 양방향으로 허용**해야 합니다.
|
|
234
190
|
|
|
235
191
|
---
|
|
236
192
|
|
|
237
|
-
##
|
|
193
|
+
## 8. 라이선스 / 문의
|
|
238
194
|
|
|
239
|
-
© Rainbow Robotics. 내부 이슈/문의: [GitHub Issues](https://github.com/
|
|
195
|
+
© Rainbow Robotics. 내부 이슈/문의: [GitHub Issues](https://github.com/rainbow-mobile/rainbow-release-apps/issues)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_control.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_file.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_map.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_move.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_program.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/amr_sdk/amr_status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/base_sdk/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/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.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/program_sdk/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/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.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/base.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/client.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/config.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/control.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/rby1_sdk/state.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/__init__.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/amr_schema.py
RENAMED
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow/rb_sdk/schema/base_schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow_rb_sdk.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{rainbow_rb_sdk-0.0.9.dev10 → rainbow_rb_sdk-0.0.9.dev11}/src/rainbow_rb_sdk.egg-info/top_level.txt
RENAMED
|
File without changes
|