← Work ExperienceCASE STUDY

01 / MULTI-ROBOT

두 대가 참여했는데,
왜 한 대만 전환됐을까?

화면 선택과 세션 참가 대상을 분리하고, 참가 목록·로봇 식별자를 기준으로 N대 확장을 고려한 구조를 개발했습니다.

Neuromeka 인턴 · 2025.12 ~ 2026.06

문제
선택한 한 대만 모드 전환
내가 바꾼 것
참가 목록·식별자 기반의 N대 확장 구조
확인
전체 조작·정지 경로와 기존 데이터 호환
문제 해결 과정 보기 ↓
세션 참가자의 소속을 수집부터 실행까지 연결
세션 참가자의 소속을 수집부터 실행까지 연결 — 기존 플랫폼에서 확장한 경계를 보여주는 구조도입니다. 화면 선택·세션 참여·로봇별 실행 대상을 구분합니다.
기존 플랫폼에서 확장한 경계를 보여주는 구조도입니다. 화면 선택·세션 참여·로봇별 실행 대상을 구분합니다. · 크게 보기 ↗

01 / Problem

로봇을 추가하는 것만으로는 부족했습니다.

독립된 제어기를 사용하는 Indy12 두 대를 하나의 세션에서 지원해야 했습니다. 기존 플랫폼에는 로봇을 여러 대 등록할 수 있는 부분이 있었지만, 실제 수집과 조작은 화면에서 선택한 한 대를 중심으로 동작했습니다.

두 대를 연결한 뒤 Collect에서 텔레오퍼레이션 모드로 전환했을 때, 선택된 로봇만 전환됐습니다. 저는 장비 연결보다 기존 기능이 무엇을 작업 대상으로 보고 있는지부터 확인했습니다.

02 / Investigation

처음 고친 곳만으로는 문제가 끝나지 않았습니다.

  1. 전환 요청의 대상을 확인

    Collect의 텔레오퍼레이션 진입 요청이 화면에서 선택된 로봇을 따라가고 있었습니다. 먼저 세션 전체를 대상으로 요청하도록 바꿨습니다.

  2. 반대 방향의 동작도 다시 확인

    진입 요청을 바꾼 뒤에도 idle 복귀에서는 화면의 단일 로봇 상태로 대상을 추정하고 있었습니다. Stop 역시 수집기의 단일 로봇 정보만 읽었습니다.

  3. 공통 가정을 찾아 수정 범위를 넓힘

    각 버튼을 따로 고치는 대신, “현재 화면 선택이 전체 작업을 대표한다”는 가정을 바꿔야 한다고 판단했습니다. 화면 선택과 실제 세션 참가 목록을 분리했습니다.

03 / Architecture

화면의 한 대와 작업의 두 대를 나눴습니다.

BEFORE

화면 선택이 작업 대상

선택한 로봇을 기준으로 모드를 전환하고 정지 대상을 찾음

AFTER

세션 참가 목록이 작업 대상

화면은 한 대를 보더라도 Collect의 전환·정지는 세션 전체에 요청

세션 참가 목록과 순서를 기준으로 대상을 정하고, 수집 모드 전환과 정지 요청에서 같은 기준을 사용하도록 수정했습니다. 전환 도중 한 로봇이 실패하면 이미 전환된 로봇을 idle로 되돌리는 처리도 넣었습니다.

데이터에서도 비슷한 문제가 있었습니다. 저장 파일에는 두 손의 값이 있었지만 수집 계획과 일부 메타데이터는 선택된 한 로봇의 손만 설명했습니다. 참가 로봇 전체의 장치 목록으로 계획을 만들고, 로봇별 식별자와 순서를 수집·학습 산출물·추론 출력까지 유지하도록 처리했습니다.

N대가 추가되어도 같은 처리 흐름을 쓰도록 설계했습니다.

두 대에 맞춘 호출을 하나 더 붙이는 대신, 참가 로봇 목록·로봇별 식별자·데이터 순서와 차원을 공통 기준으로 만들었습니다. 로봇 수가 늘어날 때도 이 기준으로 수집·학습·실행이 이어지도록 구성했습니다.

01 / 목록참가 로봇 전체에 제어 요청

화면에서 선택한 한 대와 실제 작업 참가자를 분리했습니다. 모드 전환·복귀·정지는 참가 목록을 따라 처리해, 로봇별 호출을 두 대로 고정하지 않았습니다.

02 / 소속로봇이 늘어나도 데이터 소속 유지

각 로봇과 장치의 식별자로 수집 계획과 저장 구조를 구성했습니다. 로봇이 추가되어도 상태·관절·그리퍼 데이터가 어느 로봇의 값인지 구분하도록 했습니다.

03 / 입출력저장한 순서와 차원으로 분배

학습에 사용할 key 순서와 차원을 산출물에 보존하고, 추론 결과도 같은 기준으로 나누어 소속 로봇에 전달했습니다. 실행 전에는 학습 산출물과 참가 로봇 구성의 일치 여부를 확인했습니다.

추가 로봇은 등록 정보와 참가 목록, 수집·학습 입출력 구성에 반영하도록 했습니다. 로봇이 늘어날 때마다 별도의 처리 흐름을 만드는 대신, 목록과 메타데이터를 기준으로 확장하는 방식입니다.

같은 크기의 배열도, 로봇 소속은 끝까지 유지
같은 크기의 배열도, 로봇 소속은 끝까지 유지 — 선택한 key 순서와 차원으로 데이터를 결합하고, 같은 기준으로 출력을 분해해 각 로봇으로 돌려보내는 흐름입니다.
선택한 key 순서와 차원으로 데이터를 결합하고, 같은 기준으로 출력을 분해해 각 로봇으로 돌려보내는 흐름입니다. · 크게 보기 ↗

04 / Validation

화면에서 보인 결과를 파일과 실제 동작까지 확인했습니다.

  1. 선택을 바꿔도 참가자는 유지되는가

    화면의 로봇을 바꿔도 수집 대상 두 대가 유지되는지, 세션 전체의 조작·정지 요청이 연결되는지 확인했습니다.

  2. 같은 로봇을 가리키는가

    수집 파일·계획·메타데이터의 로봇과 장치 목록을 대조하고, 학습 입력과 추론 출력의 소속·순서를 구분해 검사했습니다.

  3. 기존 기능도 계속 동작하는가

    기존 단일 로봇 데이터와 양팔 데이터의 해석 경로를 유지하고, 새 경로가 기존 의미를 덮어쓰지 않는지 확인했습니다.

독립 제어기 기반 로봇 두 대에서 모드 전환·정지와 데이터 소속·순서, 학습 입력과 추론 출력의 연결을 확인했습니다. 이 과정에서 참가 목록과 로봇별 메타데이터를 공통 기준으로 사용해, 이후 N대 확장에도 적용할 처리 구조를 정리했습니다.

05 / Takeaway

로봇 대수의 확장에서, 협업 범위의 확장까지