FlmainGO Python SDK [한국어]
1. 시작하기
1.1 SSH 접속
로봇의 전원을 켜면 Wi-Fi 핫스팟이 자동으로 활성화됩니다. 활성화된 Wi-Fi를 통해 로봇에 접속할 수 있습니다.
SSID
COCELO_ROBOT_XXXX
비밀번호
00000000
# 1) Wi-Fi 연결 (COCELO_ROBOT_XXXX 네트워크에 연결)
# 2) SSH 접속
ssh cocelo@XXXX # XXXX = Wi-Fi SSID와 동일한 태그
# 비밀번호: 000000001.2 로봇 움직여보기
조이스틱 연결
조이스틱의 중앙 홈버튼을 5초 이상 길게 누릅니다.
페어링이 완료될 때까지 대기합니다.
조이스틱이 연결되지 않으면 100% 완충 후 다시 시도하세요.
모터 원점 세팅
비상정지 버튼이 눌려져있지 않음을 확인하고 시도하세요.
터미널에서
a버튼을 눌러서 모터 상태를 얻습니다.a버튼을 누른 후 모든 모터의 상태가 정상적으로 "2"임을 확인하고 다음 스텝으로 넘어가세요.터미널에서
z버튼을 눌러서 모든 모터의 포지션을 원점으로 보내세요.z버튼을 누른 후 로봇이 서있는 자세(원점)으로 이동합니다.q버튼을 눌러서 모터의 원점 세팅 모드를 빠져나가세요.
반드시 q 버튼을 누른 후 로봇 깨우기/조종 모드로 진입하세요.
로봇 깨우기/조종
컨트롤러의 왼쪽 스틱으로 로봇 이동을 제어합니다.
종료:
Ctrl + C
종료 시 모터가 즉시 정지합니다. 반드시 손잡이를 잡고 로봇을 지지한 상태에서 종료하세요.
1.3 실행 로그 보기
cocelo log list
저장된 로그 파일 목록 보기
cocelo log show last
가장 최근 로그 보기
cocelo log show <파일명>
특정 로그 파일 보기
2. SDK 미리 보기
아래 예제는 SDK의 핵심 사용 흐름을 보여줍니다.
3. 패키지 구조
핵심 컴포넌트
Robot
로봇 인터페이스
Joystick
조이스틱 입력을 cmd 형태로 제공
Mode
정책(.onnx) + 관측/스케일/스택 설정
RL
네트워크 입력 state 구성 + 액션 선택
control_rate
제어 루프를 지정 주기로 실행
4. API 레퍼런스
Package Contents
flamingo_sdk
RobotJoystickModeModeConfigRLcontrol_rate
flamingo_sdk.onnxpolicy
MLPPolicyLSTMPolicy
Exceptions
RobotInitErrorRobotSetGainsErrorRobotEStopErrorModeConfigError
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)
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면 토크 제어 모드
estop(msg: str = "", verbose: bool = True) -> None
긴급 정지를 실행합니다.
Raises
RobotEStopError
get_gains() -> dict
현재 게인 설정을 반환합니다.
class flamingo_sdk.RL()
강화학습 정책을 관리하고, obs와 cmd를 신경망 입력 state로 구성하며, 액션을 선택합니다.
build_state()는 모드 설정(스택/스케일/관측 순서)에 따라 입력 벡터를 만들고, select_action()이 정책 추론을 수행합니다.
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 (선택)
Returns
list[float]: 1D state 벡터
select_action(state: list[float]) -> list[float]
정책을 실행하여 액션을 생성합니다.
class flamingo_sdk.Mode(mode_cfg: dict)
모드별 정책 설정을 정의합니다. (관측 스택/스케일/정책 파일 경로 포함)
build_state() 결과는 다음 형태입니다.
예: stack_size=3, stacked_obs_order=["dof_pos","dof_vel"], non_stacked_obs_order=["command"]
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: intstack_size: intstate_length: intaction_length: intpolicy_type: strpolicy_path: strstacked_obs_order: list[str]non_stacked_obs_order: list[str]action_scale: list[float]obs_scale: dictobs_lengths: dictcmd_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={})
조이스틱 입력을 처리하여 cmd를 반환합니다.
로봇 연결: 홈 버튼을 5초 이상 길게 누릅니다.
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 중 하나를 동시에 누릅니다.
⬆️ 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 버튼 동시 누름
긴급 정지(E-Stop) 시 모든 모터가 즉시 정지합니다.
get_cmd() -> dict
조이스틱 명령 및 상태를 반환합니다.
Returns
cmd_vector (list[pair(double, double)]): 명령 벡터mode_id (int | None): 현재 모드 IDestop (bool): E-Stop 입력 감지 여부
is_connected() -> bool
조이스틱 연결 상태를 확인합니다.
function flamingo_sdk.control_rate(robot: Robot, hz: float = 50.0)
flamingo_sdk.onnxpolicy
class flamingo_sdk.onnxpolicy.MLPPolicy(weightPath: str)
ONNX 기반 MLP 정책 추론기입니다.
Parameters
weightPath (str): ONNX 모델 파일 경로
Methods
inference(state: list[float]) -> list[float]
1-step 추론을 수행합니다. state는 반드시 1D여야 합니다.
class flamingo_sdk.onnxpolicy.LSTMPolicy(weightPath: str)
ONNX 기반 LSTM 정책(상태 보존) 추론기입니다.
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 딕셔너리에 데이터를 추가합니다.
extra observation은 반드시 1D list 또는 1D np.ndarray 형태여야 합니다.
6.3 토크 제어
위치/속도 제어 대신 토크 제어 모드를 사용합니다.
6.4 스케일 설정
관측값 및 액션에 스케일을 적용하는 방법입니다.
모든 요소에 동일한 스케일을 적용합니다.
요소별로 개별 스케일을 적용합니다. 벡터 길이는 해당 관측치 차원과 일치해야 합니다.
7. SDK 업데이트
인터넷 연결이 필요한 작업입니다. SSH 접속 후 아래 순서대로 진행하세요.
Last updated