목표를 푸는 것과 움직임을 승인하는 것은 다른 질문이다
MoveIt 2는 로봇 모델·현재 상태와 환경을 바탕으로 기구학/계획/실행 구성 요소를 연결한다. IK는 원하는 TCP 자세를 만드는 관절값을 구하는 계산이다. 해가 없거나 여러 개일 수 있고, 얻은 해가 관절 범위/충돌/과업 제약을 만족하는지는 추가 확인이 필요하다. 역기구학이 수치적으로 수렴했다는 사실만으로 시작부터 목표까지의 움직임을 승인할 수 없다.
로봇 상태는 관절 이름별 위치와 관련 변환 등을 묶은 정보다. 관절 이름/순서·단위와 취득 시각이 필요하다. 회전 관절 위치는 rad, 직선 관절은 m로 다룬다. 목표를 계산할 때 현재 관절값을 seed로 쓰더라도 그 값이 오래됐거나 다른 로봇의 값이면 의도한 자세 근처의 해를 기대할 근거가 약해진다. 관측이 없는 상태를 단순히 0으로 채워 현재 상태라고 표시하지 않는다.
Planning Scene은 로봇 상태와 주변 장애물·부착 물체, 충돌 허용 설정 등을 담는 계획의 문맥이다. URDF의 구조/충돌 형상과 SRDF의 그룹 등 의미 설정, 관절 제한·IK/계획 설정도 판정에 영향을 준다. MoveIt 공식 Planning Scene 설명은 충돌 검사와 제약 검사를 구분하고 현재 scene을 유지하는 monitor를 설명한다. 이 자료는 Rolling 문서이므로 Jazzy의 구체 API/기본값은 해당 버전으로 별도 확인한다. 여기서는 버전 공통 개념과 합성 로그를 다룬다.
scene에 없으면 검사도 물체를 알 수 없다
카메라에서 상자를 봤어도 scene에 반영하지 않았다면 계획기가 자동으로 그 상자를 피해 간다고 할 수 없다. 장애물의 frame/시각과 위치·크기/충돌 형상을 맞춰 반영해야 한다. 잡은 물체를 팔에 부착된 물체로 등록할 때도 어느 링크에 고정되었는지, 어떤 접촉을 허용하는지 기록한다. 실제 파지가 확인되지 않았는데 부착 등록만으로 물체가 따라온다고 판단하지 않는다.
그림 M19.02-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
합성 scene S7은 관절 상태/장애물을 t=10.00 s 기준으로 담고 있지만 현재는 10.30 s이며 상자가 움직일 수 있다고 하자. 300 ms가 무조건 금지되거나 허용되는 보편 기준은 없다. 움직임 속도·관측/반영 지연과 작업의 여유에 맞춘 신선도 정책이 필요하다. 정책이 없거나 상자 움직임을 확인하지 못했다면 '최신 scene'이라는 이름만으로 승인하지 않는다. scene 버전과 실제 관측 시각을 함께 남긴다.
ACM(Allowed Collision Matrix)은 특정 링크/물체 쌍의 충돌을 검사에서 허용하도록 정하는 설정이다. 손가락과 잡을 물체의 의도한 접촉을 표현할 수 있지만, 충돌 판정을 없애는 것이 물리적 간섭을 없애는 것은 아니다. '충돌 오류가 나므로 모든 쌍 허용'은 결함을 숨긴다. 허용할 쌍/접촉 단계와 이유를 최소 범위로 기록하고, 테이블/팔 링크까지 무차별 허용하지 않는다.
두 끝점 사이에도 로봇은 존재한다
상태 공간은 가능한 관절값들의 집합이다. 관절 두 개라면 상태 q=(q₁,q₂)는 두 수의 조합이고, 경로는 시작과 목표를 잇는 연속적인 상태 변화다. 같은 TCP 위치에 도달하는 IK 분기가 여러 개면 중간 팔 자세와 충돌도 달라질 수 있다. 끝점만 검사해서는 경로 전체를 확인할 수 없다.
원리를 보이는 1관절 합성 모형을 쓰자. q는 rad이며 범위는 0≤q≤1이고, scene이 금지한다고 지정한 구간은 0.45≤q≤0.55다. q=0과 q=1은 각각 끝점 검사에 통과하지만 직선 연결 q(s)=s, 0≤s≤1은 q=0.5를 지나므로 유효하지 않다. s는 시작부터 목표까지의 무차원 진행 비율이다. 실제 팔의 충돌은 형상과 모든 링크로 계산하며 이 금지 구간은 교육용 입력일 뿐이다.
검사 표가 q=0/0.25/0.5/0.75/1이면 중간 0.5에서 실패를 발견한다. 반면 0/0.4/0.6/1만 검사하면 표본은 통과해도 사이의 금지 구간을 놓친다. 샘플링 해상도/충돌 검사의 방식과 모형 근거를 남겨야 하는 이유다. 이 1차원 모형에서는 0에서 1로 연속 이동하며 구간을 건너뛸 우회가 없다. 실제 다관절 문제는 다른 경로/IK 분기·접근 전략을 찾거나 목표를 바꾸어야 할 수 있다. 속도만 낮추는 것은 기하학적 충돌을 없애지 않는다.
경로에 시간을 붙이면 새로운 검사가 필요하다
경로가 위치들의 연결이라면 궤적은 각 시각의 위치/속도 등을 정한다. 시간 매개화는 위치 경로에 시간과 동적 제한을 반영하는 단계다. 관절 q의 두 시각 t_i/t_{i+1} 사이 평균 속도는 Δq/Δt이며 Δt가 0이면 이 계산은 유효하지 않다. 합성 궤적의 (t,q)가 (0,0)/(0.5,0.6)/(1.0,1.0), 단위가 s/rad라면 평균 속도는 1.2/0.8 rad/s다. 최대 속도 1 rad/s라는 입력 제한에 첫 구간이 어긋난다.
위치 경로가 따로 유효하다는 전제에서 각 구간의 시간 하한은 |Δq|/v_max이므로 0.6/0.4 s다. 이는 속도만 본 하한이다. 그 시간으로 바꾸었다고 가속도/jerk·시작/끝 속도까지 충족한 부드러운 궤적을 완성한 것은 아니다. 실제 시간 매개화나 평활화가 위치 표본을 바꾸면 충돌 검토도 다시 필요할 수 있다. MoveIt의 시간 매개화 자료를 통해 위치 경로와 후처리 역할을 연결한다. 여기의 속도 예는 앞의 금지 구간을 해결했다는 예가 아니라 독립적인 시간 검사다.
계획 결과와 실행 결과를 별도 기록한다
plan 성공은 사용한 모델/scene/설정에서 계획 결과를 얻었다는 뜻이다. 실행 전에는 scene 변경, 실제 시작 관절값과 계획 시작값의 차이, 이름/단위와 제어기 인터페이스를 확인한다. 계획 q₀=0인데 현재 관측 q=0.1 rad이고 합성 허용 차이가 0.02 rad라면 시작 차이 0.1>0.02로 보류한다. 앞에 갑작스러운 연결 구간을 자동으로 붙였다고 생각하지 않는다.
MoveIt 구성 개념의 실행 연결은 별도 제어기를 필요로 한다. Jazzy의 FollowJointTrajectory action은 목표/경로 허용 오차와 결과 코드를 제공한다. 목표 수락, 실행 진행, 최종 결과를 구분하고 실제/목표 관절값·오차/시각을 기록한다. 제어기 결과가 성공이어도 물체를 잡아 올렸는지와 놓은 위치가 맞는지는 별도 관측으로 확인한다. 통신 중단/오차 초과를 성공으로 덮거나 무조건 재전송하지 않는다.
기존 3.3 DLS IK와 기존 3.5 안전 루프는 수치 해와 실행 전 검사의 연결 자료다. 이 단위는 인증된 안전 시스템이나 실제 MoveIt 실행을 대체하지 않으며 아래 기록 판정으로 학습을 마친다.