연결할 수 있다는 것과 실제 명령 범위는 다르다
M31.05는 작업 분할과 현재 산출물 인수를 다뤘다. 이번에는 그 산출물이 시뮬레이터 호스트에서 Pi노드로 넘어갈 때 바뀌는 조건을 확인한다. 네트워크가 연결되고 토픽이 보인다는 사실만으로 올바른 장치·제어 모드·단위/시간과 실제 동작이 검증된 것은 아니다.
기본 설계는 지원되는 GPU호스트에서 Isaac Sim을 실행하고, Linux/aarch64 Pi노드는 관측/명령 중계·제한된 처리/관측 역할을 맡는 것이다. 전체 시뮬레이터와 엣지 노드가 같은 프로그램/환경일 필요는 없다. Isaac Sim Requirements의 선택 릴리스 지원 하드웨어/드라이버를 확인한다. CPU가 aarch64라는 이유만으로 Pi가 전체 Isaac Sim 지원 대상이라고 결론 내리지 않는다.
이 단위의 Ubuntu24.04·ROS2Jazzy는 프로젝트의 목표 기준선이다. 실제 Pi기종/이미지·드라이버와 조합은 별도 확인해야 한다. 여기서는 설치/장치 실행을 하지 않으며, 아래 승인 기록도 가상 사례다.
같은 Python 버전이어도 native 패키지는 다를 수 있다
venv는 Python 패키지 환경을 분리하지만 CPU명령·운영체제 라이브러리·장치 드라이버까지 같은 것으로 만들지는 않는다. 호스트의 환경 폴더를 통째로 복사하고 Python3.12라는 숫자만 맞추어 실행 호환을 승인하지 않는다.
wheel은 배포 패키지 형식이고, native 확장이 있으면 인터프리터·ABI·플랫폼 태그를 확인한다. ABI는 바이너리 사이의 호출/자료 표현 등 호환 경계다. PyPA 호환 태그 명세는 Python·ABI·플랫폼을 구분한다.
예를 들어 cp312-cp312-manylinux_2_34_x86_64 태그의 native wheel을 Linux/aarch64 Pi대상으로 그대로 승인하면 안 된다. Python은 같아도 아키텍처가 다르다. py3-none-any 같은 순수 Python 범용 패키지와도 구별한다. 범용 태그라도 별도 native 의존성·시스템/장치 요구까지 자동으로 충족되는 것은 아니다.
모델 파일도 입력 shape/dtype·전처리/단위·출력 의미와 런타임/지원 연산자·CPU/가속기 조합을 기록한다. 같은 모델 이름이나 성공한 import만으로 대상의 지연·전력·메모리/장치 동작을 확인했다고 하지 않는다. M27의 실제 자원/지연 측정과 연결한다.
CMake에서는 빌드 호스트와 실행 대상을 나눈다
C/C++ 의존성이 있으면 빌드 호스트는 컴파일이 일어나는 컴퓨터이고 target은 산출물을 실행할 플랫폼이다. toolchain은 대상 코드 생성에 쓰는 컴파일러/링커 등의 조합이고 sysroot는 대상의 헤더/라이브러리를 찾는 기준 경로다. 언어 문법보다 이 경계가 AI/로봇 도구 설치에서 먼저 문제가 될 수 있다.
CMake toolchains 문서는 교차 빌드에서 대상 도구/플랫폼 정보를 지정하는 방법을 설명한다. 호스트의 라이브러리를 잘못 연결하거나 host용 바이너리를 Pi에 복사하지 않도록 target아키텍처·컴파일러/런타임·의존성/빌드 설정과 최종 산출물 지문을 남긴다.
교차 컴파일 성공은 대상 장치에서의 실행/기능 검사와 다르다. 반대로 ARM용 산출물을 x86호스트에서 직접 실행하지 못했다고 대상 실행 실패로 집계하지 않는다. 어떤 단계에서 무엇을 검증했는지 분리한다. 컨테이너를 써도 이미지의 대상 플랫폼·native 의존성과 장치/드라이버 접근을 확인한다.
같은 명령을 해석할 데이터와 시간 계약을 고정한다
연결 명세에는 robot/device ID·namespace·controller 모드와 명령 주체, 모델/보정 개정, 관절/도구 이름·축·단위/프레임, 메시지 shape·시각/시계·수신/처리/전송/관측을 적는다. namespace 분리는 이름 충돌을 줄여도 인증/물리 격리를 자동 보장하지 않는다. 다른 장치의 응답을 이름이 비슷하다고 현재 장치에 붙이지 않는다.
시뮬레이션 /clock은 reset/pause에 영향을 받을 수 있고 Pi의 단조 시각/벽시계와 같은 축이라고 가정할 수 없다. M14.03처럼 시계 ID/매핑·원본 stamp를 확인한다. 숫자가 둘 다200이라고 같은 시각으로 취급하지 않는다. 프레임/시계가 미확인이면 최신 상태로 꾸미지 않는다.
검토/검사 경로는 원본 로그 재생, 외부효과가 없는 명령 생성, 가상 대상 연결, 실제 대상의 관측 확인, 명시된 제한 동작을 구분한다. dry-run이라는 이름만 믿지 말고 실제 actuator 송신 경로가 닫혔는지 확인한다. 시뮬레이션 명령이 잘못된 endpoint로 나가거나 여러 명령자가 함께 쓰지 않는지도 현재 환경에서 확인해야 한다.
승인 기록은 정확한 변경과 대상 범위를 가리킨다
이번 가상 승인A1은 변경묶음H1·장치Pi1·로봇R1의 명시된 제한 동작과 사전 관문에만 한정돼 있다고 하자. H1/H2는 서로 다른 변경묶음을 뜻하는 합성 식별자이며 실제 SHA값이 아니다. 실제 manifest는 소스/모델·설정/보정·의존성/빌드/런타임과 산출물 지문을 연결한다.
승인 기록에는 검토자/역할·대상/범위·정확한 변경/근거·중단/복구와 관찰 책임을 남긴다. 이미 허용된 범위 안의 읽기/검토를 막연히 다시 묻는 것과, 범위 밖의 새 실물 동작을 요청하는 것은 다르다. 이 예에서 정확히H1만 허용했다면 H2에 A1을 자동 재사용할 수 없다. AI의 제안/자신감이나 “시뮬레이션 통과”가 사람/조직의 해당 범위 승인을 생성하지도 않는다.
변경묶음의 이름과 지문도 구분한다. H1이라는 표시는 같지만 실제 파일/환경이 달라졌다면 같은 검수 묶음이 아니다. manifest와 실제 산출물 바이트/대상 플랫폼을 함께 대조한다.
승인 범위 일치와 현재 실행 전제는 별도다. 환경 호환·올바른 대상/모드·단일 명령자·신선한 상태/입력·미해결 fault없음과 해당 단계의 관문이 갖춰져야 한다. 아래 시간은 기존 교육 계약대로 입력100ms·상태50ms까지 포함 경계로 유효하며 실제 장비의 보편 안전 기준은 아니다.
여섯 독립 사례를 서로 다른 이유로 판정한다
각 행은 독립적인 종이 사례다. A의 관문 완비도 실제 측정 결과가 아닌 제공 가정이다. 이 표는 실제 승인 발급/동작 허가를 수행하지 않는다.
| 사례 | 제공 조건 | 현재 판정 |
|---|---|---|
| A | H1/Pi1/R1·제한 범위 일치, 환경/관문 완비, 입력100ms·상태50ms | 제공 명세의 진입 조건 충족. 실제 실행/물리 검증은 미확인 |
| B | 다른 전제는 같지만 변경묶음H2 | A1의 정확한 변경 범위 불일치. 차이/검사/승인 범위 재검토 |
| C | 변경은H1이지만 대상로봇R2 | 대상 불일치. R1권한을 R2로 옮기지 않음 |
| D | H1/Pi1/R1이지만 상태51ms | 승인 범위와 별개로 현재 신선도 관문 미통과 |
| E | H1명칭이나 native산출물x86_64, Pi대상aarch64 | 환경/산출물 불일치. 이름만으로 호환 승인하지 않음 |
| F | 기존 범위가 시뮬레이션 전용인데 실제 actuator연결 추가 | 기존 권한 범위 밖. 구체적 변경/대상·관문/검토가 더 필요 |
같은H1로 돌아가도 환경/물리 상태가 달라졌다면 전제가 같지 않다. 반대로 이미 정확히 허용된 범위가 그대로이고 필요한 관문이 확인됐다면 작업을 쪼갰다는 이유만으로 같은 허가를 반복 요청할 필요는 없다. 실제 권한의 범위/조건을 읽고 적용한다.
0명령·롤백과 실제 복구를 구분한다
실행 중 중단 요청이나0속도 전송/ack를 받았다고 실제 정지·힘0·물체 유지가 관측된 것은 아니다. 마지막 명령·제어기 상태·실제 속도/힘/물체·접촉/수납과 관측의 신선도를 나눈다. 상태가 없으면 미확인으로 남기고 새 동작을 자동 이어 붙이지 않는다.
롤백(rollback)은 이전 소프트웨어/설정으로 되돌리는 조치다. 코드가H1로 돌아와도 이미 이동한 물체나 로봇 자세·남은 명령 큐와 물리 상태는 자동 복원되지 않는다. 원 시도의 요청ID/소스/상태·중단/실패·산출물과 현재 관측을 보존하고, 재개에 필요한 대상/모드·상태/정렬·남은 요청/관문과 승인 조건을 다시 대조한다.
기존 6.4 배포 감독기는 이 경계를 더 큰 실행 단계로 연결하는 보충 자료다. 이번 호환/승인표 분석을 실제 Isaac Sim/Pi 연결·안전 배포 실증으로 제출하지 않는다. 다음 M34.01에서는 현재 상태와 동기화·관제 표시를 실행 근거와 연결한다.