Metadata-Version: 2.4
Name: rainbow-rb-sdk
Version: 0.0.9.dev5
Summary: Rainbow Python SDK
Author-email: Derek <dfd1123@rainbow-robotics.com>
Requires-Python: <3.13,>=3.12
Description-Content-Type: text/markdown
Requires-Dist: rainbow-rb-utils==0.0.9.dev5
Requires-Dist: rainbow-rb-zenoh==0.0.9.dev5
Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev5
Requires-Dist: rainbow-rb-schemas==0.0.9.dev5
Requires-Dist: rainbow-rb-log==0.0.9.dev5

# rb_sdk 사용 설명서

`rb_sdk`는 Rainbow 서비스 호출을 Python API 형태로 래핑한 통합 SDK입니다.

현재 진입점:

- `RBAmrSDK`
- `RBManipulateSDK`
- `RBRby1SDK`
- `RBBaseSDK`

## 1. 설치/의존성

워크스페이스 기준:

```bash
cd /Users/kimjongwan/Desktop/workspace/rby2/backend
uv add rb_sdk --package your_package
```

`RBRby1SDK`를 사용할 경우 추가로 `rby1-sdk` 설치가 필요합니다.

## 2. 기본 사용

```python
from rb_sdk import RBAmrSDK, RBManipulateSDK

amr = RBAmrSDK()
manipulate = RBManipulateSDK()
```

`rb_sdk`는 lazy import를 사용하므로 `from rb_sdk import ...` 방식으로 가져오면 됩니다.

## 3. AMR SDK

`RBAmrSDK` 하위 모듈:

- `move`
- `control`
- `localization`
- `map`
- `setting`
- `file`
- `status`

```python
from rb_sdk import RBAmrSDK

sdk = RBAmrSDK()
# 예: sdk.move.*, sdk.control.* 형태로 기능 호출
```

## 4. Manipulate SDK

`RBManipulateSDK` 하위 모듈:

- `program`
- `move`
- `config`
- `io`
- `get_data`
- `point`

```python
from rb_sdk import RBManipulateSDK

sdk = RBManipulateSDK()
# 예: sdk.program.*, sdk.move.*, sdk.io.* 형태로 호출
```

## 5. RB-Y1 SDK (`RBRby1SDK`)

`RBRby1SDK`는 공식 `rby1-sdk`를 감싸는 래퍼입니다.

```python
from rb_sdk import RBRby1SDK

sdk = RBRby1SDK(endpoint="192.168.30.1:50051", model=None, auto_connect=True)

print(sdk.connected)
print(sdk.whoami())

sdk.control.power_on()
sdk.control.servo_on()

state = sdk.state.get_state()
print(state)

sdk.disconnect()
```

지원 메서드:

- 공통
  - `connect()`
  - `disconnect()`
  - `whoami()`
  - `call(method, *args, **kwargs)`
- 제어
  - `control.invoke(...)`
  - `control.power_on()`
  - `control.servo_on()`
- 상태
  - `state.get_state()`

## 6. Flow Manager 연동 포인트

여러 SDK 메서드는 `flow_manager_args`를 받아 Step 실행 완료 시 `done()` 콜백과 연동되도록 설계되어 있습니다.

```python
from rb_schemas.sdk import FlowManagerArgs
from rb_sdk import RBRby1SDK

sdk = RBRby1SDK(endpoint="192.168.30.1:50051")

def step_func(flow_manager_args: FlowManagerArgs | None = None):
    sdk.control.power_on(flow_manager_args=flow_manager_args)
```

## 7. 주의사항

- `RBBaseSDK`는 내부적으로 프로세스 단위 공유 리소스를 사용합니다.
- `RBRby1SDK`는 동일 프로세스에서 최초 `endpoint/model` 기준으로 세션이 공유됩니다.
- 연결 대상 서비스(zenoh, rby1 endpoint)가 준비되지 않으면 런타임 예외가 발생합니다.
