For the complete documentation index, see llms.txt. This page is also available as Markdown.

FlmainGO Python SDK [한국어]

1. 시작하기

1.1 SSH 접속

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

SSID

COCELO_ROBOT_XXXX

비밀번호

00000000

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

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

1.2 로봇 움직여보기

조이스틱 연결

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

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

모터 원점 세팅

  • 터미널에서 a 버튼을 눌러서 모터 상태를 얻습니다. a 버튼을 누른 후 모든 모터의 상태가 정상적으로 "2"임을 확인하고 다음 스텝으로 넘어가세요.

  • 터미널에서 z 버튼을 눌러서 모든 모터의 포지션을 원점으로 보내세요.

  • z 버튼을 누른 후 로봇이 서있는 자세(원점)으로 이동합니다.

  • q 버튼을 눌러서 모터의 원점 세팅 모드를 빠져나가세요.

로봇 깨우기/조종

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

  • 종료: Ctrl + C


1.3 실행 로그 보기

명령어
설명

cocelo log list

저장된 로그 파일 목록 보기

cocelo log show last

가장 최근 로그 보기

cocelo log show <파일명>

특정 로그 파일 보기


2. SDK 미리 보기

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

제어 루프 순서: 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_sdk

  • Robot

  • Joystick

  • Mode

  • ModeConfig

  • RL

  • control_rate

flamingo_sdk.onnxpolicy

  • MLPPolicy

  • LSTMPolicy

Exceptions

  • RobotInitError

  • RobotSetGainsError

  • RobotEStopError

  • ModeConfigError


flamingo_sdk

class flamingo_sdk.Robot()

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)

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

인덱스 0: 왼쪽 힙 모터

인덱스 1: 오른쪽 힙 모터

인덱스 2: 왼쪽 숄더 모터

인덱스 3: 오른쪽 숄더 모터

인덱스 4: 왼쪽 레그 모터

인덱스 5: 오른쪽 레그 모터

인덱스 6: 왼쪽 바퀴 모터

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

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면 토크 제어 모드

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_sdk.RL()


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 (선택)

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

Returns

  • list[float]: 1D state 벡터


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

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


class flamingo_sdk.Mode(mode_cfg: dict)

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]

0.25

액션 스케일

stack_size

int

3

스택 프레임 수

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_sdk.Joystick(max_cmd: list[pair(double, double)]=[], smoothness: float=50.0, mapping: dict={})

Parameters

  • max_cmd (list[pair(double, double)], optional)

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

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

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

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

  • mapping (str) 버튼을 순서대로명령 벡터에 매핑할 수 있습니다. 또한 이산 버튼의 경우 변화량을 명시할 수 있습니다.

매핑 규칙

  • 사용자가 mode에서 정의한 cmd_vector_length와 동일한 개수로 버튼을 매핑해야 합니다.

  • 각 버튼은 고유하게 매핑되어야하며, 이산 버튼(예: BTN_A, BTN_B, BTN_Y, BTN_X)의 경우 증가와 감소 변화량을 반드시 정의해주어야합니다.


모드 전환 (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 버튼 동시 누름


get_cmd() -> dict

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

Returns

  • cmd_vector (list[pair(double, double)]): 명령 벡터

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

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


is_connected() -> bool

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


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

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


flamingo_sdk.onnxpolicy

class flamingo_sdk.onnxpolicy.MLPPolicy(weightPath: str)

Parameters

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

Methods

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

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


class flamingo_sdk.onnxpolicy.LSTMPolicy(weightPath: str)

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 딕셔너리에 데이터를 추가합니다.


6.3 토크 제어

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


6.4 스케일 설정

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

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


7. SDK 업데이트

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


Last updated