FlmainGO-Light Python SDK [한국어]

1. 시작하기

1.1 SSH 접속

로봇의 전원을 켜면 Wi-Fi 핫스팟이 자동으로 활성화됩니다. 활성화된 Wi-Fi를 통해 로봇에 접속할 수 있습니다.

SSID

COCELO_ROBOT_XXXX

비밀번호

00000000

circle-info

XXXX는 각 로봇마다 고유한 4자리 영문/숫자 조합 태그입니다.

SSH 접속
# 1) Wi-Fi 연결 (COCELO_ROBOT_XXXX 네트워크에 연결)
# 2) SSH 접속
ssh cocelo@XXXX    # XXXX = Wi-Fi SSID와 동일한 태그
                   # 비밀번호: 00000000

1.2 로봇 움직여보기

조이스틱 연결

  1. 조이스틱의 중앙 홈버튼5초 이상 길게 누릅니다.

  2. 페어링이 완료될 때까지 대기합니다.

circle-exclamation

로봇 깨우기/조종

  • 컨트롤러의 왼쪽 스틱으로 로봇 이동을 제어합니다.

  • 종료: Ctrl + C

triangle-exclamation

1.3 실행 로그 보기

명령어
설명

cocelo log list

저장된 로그 파일 목록 보기

cocelo log show last

가장 최근 로그 보기

cocelo log show <파일명>

특정 로그 파일 보기


2. SDK 미리 보기

아래 예제는 SDK의 핵심 사용 흐름을 보여줍니다.

circle-info

제어 루프 순서: get_obs()get_cmd()build_state()select_action()do_action()


3. 패키지 구조

핵심 컴포넌트

컴포넌트
역할

Robot

로봇 인터페이스

Joystick

조이스틱 입력을 cmd 형태로 제공

Mode

정책(.onnx) + 관측/스케일/스택 설정

RL

네트워크 입력 state 구성 + 액션 선택

control_rate

제어 루프를 지정 주기로 실행


4. API 레퍼런스

Package Contents

flamingo_light_sdk

  • Robot

  • Joystick

  • Mode

  • ModeConfig

  • RL

  • control_rate

flamingo_light_sdk.onnxpolicy

  • MLPPolicy

  • LSTMPolicy

Exceptions

  • RobotInitError

  • RobotSetGainsError

  • RobotEStopError

  • ModeConfigError


flamingo_light_sdk

class flamingo_light_sdk.Robot()

circle-check

Attributes

gains_set: bool

게인 설정 여부입니다.


Robot()

로봇 인스턴스를 생성합니다.

Raises

  • RobotInitError: 초기화 실패


set_gains(kp: list[float], kd: list[float]) -> None

4개 모터의 PD 게인을 설정합니다.

Parameters

  • kp (list[float]): 비례 게인 (길이 4)

  • kd (list[float]): 미분 게인 (길이 4)

circle-info

kp / kd 리스트에 들어가는 게인에 해당하는 모터의 순서는 반드시 아래와 일치해야 합니다.

인덱스 0: 왼쪽 관절 모터

인덱스 1: 오른쪽 관절 모터

인덱스 2: 왼쪽 바퀴 모터

인덱스 3: 오른쪽 바퀴 모터

Raises

  • RobotSetGainsError


get_obs() -> dict

현재 센서 데이터를 반환합니다.


do_action(action: list[float], torque_ctrl: bool = False) -> None

모터 명령을 전송합니다.

Parameters

  • action (list[float]): 4개 모터 목표값(또는 토크값)

  • torque_ctrl (bool, optional): True면 토크 제어 모드

circle-info

do_action 메소드의 인자의 순서를 반드시 지켜주세요.

인덱스 0: 왼쪽 관절 모터 위치 (rad) 제어

인덱스 1: 오른쪽 관절 모터 위치 (rad) 제어

인덱스 2: 왼쪽 바퀴 모터 속도 (rad/s) 제어

인덱스 3: 오른쪽 바퀴 모터 속도 (rad/s) 제어

*torque_ctrl=True 시, 해당 모터 토크 제어


estop(msg: str = "", verbose: bool = True) -> None

긴급 정지를 실행합니다.

Raises

  • RobotEStopError


get_gains() -> dict

현재 게인 설정을 반환합니다.


class flamingo_light_sdk.RL()

circle-check

add_mode(mode: Mode) -> None

모드를 추가합니다. (다중 모드 지원)


set_mode(mode_id: int | None = None) -> None

활성화할 모드를 설정합니다.

Parameters

  • mode_id (int): 모드 ID


build_state(obs: dict, cmd: dict, last_action: list[float] | None = None) -> list[float]

관측값을 신경망 입력(state) 형태로 변환합니다.

Parameters

  • obs (dict): robot.get_obs() 반환값

  • cmd (dict): joystick.get_cmd() 반환값

  • last_action (list[float] | None): 사용자가 직접 넣는 [-1,1]범위로 clip된 last_action (선택)

circle-info

last_action을 인자로 주지 않으면, RL이 내부적으로 last_action을 저장하여 사용합니다 (권장).

Returns

  • list[float]: 1D state 벡터


select_action(state: list[float]) -> list[float]

정책을 실행하여 액션을 생성합니다.


class flamingo_light_sdk.Mode(mode_cfg: dict)

circle-check

mode_cfg keys

타입
기본값
설명

id

int

(필수)

모드 ID (1~16)

policy_path

str

(필수)

ONNX 정책 파일 경로

stacked_obs_order

list[str]

[]

스택할 관측 키 목록

non_stacked_obs_order

list[str]

[]

스택하지 않을 관측 키 목록

obs_scale

dict

{}

관측치별 스케일 (스칼라 또는 벡터)

action_scale

float | list[float]

1.0

액션 스케일

stack_size

int

1

스택 프레임 수

policy_type

str

"mlp"

"mlp" / "lstm"

cmd_vector_length

int

0

명령 벡터 차원

extra_obs

dict[str,int]

{}

사용자 정의 관측치 (키: 이름, 값: 차원)


기본 관측값

설명
길이 (차원)

dof_pos

모터 각도 (rad)

2

dof_vel

모터 속도 (rad/s)

4

ang_vel

각속도 (wx, wy, wz) (rad/s)

3

proj_grav

투영 중력 벡터 (gx, gy, gz)

3

last_action

이전 스텝 액션 출력

4

command

조이스틱 명령 벡터

cmd_vector_length


Attributes (read-only)

  • id: int

  • stack_size: int

  • state_length: int

  • action_length: int

  • policy_type: str

  • policy_path: str

  • stacked_obs_order: list[str]

  • non_stacked_obs_order: list[str]

  • action_scale: list[float]

  • obs_scale: dict

  • obs_lengths: dict

  • cmd_vector_length: int


inference(state: list[float]) -> list[float]

ONNX 정책 추론을 직접 수행합니다.


class flamingo_light_sdk.Joystick(max_cmd: list[float]=[], smoothness: float=50.0, mapping: dict={})

circle-check

Parameters

  • max_cmd (list[float], optional)

    • 각 축 출력 범위를 [-max_cmd[i], +max_cmd[i]]로 제한합니다.

    • 인자리스트 길이가 6보다 짧으면 나머지는 1.0으로 채워집니다.

    • 특정 축을 비활성화하려면 해당 인덱스를 0으로 설정합니다.

  • smoothness (float, optional) 조이스틱 입력에 필터를 적용합니다. 값이 클수록 출력이 부드럽지만, 입력 반응이 느려집니다.

  • mapping (dict[str,int], optional) 축(axis)과 버튼을 명령 벡터의 특정 인덱스에 매핑할 수 있습니다.

기본 매핑 (Default Mapping)

키 이름
명령 인덱스
설명
값 범위

LEFT_X

1

왼쪽 스틱 X축 (좌우)

연속

LEFT_Y

0

왼쪽 스틱 Y축 (상하)

연속

RIGHT_X

2

오른쪽 스틱 X축 (좌우)

연속

RIGHT_Y

3

오른쪽 스틱 Y축 (상하)

연속

LEFT_BTN

4

왼쪽 버튼 (LB)

0 또는 1

RIGHT_BTN

5

오른쪽 버튼 (RB)

0 또는 1

circle-info

LEFT_BTN / RIGHT_BTN은 누르지 않으면 0, 누르면 1의 불연속 값을 반환합니다.

매핑 규칙

  • 6개의 필수 키(LEFT_X, LEFT_Y, RIGHT_X, RIGHT_Y, LEFT_BTN, RIGHT_BTN)를 모두 지정해야 합니다.

  • 각 인덱스는 0~5 범위 내에서 고유해야 합니다.

  • 중복 인덱스나 누락된 키가 있으면 invalid_argument 예외가 발생합니다.


모드 전환 (mode_id)

D-pad(⬆️➡️⬇️⬅️)와 페이스 버튼(Y/B/A/X) 조합으로 mode_id(1~16)를 선택합니다. 조작 방법: D-pad 방향을 누른 상태에서 Y/B/A/X 중 하나를 동시에 누릅니다.

D-pad 방향
Y
B
A
X

⬆️ Up

1

2

3

4

➡️ Right

5

6

7

8

⬇️ Down

9

10

11

12

⬅️ Left

13

14

15

16


긴급 정지 (E-Stop)

기능
입력 방식

긴급 정지 (E-Stop)

LT + RT 버튼 동시 누름

triangle-exclamation

get_cmd() -> dict

조이스틱 명령 및 상태를 반환합니다.

Returns

  • cmd_vector (list[float]): 명령 벡터

  • mode_id (int | None): 현재 모드 ID

  • estop (bool): E-Stop 입력 감지 여부


is_connected() -> bool

조이스틱 연결 상태를 확인합니다.


function flamingo_light_sdk.control_rate(robot: Robot, hz: float = 50.0)

circle-info

지정된 Hz로 제어 루프를 실행하는 데코레이터입니다.


flamingo_light_sdk.onnxpolicy

class flamingo_light_sdk.onnxpolicy.MLPPolicy(weightPath: str)

circle-check

Parameters

  • weightPath (str): ONNX 모델 파일 경로

Methods

inference(state: list[float]) -> list[float]

1-step 추론을 수행합니다. state반드시 1D여야 합니다.

circle-info

반환 액션은 내부에서 [-1, 1] 범위로 클립됩니다.


class flamingo_light_sdk.onnxpolicy.LSTMPolicy(weightPath: str)

circle-check

Parameters

  • weightPath (str): ONNX 모델 파일 경로

Methods

inference(state: list[float]) -> list[float]

1-step 추론(내부 h/c 업데이트 포함). state반드시 1D여야 합니다.


5. 예제 코드


6. 응용

6.1 다중 모드 전환

여러 정책 간 전환을 지원합니다. build_state()cmd에서 mode_id를 감지하면 자동으로 모드를 전환할 수 있습니다.


6.2 관찰값 커스터마이징

센서 데이터를 가공하여 새로운 관측치를 만든 후 정책입력에 추가할 수 있습니다. extra_obs로 커스텀 관측치의 차원을 미리 정의하고, 루프 내에서 obs 딕셔너리에 데이터를 추가합니다.

circle-exclamation

6.3 토크 제어

위치/속도 제어 대신 토크 제어 모드를 사용합니다.


6.4 스케일 설정

관측값 및 액션에 스케일을 적용하는 방법입니다.

모든 요소에 동일한 스케일을 적용합니다.


7. SDK 업데이트

인터넷 연결이 필요한 작업입니다. SSH 접속 후 아래 순서대로 진행하세요.


Last updated