Chapter 7: 첫 동작 런북 — 시뮬레이션에서 실제 로봇까지
개요
First motion은 software가 launch된 것을 축하하는 demo가 아니라 commissioning이다. “움직일 수 있는가?”보다 “이미 모은 evidence가 정당화하는 가장 작은 physical authority 증가는 무엇인가?”를 묻는다. Static model은 visualization, fake hardware는 interface test, physics simulation은 bounded trajectory rehearsal을 정당화한다. Read-only hardware state로 real model과 clock을 확인한 뒤에야 supervised low-energy joint increment를 고려한다.
이 장은 description/frame, mock, simulation, communication, tiny joint, Cartesian, gripper와 pick/place를 signed gate로 연결한다. Log에서 자주 합치는 command accepted, motion observed, task succeeded를 나눈다. Acceptance는 interface path, observed motion은 physical response, task success는 geometry·perception·tool·object·process KPI까지 증명한다.
Universal real-robot command는 제공하지 않는다. UR, Franka, tool, firmware, controller mode와 local assessment가 다르다. Qualified person이 stop/enable authority를 가진다. 상태는 2026-07-14 기준이며, teleoperation과 learned policy는 이 gate 뒤 (Chapter 8)에서 다룬다.
이 장을 읽고 나면... - static description에서 supervised pick/place까지 go/no-go ladder를 실행할 수 있다. - interface acceptance, physical motion, controller completion, task success를 구분할 수 있다. - E-stop, protective stop, cancel, rollback과 recovery를 fault를 숨기지 않고 시험할 수 있다. - frame, time, network, ownership, tracking, payload와 gripper failure를 분리할 수 있다. - Codex에 inspection/fake test를 요청하되 hardware/safety authority를 주지 않을 수 있다.
2. G0 — description, frame, limit와 dry run
Power off에서 robot, controller, hand, adapter, finger, wrist sensor와 cable을 manifest와 맞춘다. Fastener, base mount, strain relief, work surface, drop zone, guard, E-stop와 clearance를 확인한다. Payload/CoM에는 installed tool과 object가 포함돼야 한다.
Visualization에서 joint axis와 positive direction, named home, joint/velocity limit, self-collision, mesh, TCP, base/world, camera, fixture를 본다. Representative task pose를 execution 없이 sweep한다. Visual mesh가 맞아도 collision body가 누락되거나 너무 클 수 있다.
Human procedure도 dry-run한다. Intent announce, cell clear, mode select, enable, command, cancel, stop, recover와 log 순서를 연습한다. 누구나 no-go를 외칠 수 있다. Power loss에서 gripper가 object를 놓는지 유지하는지도 알아야 한다.
G0 no-go checklist
- Exact model/firmware가 description/driver tuple과 다르다.
- Joint order, zero, axis, sign 근거가 없다.
- TCP와 payload가 catalog default다.
- Table, fixture, cable, finger, camera 또는 object가 collision review에 없다.
- Initial speed/force/workspace envelope가 승인되지 않았다.
- E-stop/protective-stop/reset을 observer가 수행할 수 없다.
- Safe pose와 manual recovery route가 없다.
3. G1–G2 — fake hardware와 physics simulation
UR mock hardware와 scaled joint controller는 drive enable 전에 launch, model, controller와 MoveIt test를 가능하게 한다 [1] [3]. Mock은 joint name, ownership, action, feedback, cancel, parameter와 planning integration을 증명한다. Dynamics, latency, scaling, payload와 protective stop은 증명하지 않는다.
Stale state, missing TF, invalid start, over-limit joint, collision, inactive controller, duplicate owner, cancel, tolerance violation과 restart를 의도적으로 시험한다. Expected result는 refusal 또는 defined safe state다. Happy path만 있는 test는 incomplete다.
Physics simulation에는 gravity, tool mass, object, table과 conservative contact를 넣고 hardware용 short trajectory를 그대로 replay한다. Clearance, derivative, tracking, object drop, collision과 timeout을 본다.
Real-time factor 0.5에서 120 Hz simulated physics는 ROS tool에 약 60 Hz로 보이므로 simulation time과 wall time을 따로 기록해야 한다 [15]. Simulation이 느리면 120 Hz 설정은 wall second당 120 update가 아니다. Timeout, topic rate와 bag analysis에 clock domain을 쓴다.
| Test | Mock 증명 | Physics 추가 | 여전히 모르는 것 |
|---|---|---|---|
| Joint goal | interface/owner/result | model direction/dynamics | real sign/friction/delay |
| Cartesian | TF/MoveIt/controller | collision/tracking | calibration/clearance |
| Gripper | command/state schema | contact approximation | force/pinch/surface |
| Cancel/fault | state machine | simulated stop | vendor protective behavior |
4. G3 — communication과 read-only real state
Motion disabled 또는 vendor-approved idle에서 연결한다. Serial, firmware, mode, safety, remote/local, payload와 tool을 확인한다. 처음 network test에는 motion command가 route되지 않아야 하고 unknown publisher를 찾는다.
UR driver guidance는 external control에 direct PC-to-controller Ethernet과 low-latency 또는 PREEMPT_RT kernel을 권고한다 [4]. 이는 measured latency와 safety control을 대신하지 않는다. Route, NIC, jitter, loss, update diagnostics와 competing traffic을 기록한다. Franka에는 UR assumption이 아니라 자체 host/network/libfranka tuple을 쓴다 [6].
Successful connection은 motion disabled 상태에서 coherent joint state, TF, controller state, timestamp와 safety state를 먼저 증명해야 한다 [11] [8] [1]. Displayed joint와 physical pose를 비교하고 TF authority, tool frame, monotonic stamp, freshness, controller claim과 fault를 본다. 10분 idle log로 drift와 missed cycle을 찾는다.
Duplicate IP/TF, unknown publisher, wrong sign/order, stale/jumping time, version mismatch, unknown safety state, payload/TCP mismatch, unexpected claim, unstable link, missing observer 또는 unresolved fault가 있으면 no-go다. “작게 움직여 진단”하지 않는다.
5. G4 — enabled low-energy mode와 tiny joint move
Enable 전 사람과 loose object를 치우고 fastener/cable을 확인한다. Approved reduced mode와 더 엄격한 software workspace/speed/acceleration/force limit을 적용한다. Operator는 joint, direction, maximum delta, duration, stop condition과 recovery pose를 말한다.
첫 command는 physical stop access를 유지하며 reduced workspace와 speed envelope 안의 작고 알려진 joint increment여야 한다 [2] [5] [18]. Supervision과 enabling은 local assessment에 따른다. Clearance가 큰 joint 하나를 고르고 positive/negative direction을 separate attempt로 시험한다.
Execution은 action acceptance를 completion으로 보지 말고 tolerance, missed cycle, speed scaling과 protective-stop state를 monitor해야 한다 [9] [10] [3]. Goal accepted, first movement, final state, result, joint error, scaling, timing과 fault를 기록한다.
| 결과 | 의미 | Evidence | 실패 예 |
|---|---|---|---|
| Command accepted | server/controller가 goal 수락 | goal ID/stamp | robot paused |
| Motion observed | expected direction joint change | encoder+observer | wrong distance |
| Controller completed | tolerance/result success | result/error | TCP calibration 오류 |
| Task succeeded | physical KPI 충족 | independent measurement | object slip |
작은 motion을 반복해 sign, timing, tracking과 return이 일정한지 본다. Amplitude와 speed를 동시에 높이지 않는다. 한 번에 변수 하나만 promote한다.
그림 7.2 — Command·result·stop authority와 recovery evidence의 경계. Stop 명칭과 reset path는 platform마다 다르며 cancel은 safety stop이 아니다. 원본 개념도.
6. G5 — joint trajectory와 Cartesian motion
이미 방문한 영역에서 짧은 multi-point joint trajectory를 실행한다. Timestamp, delta, tolerance, scaling, cancel과 safe pose return을 본다. Cartesian goal은 validated joint region과 가까운 IK를 고르고, 직선 intuition과 planned path가 다를 수 있음을 기억한다.
Stale 또는 wrong frame으로 transform된 Cartesian goal은 geometrically valid하면서 physically wrong일 수 있다 [11] [12]. Planner는 틀린 위치로 collision-free path를 만들 수 있다. Target frame/stamp, transform chain/age, calibration, IK, scene hash, clearance와 measured TCP를 저장한다. Frame 오류를 magic offset으로 수리하지 않는다.
Free-space와 큰 margin에서 translation/orientation을 독립 측정한다. Table approach 전 cancel을 시험한다. 그 뒤 approved speed/force envelope의 guarded approach를 쓴다. Position plan은 contact regulation이 아니다.
| 증상 | 먼저 확인 | 원인 | 금지 shortcut |
|---|---|---|---|
| consistent wrong place | TCP/base/target TF | stale calibration | magic offset |
| IK elbow flip | seed/posture | redundancy branch | speed로 통과 |
| plan success, abort | state/tolerance/scaling | drift/timing | tolerance 확대 |
| RViz clear, real tool close | collision/tool model | missing geometry | 계속 실행 |
| Cartesian stall | singularity/collision scale | local margin | scale disable |
7. G5b — gripper를 arm과 별도 commissioning한다
Arm을 넓고 안정된 pose에 두고 end-effector만 시험한다. Finger, fastener, stroke, direction, state, timeout, fault/reset과 power-loss behavior를 확인한다. Real specimen 전 soft sacrificial object를 쓴다.
Gripper commissioning은 finger, object, force, stroke, collision과 pinch zone을 arm motion과 별도로 확인해야 한다 [13] [14] [18]. Configured force는 measured fingertip force와 같지 않을 수 있고 long finger는 leverage, TCP, collision과 load를 바꾼다. Operator hand와 fixture pinch zone을 표시한다.
Empty open/close, partial stroke, soft object, representative object, hold, validated arm 뒤 lift, controlled release 순으로 간다. Commanded/observed width, current/force proxy, object/fingertip revision, detection, fault, slip, damage와 release를 기록한다. Drop zone을 정한다.
8. G6 — 첫 pick/place
크고 가볍고 깨지지 않는 object 하나와 여유 큰 두 zone을 쓴다. 처음에는 perception 대신 fixed pose를 쓴다. Home, pre-grasp, guarded approach, close, grasp confirm, vertical retreat, transfer, lower, release, retreat, home 순서다. Transition마다 timeout, observable condition, cancel과 rollback이 있다.
Gripper close가 grasp success는 아니다. Width/current/tactile과 observation으로 retention을 확인한다. Placement action success도 target 안 object를 뜻하지 않으므로 independent KPI를 쓴다. Object가 없으면 unknown location에서 close를 auto-repeat하지 않는다.
| Phase | Success | Stop | Recovery |
|---|---|---|---|
| Pre-grasp | pose/clearance valid | scene/TF change | current state replan |
| Approach | expected TCP | contact/scaling | approved retreat |
| Close | object evidence | pinch/fault/empty | defined open condition |
| Lift | retained | slip/load/fault | defined surface로 lower |
| Place | target/released | stuck/unstable | hold, human decision |
| Retreat | clear/known state | object follows | stop, no auto-repeat |
9. Stop, recovery, logging과 go/no-go
E-stop, protective stop, action cancel, controller abort와 application pause는 다르다. Drive energy, hold, manual acknowledgment, goal preservation을 표로 만든다. Reflexively reset하지 않는다. State 보존, hazard 확인, cause 제거, tool/object/cell inspection 뒤 vendor/local procedure를 따른다.
Unexpected event마다 새 attempt ID를 만든다. Relaunch로 log를 덮지 말고 preceding command, controller/safety/fault, joint/TF/time, scaling, update, payload/tool, operator action, observation과 recovery decision을 저장한다.
| 결정 | GO | NO-GO |
|---|---|---|
| amplitude 증가 | repeated tracking within bound | unexplained error/stop |
| speed 증가 | current range stable | timing/scaling unknown |
| Cartesian 추가 | joint/TF independently valid | calibration uncertain |
| object 추가 | empty arm/gripper pass | pinch/drop unknown |
| unattended repeat | first-motion scope 아님 | observer 필요 |
Learned-policy rollout은 description과 driver가 맞는지 시험하는 수단이 아니라 deterministic motion/recovery gate 뒤에 위치한다 [16] [17] [1]. Joint, Cartesian, gripper, stop과 recovery를 먼저 고정한다. Policy는 observation/action distribution과 model failure를 추가하므로 sign/frame/controller defect를 숨기면 안 된다.
그림 7.3 — 안전한 인간-로봇 상호작용 방법의 연구 분류. 출처: Lasota, Fong, and Shah, 2017, Figure 1.1.
10. Troubleshooting
| 증상 | Layer | Evidence | Safe next test |
|---|---|---|---|
| connected/no motion | mode/owner | safety, remote, claim | read-only state diagram |
| accepted/paused | scaling/vendor | scaling/pendant | approved idle test |
| wrong joint | description | order/sign/feedback | drives-off correction |
| first jump | start/time | first point/state age | fake replay |
| stop at pose | payload/cable | config/inspection | reduced no-object path |
| Cartesian offset | TF/calibration | age/measured TCP | offline recalibration |
| false grasp | gripper/object | width/current/video | empty/soft tests |
| restart replay | recovery | goal/restart log | fake에서 auto resume 제거 |
11. Gate review를 실제로 운영하는 법
Gate review는 evidence가 attempt 중 준비됐다면 15분 안에 끝나야 한다. Operator는 manifest, 현재 signed gate와 늘리려는 physical authority를 제시한다. Recorder는 required signal과 acceptance–motion–controller–task timeline을 보여 준다. Observer는 software가 잡지 못한 소리, vibration, cable movement, object movement, 사람이 stop에 접근할 수 있었는지를 보고한다. Owner는 promote, 동일 조건 repeat, rollback, block 중 하나를 고른다. “Unexplained anomaly가 있지만 promote”는 선택지에 없다.
사례 1 — 성공했지만 예상보다 두 배 느린 joint motion
Action이 accepted되고 expected direction으로 움직여 success를 반환했어도 wall time이 두 배면 task result만으로 G4를 promote하지 않는다. Speed scaling, safety mode, trajectory timestamps, update missed cycle과 network timing이 차이를 설명해야 한다. 필요한 log를 추가해 동일 command를 repeat한다. Observed time에 맞추려고 duration을 절반으로 줄이면 원인을 숨기고 acceleration 요구를 키울 수 있다.
Review artifact에는 nominal duration, first-motion latency, actual duration, scaling min/mean, maximum joint error, update period percentile, vendor state와 observer note를 함께 둔다. 원인이 approved reduced scaling이고 behavior가 반복되면 그 조건을 baseline으로 기록한다. 원인이 unknown이면 speed를 올리지 않는다.
사례 2 — 세 번 같은 곳에 갔지만 TCP가 12 mm 어긋남
Repeatability는 좋지만 accuracy가 틀린 경우다. G5를 hold하고 TCP, base, camera/fixture transform과 calibration revision을 비교한다. Joint endpoint와 FK가 일치하면 controller tracking보다 frame/tool calibration을 우선 본다. Independent measurement 없이 planner success만 보고 “원래 이런 offset”이라고 판단하지 않는다.
Task-specific magic offset은 한 pose에서 증상을 숨기고 다른 orientation에서 error를 키운다. Recalibration 후 같은 goal과 scene hash로 repeat해 offset이 줄었는지 확인한다. Configuration ID를 바꿔 이전 log와 섞이지 않게 한다.
사례 3 — object lift 중 protective stop
마지막 signed empty-tool joint gate로 rollback한다. Object, payload/CoM config, cable posture, scaling, tracking error와 vendor fault를 보존하고 reset 전에 tool, fixture와 drop zone을 inspect한다. Cause가 과소 설정된 payload인지, cable snag인지, collision threshold인지, 실제 충돌인지 evidence로 나눈다. Cause와 recovery가 입증되지 않으면 reset이 정상이어도 object motion을 block한다.
E-stop이나 protective stop을 “한 번 발생한 nuisance”로 분류하지 않는다. Stop function이 작동한 것은 좋은데, 왜 요구됐는지를 모르는 것은 나쁜 상태다. Recovery 후에는 새 attempt ID와 preflight가 필요하고 interrupted goal을 자동 resume하지 않는다.
| Review 결정 | 조건 | 다음 attempt |
|---|---|---|
| Promote | threshold 모두 통과, unexplained observation 없음 | 변수 하나만 증가 |
| Repeat unchanged | signal 부족, 새 authority 불필요 | 같은 command, logging 추가 |
| Roll back | model/config/tool 변경 또는 anomaly | 이전 signed gate |
| Block | safety/owner/frame/fault/recovery unknown | non-motion investigation |
Daily commissioning board
하루 시작에는 현재 gate, known-good manifest, unresolved blocker, approved object와 maximum envelope를 board에 쓴다. Attempt가 끝날 때 result와 next decision을 갱신한다. 교대하거나 다른 연구자가 terminal을 잡아도 memory에 의존하지 않는다. 하루 끝에는 robot을 named safe state에 두고 power/network state, object/tool 위치, open fault, next owner를 handoff한다.
이 board는 bureaucratic overhead가 아니라 accidental authority escalation을 막는다. 전날 G5까지 갔어도 tool을 교체하거나 firmware, calibration, controller config가 바뀌면 영향받는 gate로 rollback한다. Camera만 바뀌면 joint G4는 유지될 수 있지만 perception-based Cartesian/pick gate는 다시 검증한다. 무엇이 바뀌었는지와 어느 invariant를 깨는지를 기준으로 rollback depth를 정한다.
12. Bounded Codex prompt
Manifest, description, MoveIt/ros2_control config, launch와 공식 manual을 read-only로
감사하라. Hardware에 접속하거나 수정하지 말라. G0–G6 gate마다 prerequisite,
observation, pass evidence, stop, rollback, human owner를 만들고 unsupported value는
UNKNOWN으로 두라. Real motion command나 limit bypass를 쓰지 말라.
Fake/simulator에서 joint sign, state freshness, TF age, collision, ownership, action
accept/feedback/cancel/abort, stale command와 restart만 test하라. Real IP/plugin/enable,
limit change, auto retry는 금지한다. Failure가 재현되고 artifact가 reviewable하면 완료다.
Offline log failure를 description/frame, network/time, ownership, trajectory/tolerance,
vendor mode/scaling, payload/cable, gripper, safety/recovery로 분류하라. Fact, missing
evidence, non-motion falsification, go/no-go와 human approver를 반환하라. Reset/bypass 금지.
Codex는 checklist/test를 준비할 수 있지만 gate sign, physical clearance observation, protective-stop reset, motion authorization을 할 수 없다 [19].
13. 근거 등급, 논쟁점과 한계
Driver, controller, gripper와 simulator는 공식 manual/documentation을 썼다. TF, control과 risk는 primary paper/standard를 썼다. Vendor instruction은 product interface의 근거이지 assembled application safety의 independent proof가 아니다.
Simulator success와 motion authorization은 평균낼 논쟁이 아니다. Simulation은 repeatable software behavior와 collision을 보여 주지만 real mount, payload, cable, safety state와 human procedure를 검증하지 않는다. Authorization은 signed real-cell gate에 있다.
Action acceptance도 safe completion과 다르다. Acceptance는 server가 goal을 받았다는 뜻이고 controller completion은 tolerance 기준이다. Task success에는 independent physical KPI가 필요하다. 세 결과를 따로 보존한다.
한계: version은 2026-07-14 이후 바뀐다. Manual은 custom tool 전체를 다루지 않는다. Local law/review는 다르다. 모든 cell에 안전한 generic speed/force는 없다. 이 tutorial은 standard, vendor training과 qualified assessment를 대체하지 않는다.
제조 셀 적용 체크포인트
UR5e+2F tray transfer에서는 object 전 empty-tool path로 G0–G5를 sign한다. Tool load, TCP, controller, scaling과 fixture scene을 pin하고 first pick은 fixed object pose를 쓴다. attempt_id, manifest_hash, gate, goal_id, accept, motion_start, controller_result, task_result, joint/TF age, error/tolerance, scaling, safety/fault, gripper, object, observer, recovery를 기록한다.
| Owner | Sign-off |
|---|---|
| Robot | identity, firmware, mode, recovery |
| Mechanical | mount, load, cable, finger, fixture |
| Software | tuple, graph, owner, log, rollback |
| Controls | limit, trajectory, tolerance, timing |
| Safety | assessment, stop, observer, recovery |
| Task | independent pick/place KPI |
다음에 배울 것
Deterministic first-motion ladder가 완성됐다. Chapter 8에서는 leader–follower teleoperation과 첫 learned policy를 추가한다. Operator tracking, retargeting, stale-input watchdog, dataset quality와 policy uncertainty가 새로 생기며 이 장의 frame, controller, stop과 logging gate를 그대로 상속한다.
Joint move, Cartesian move, gripper cycle, cancel, protective recovery와 simple pick/place가 accept/motion/controller/task 결과로 나뉘어 반복되기 전에는 넘어가지 않는다.
주석이 있는 연구 경로
아래 자료는 재현 가능한 첫 learning pipeline를 더 깊이 확인하기 위한 경로다. 성공률을 빌려오는 목록이 아니라, 어떤 가정·interface·실험을 원문에서 비교해야 하는지에 따라 묶었다. 각 결과는 해당 platform과 protocol에 한정해 읽는다.
| 경로 | 연결된 primary source | 읽을 때의 질문 |
|---|---|---|
| 기초와 정의 | RT-1: Robotics Transformer for Real-World Control at Scale; DROID: A Large-Scale In-The-Wild Robot Manipulation Dataset; pi0: A Vision-Language-Action Flow Model for General Robot Control; TRANSIC: Sim-to-Real Policy Transfer by Learning from Online Correction | 용어와 system boundary를 원 논문의 model·assumption으로 확인한다. |
| 구현과 측정 | OpenVLA: An Open-Source Vision-Language-Action Model; EgoMimic: Scaling Imitation Learning via Egocentric Video; Open X-Embodiment: Robotic Learning Datasets and RT-X Models | hardware, dataset, controller와 metric이 이 장의 workflow에 실제로 대응하는지 확인한다. |
| 반례와 확장 | Octo: An Open-Source Generalist Robot Policy; SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics; Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo | 다른 embodiment와 task에서 무엇이 깨지는지 비교하고 universal threshold로 일반화하지 않는다. |
참고문헌
- Universal Robots (2026a). UR Driver Startup and Mock Hardware. Official documentation.
- Universal Robots (2026b). UR5e User Manual. Official manual.
- Universal Robots (2026c). Controllers and Speed Scaling. Official documentation.
- Universal Robots (2026d). Driver Installation Guidance. Official documentation.
- Franka Robotics (2025a). Franka Research 3 Product Manual. Official manual.
- Franka Robotics (2026b). libfranka Changelog. Official history.
- ros-controls (2026a). gz_ros2_control. Official docs.
- ros-controls (2026b). ros2_control Architecture. Official docs.
- ros-controls (2026c). Joint Trajectory Controller. Official docs.
- ros-controls (2026d). Controller Manager. Official docs.
- Foote, T. (2013). tf. DOI: 10.1109/TePRA.2013.6556373.
- MoveIt (2025). move_group Architecture. Official docs.
- Robotiq (2026). 2F Instruction Manual. Official manual.
- Franka Robotics (2026). Franka Hand Manual. Official manual.
- NVIDIA (2026). Isaac Sim ROS 2 FAQ. Official docs.
- Hugging Face (2026). LeRobot Policy Inference. Official docs.
- ISO (2010). ISO 12100 Risk Assessment. International Standard.
- ISO (2025). ISO 10218-2:2025. International Standard.
- OpenAI (2026). Codex Best Practices. Official guidance.