로봇 스택 기동
스택은 기기에서 plem 으로 띄웁니다. 통합 사용자에게 필요한 것은 세 가지입니다.
- 어떤 선택이 내가 쓸 인터페이스를 바꾸는가
- 떴는지 어떻게 확인하는가
- 안 떴을 때 무엇을 보는가
기동 절차
plem 을 실행해 로봇 프로필을 고르고 기동합니다. 단일 로봇이든 여러 대든 같은 launch 파일 하나로 통일돼 있습니다. 기동 직전에 선택된 EtherCAT 마스터의 슬레이브를 조회하고, 결과가 0이면 스택을 시작하지 않습니다.
무엇이 내 인터페이스를 바꾸는가
plem 의 선택 | launch 인자 | 추가로 생기는 것 | 선행 조건 |
|---|---|---|---|
| MoveIt | moveit | plem/plan_trajectory | — |
| 충돌 회피 | enable_cumotion | 지원 모델에 cuMotion 계획 파이프라인 등록 — ROS 2 Humble(JetPack 6) 트레인 한정: Jazzy(JetPack 7) 장비에는 cuMotion 이 아직 프로비저닝되지 않았습니다. 지원 모델에서 이 옵션을 켜고 기동하면 cuMotion 플러그인을 찾지 못해 로봇 스택 기동이 실패합니다(사전 경고 없음) — 켜지 마세요 | MoveIt |
| 카메라·지각 | perception_stack | 지원 카메라의 토픽 — 캘리브레이션이 끝나 있어야 환경 지도(ESDF)까지 올라옴 | MoveIt · 지각 지원 카메라 |
| Teaching Pendant · Plem Lab | teaching_pendant · plem_lab | 웹 UI 브릿지 (ROS 2 통합에는 불필요) | — |
세 가지를 주의하세요.
MoveIt 이 꺼지면 cuMotion 과 카메라, 지각 노드가 아예 뜨지 않습니다. 카메라 옵션만 켜도 소용없습니다. 실제 환경 회피에는 MoveIt·충돌 회피·카메라·캘리브레이션이 모두 필요합니다.
COLLISION_AWARE 요청의 수락 여부는 goal 단계에서 결정되지 않습니다. 모델 지원과 파이프라인 상태는 수락 뒤에 검사되므로 goal 이 abort 될 수 있습니다. 결과까지 확인하세요.
저장된 선택이 없을 때 plem 은 MoveIt 켜짐·충돌 회피 꺼짐으로 시작하지만, launch 파일 자체의 기본값은 그 반대(moveit=false, enable_cumotion=true)입니다. plem 은 마지막 선택을 기억하므로, 직접 ros2 launch 로 띄우신다면 원하는 값을 명시하세요.
떴는지 확인하기
기동은 단번에 끝나지 않습니다. 로봇은 1초 간격으로 엇갈려 올라오고, 그 위의 계층이 차례로 붙습니다.
| 시점 | 올라오는 것 |
|---|---|
| 하드웨어 활성화 직후 | plem/set_mode · plem/control_command · status_broadcaster · rt_* |
| 약 3–4초 | 웹 UI 브릿지 (Pendant·Lab 을 켠 경우) |
| 약 5초 | 카메라·지각 노드, MoveIt |
| 지각 사용 시 | 기동 6초 뒤부터 환경 지도 서비스가 광고되기를 최대 60초 대기 후 MoveIt 기동 |
가장 확실한 신호는 plem/set_mode 액션이 응답하는 것입니다. 여기까지 왔으면 하드웨어 인터페이스가 활성화된 상태입니다. 클라이언트는 고정 시간을 기다리지 말고 wait_for_server 로 대기하세요.
안 뜰 때
| 증상 | 뜻 | 할 일 |
|---|---|---|
| 기동 전에 EtherCAT 슬레이브가 없다고 막힘 | 슬레이브 0 또는 상태 조회 실패 | 로봇 컨트롤 박스 전원과 EtherCAT 케이블을 확인하고 다시 기동 |
로그의 [EtherCATBus] Failed to request master. | 마스터를 잡지 못함 — 원인은 구분되지 않음 | 이전 스택이 완전히 내려갔는지 확인하고(§재기동) 다시 기동 |
| 지각이 "driver-only" 로 강등됐다는 안내 | 카메라 캘리브레이션 기록 없음 (실패가 아니라 축소 기동) | 그대로 쓰셔도 됩니다. 지각 기능이 필요하면 캘리브레이션 먼저 |
| 환경 지도 준비 실패로 종료 | 지각 스택이 제때 뜨지 못해 launch 전체가 멈춤 | 카메라 연결을 확인하고(문제 해결) 다시 기동 |
| MoveIt·웹 브릿지 관련 경고 후 계속 진행 | 해당 구성 요소만 빠지고 나머지는 정상 기동 | 웹 화면이 필요하면 스택을 내리고 다시 기동 |
재기동
이전 스택이 완전히 내려간 뒤에 다시 띄우세요. 아직 살아 있으면 EtherCAT 마스터를 잡지 못해 실패하고, 반쯤 뜬 스택이 같은 네임스페이스에 중복 노드를 남겨 이후 관측을 오염시킵니다. 정지에는 시간이 걸릴 수 있습니다. 카메라를 쓰는 구성은 특히 그렇습니다.
plem kill 은 최후 수단입니다정상 정지는 로봇에 BRAKED 를 요청한 뒤 프로세스를 내립니다(요청은 최선 노력이며 성공을 확인하지는 않습니다).
plem kill 은 그 요청조차 없이 기기 전체에서 매칭되는 프로세스를 종료하고 곧 강제 종료로 올립니다. 따로 띄워 두신 RViz·PlotJuggler 같은 도구도 함께 끊깁니다. 정상 정지가 듣지 않을 때만 쓰세요.
직접 기동할 때
plem 을 거치지 않고 ros2 launch 로 띄우신다면 네 가지를 챙기세요. 빠뜨린 값은 대부분 오류가 아니라 조용한 기본값으로 떨어집니다.
- 프로필 디렉터리:
robots/를 담고 있는 루트를 명시합니다(보통~/.plem). launch 기본값은 빈 값이라, 생략하거나robots/자체를 넘기면 내장 기본 프로필(그리퍼 없음·카메라 없음)로 떨어져 장착한 장비가 사라집니다. - 로봇 이름: 목록의 각 이름이 곧 네임스페이스가 됩니다.
- 로봇 시리얼: 로봇 목록과 같은 개수·순서로 지정합니다 — 시리얼이 없는 로봇은
,S2처럼 빈 슬롯을 자리로 남깁니다(개수가 다르면 기동 전에 오류). 등록 모델은 시리얼이 필수입니다: 기기별 관절 캘리브레이션 프로필(~/.plem/profiles/<시리얼>.json)이 오프셋의 정본이라, 생략하면 조용한 기본값이 아니라 드라이버가 명시적 오류로 조립을 거부합니다. - EtherCAT 마스터: 역시 같은 개수·순서로 지정합니다. 항목이 모자라면 오류 없이 그 로봇의 순번(0부터)으로 대체됩니다.