이동 베이스와 팔을 하나의 과업으로 연결한다
이동 매니퓰레이터는 이동 베이스에 팔을 장착해 주행과 조작을 함께 수행하는 로봇이다. 전체 배치를 결정하려면 베이스의 위치·방향과 팔 관절들을 함께 알아야 한다. 그리퍼의 열림 상태와 물체 상태도 과업에 영향을 준다. 주행 목표 pose 하나가 모든 팔 관절과 물체의 결과를 정해 주지는 않는다.
Modern Robotics 저자 Mobile Manipulation 설명은 베이스와 팔의 좌표 연결 및 함께 움직이는 제어를 설명한다. 본문은 기초 미션으로 주행 후 베이스 상태를 확인하고 조작하는 순차 구성을 사용한다. 베이스와 팔을 동시에 제어하는 전체 동역학·접촉 계획을 구현한 예는 아니다. 순차로 움직여도 두 기구가 차지하는 공간과 현재 상태의 연결은 계속 확인해야 한다.
Nav2는 여기서 목적지까지의 주행 과업을 담당한다. 팔의 목표·경로 생성과 관절 제어, 그리퍼 명령 및 물체 검증은 다른 역할이다. BT나 과업 관리자는 이 단계를 조직할 수 있지만 명령을 보냈다는 사실만으로 실제 결과를 생성하지 않는다. 각 단계는 시작 전제, 요청 ID와 자료 버전, 기대 관측 및 종료 이유를 가져야 한다.
미션을 관문이 있는 단계로 쓴다
가상 미션은 작업대의 물체를 지정 트레이에 놓고 다음 주행을 준비하는 것이다. 주행 전에는 팔이 정한 수납 형상에 있고 베이스 주행 경로의 footprint와 맞는지 확인한다. 작업대 도착 뒤에는 현재 pose·속도와 센서·TF를 다시 확인하고, 물체 목표를 현재 베이스와 팔 기준으로 변환한다. 팔 목표·경로를 검사하고 조작한 다음 물체 결과를 관측하며, 팔 수납과 새 주행 준비를 확인한다.
그림 M18.06-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
관문은 다음 단계로 넘어갈 조건이다. 작업대 도착 Action의 SUCCEEDED는 선택한 주행 조건이 통과했다는 기록이며 정지·물체 위치·팔 경로까지 모두 검증했다는 뜻이 아니다. 정지나 안정 상태가 필요하면 그 조건을 현재 관측으로 확인한다. 반대로 팔이 수납됐더라도 새 경로의 장애물과 목적지 유효성은 별도로 확인해야 한다.
과업 계획을 작은 단계로 나누는 개념은 MoveIt Task Constructor 공식 설명과 연결된다. 이 자료는 Rolling/main 문서이므로 여기서는 단계 간 상태 연결의 참고로 사용하며 API나 설치 예를 Jazzy 실행 코드로 제시하지 않는다. 이 미션이 해당 도구로 실제 계획·실행됐다는 주장도 하지 않는다.
map의 목표를 base와 arm 기준으로 옮긴다
합성 좌표는 map M, 이동 베이스 B, 팔 장착 원점 A로 나눈다. 열벡터 p_M은 M 기준 목표 TCP 점이다. TCP는 도구의 작업 기준점이며 팔 끝 플랜지와 다를 수 있다. B의 원점은 M에서 t=(1,1,0) m이고 방향은 M의 z축에 대해 반시계 90°다. 목표는 p_M=(1.2,1.4,0.3) m다. 모든 변환은 같은 시각의 정확한 합성 값이고 길이 단위는 m다.
B 기준으로 옮기려면 먼저 원점을 빼고 B 방향의 역회전을 적용한다. z축 +90°의 역회전은 (d_x,d_y,d_z)를 (d_y,−d_x,d_z)로 보낸다. 원점을 뺀 값은 (0.2,0.4,0.3)이므로 p_B=(0.4,−0.2,0.3) m다. map 방향으로 다시 +90° 회전하고 t를 더하면 원래 목표점이 복원되는지 점검한다.
팔 원점 A는 B에서 (0.1,0,0.2) m에 고정돼 있고 축 방향은 B와 같다고 준다. 따라서 p_A=p_B−(0.1,0,0.2)=(0.3,−0.2,0.1) m다. base_link와 arm 원점을 같은 것으로 두면 이 고정 장착 오프셋을 놓친다. 도구나 장착이 바뀌면 해당 변환 버전도 확인해야 한다.
가상 점 범위는 A 기준 x∈[0.1,0.5], y∈[−0.3,0.3], z∈[0.05,0.4] m이며 경계를 포함한다. 계산한 점은 이 범위 안이다. 그러나 이는 점 범위의 간단한 선별 조건일 뿐 전체 IK 해, 도구 자세와 관절 제한·자기 충돌·접근 경로를 확인한 것이 아니다. 파지에는 TCP의 방향과 접근·이탈 구간, 물체와 지지면의 조건도 필요하다. 점 세 개 좌표만으로 완전한 6D pose를 제공했다고 쓰지 않는다.
베이스가 달라지면 같은 물체의 상대 목표도 달라진다
물체의 map 위치와 베이스 yaw는 그대로이고 베이스 원점 x만 1.05 m로 바뀐 변형을 보자. 원점을 빼면 (0.15,0.4,0.3), 역회전하면 p_B=(0.4,−0.15,0.3) m, 팔 기준은 p_A=(0.3,−0.15,0.1) m다. 이전 목표를 그대로 쓰면 A의 y방향으로 0.05 m 차이가 생긴다. 팔 정확도를 높였다는 이유로 베이스·좌표 오차를 무시할 수 없다.
이 예는 정적 물체와 알려진 map 관계를 사용한다. 실제 취득 시각의 카메라 pose와 현재 base pose를 섞을 때는 어떤 양이 정적이라고 가정했는지와 보간·TF 시각을 확인한다. 현재로 재변환할 수 없는 오래된 목표를 단지 frame 이름이 맞는다는 이유로 사용하지 않는다. 지도 보정이 바뀐 경우에도 목표와 현재 상태가 같은 지도 버전을 가리키는지 확인한다.
최신 목표와 현재 정지 조건을 별도로 검사한다
관문 정책은 같은 clock에서 목표 관측 나이가 0.2 s 이하이고, 현재 선속도 크기가 0.02 m/s 이하여야 조작 준비의 두 검사를 통과한다는 합성 규칙이다. 현재 20.30 s, 목표 취득 20.00 s, 관측된 베이스 속도 0.03 m/s라면 나이는 0.30 s로 0.10 s 초과이고 속도도 0.01 m/s 초과다. 주행 Action이 성공했어도 이 두 조건은 실패다.
새 목표 취득이 20.25 s이고 같은 현재 시각의 속도 표본이 0이면 나이 0.05 s와 속도 검사는 통과한다. 이것만으로 전체 조작을 승인한 것은 아니다. 좌표·자세·팔 경로·물체와 공간의 전제는 여전히 확인해야 한다. 이 정책은 한 표본의 속도 조건이며 장시간 안정이나 실제 정지의 인증을 보장하는 규칙이 아니다. 필요한 정지 유지·오차·관측 범위는 해당 과업에서 더 정의한다.
부분 성공과 전체 미션 완료를 나눈다
독립적인 후반 합성 기록 B에서는 앞선 준비·팔 경로 검사와 조작 실행이 정한 기준에 따라 통과했다고 상태 자료로 제공한다. 결과 검증 조건은 지정 트레이에 물체가 관측되고 그리퍼가 해제 상태로 확인되는 두 항목이다. 기록에는 두 항목 모두 true지만 ArmStowed는 미상이라고 하자. 이 자료에서는 물체 결과 조건은 통과했고 수납·다음 주행 준비는 아직 보류다. 전체 미션 완료라고 표시하면 안 된다.
해제 명령 수락은 해제 상태 관측과 다르고, 물체가 한 번 보인다는 사실을 모든 과업의 유지·손상 없음으로 일반화하지 않는다. 본문은 제공한 두 결과 조건으로만 판정한다. 실제 과업이라면 센서의 가림·대응·시각과 물체 위치 허용 오차, 필요한 유지 시간과 추가 품질 조건도 정한다. 팔 수납 역시 요청 성공과 현재 joint/형상 관측을 연결해야 한다.
실패한 단계에서 현재 세계를 확인하고 재개한다
목표 관측이 오래됐으면 새 관측과 변환을 확보하고, 베이스가 움직이면 현재 상태와 조작 시작 가정을 다시 확인한다. 팔 계획이 실패한 경우에는 도구 자세·전체 링크 충돌·관절 범위와 작업대 정합을 진단한다. 물체를 이미 옮긴 뒤 결과 확인만 실패했다면 같은 파지·놓기를 무조건 반복하지 않고 현재 물체 상태와 작업 ID를 먼저 확인한다.
취소와 오류, 결과 미상을 구분하고 진행 중인 주행·팔·그리퍼 요청과 실제 적용 상태를 따로 기록한다. 재개할 때에는 새 목표·지도·장착 버전과 현재 pose·속도·물체 상태를 사용한다. 팔이 돌출된 상태로 과거의 수납 footprint를 사용해 다음 주행을 재개하거나, 새 주행이 시작됐다는 이유로 그리퍼 잔여 작업을 완료 처리하지 않는다.
기존 4.3 TF2 트리 설계로 프레임·시각 연결을, 6.5 End-to-End Pick & Place 배포로 요청·적용·작업 결과를 보충하자. 이 단위를 완성했다는 사실과 실제 이동 매니퓰레이터 프로젝트의 합격·실증은 별도다. 아래 활동의 숫자와 상태는 합성 입력이며 장비 동작을 수행하지 않는다.