1294.74 매니퓰레이터의 파지 재시도 Fallback
1. 파지 재시도의 필요성
로봇 매니퓰레이터의 파지(grasp) 작업은 물체의 형상, 재질, 표면 상태, 위치 불확실성 등 다양한 요인에 의해 실패할 수 있다. 단일 파지 시도만으로는 산업 환경에서 요구되는 높은 성공률을 달성하기 어려우므로, 파지 실패 시 전략을 변경하여 재시도하는 구조가 필수적이다. Fallback 노드는 “하나라도 성공하면 충분한” 다중 파지 전략을 자연스럽게 표현한다(Colledanchise & Ogren, 2018).
2. 기본 파지 재시도 Fallback
2.1 동일 전략 재시도
<Fallback>
<!-- 1차 시도 -->
<Sequence>
<Action ID="OpenGripper"/>
<Action ID="MoveToGraspPose"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 2차 시도: 자세 미세 조정 후 재시도 -->
<Sequence>
<Action ID="OpenGripper"/>
<Action ID="Retreat" distance="0.05"/>
<Action ID="AdjustGraspPose" offset_z="-0.005"/>
<Action ID="MoveToGraspPose"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 최종 실패 -->
<Action ID="ReportGraspFailure"/>
</Fallback>
1차 시도가 실패하면 그리퍼를 열고 약간 후퇴한 후, 파지 자세를 미세 조정하여 재시도한다. IsObjectGrasped 조건 노드가 그리퍼의 폭, 힘 센서, 또는 촉각 센서를 통해 파지 성공 여부를 판정한다.
2.2 Tick별 실행 흐름
Tick 1: OpenGripper→S, MoveToGraspPose→R (1차 접근 중)
Tick 2: MoveToGraspPose→S, CloseGripper→R (파지 시도)
Tick 3: CloseGripper→S, IsObjectGrasped→F (1차 파지 실패)
→ 1차 Sequence FAILURE
OpenGripper→R (2차 시도 시작)
Tick 4: OpenGripper→S, Retreat→R (후퇴 중)
Tick 5: Retreat→S, AdjustGraspPose→S,
MoveToGraspPose→R (조정된 자세로 접근)
Tick 6: MoveToGraspPose→S, CloseGripper→R (2차 파지 시도)
Tick 7: CloseGripper→S, IsObjectGrasped→S → SUCCESS (파지 성공)
3. 다중 파지 전략 Fallback
3.1 파지 방식별 대안 체인
<Fallback>
<!-- 1순위: 정밀 파지 (Precision Grasp) -->
<Sequence>
<Action ID="ComputePrecisionGraspPose"/>
<Action ID="ExecutePrecisionGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 2순위: 포락 파지 (Enveloping Grasp) -->
<Sequence>
<Action ID="ComputeEnvelopingGraspPose"/>
<Action ID="ExecuteEnvelopingGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 3순위: 흡착 파지 (Suction Grasp) -->
<Sequence>
<Condition ID="IsSuctionGripperAvailable"/>
<Action ID="SwitchToSuctionGripper"/>
<Action ID="ExecuteSuctionGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 4순위: 모서리 밀어 파지 -->
<Sequence>
<Action ID="PushObjectToEdge"/>
<Action ID="ExecuteEdgeGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 최후 수단: 인간 지원 요청 -->
<Action ID="RequestHumanAssistance"/>
</Fallback>
정밀 파지 → 포락 파지 → 흡착 파지 → 모서리 파지의 순서로 점진적으로 전략을 전환한다. 각 전략은 물체의 형상과 크기에 따라 적합성이 다르며, 앞쪽 전략이 실패할수록 더 범용적이지만 정밀도가 낮은 전략으로 진행한다.
4. 재인식 기반 파지 재시도
4.1 시각 재인식 후 재시도
<Fallback>
<!-- 1차: 초기 인식 결과로 파지 -->
<Sequence>
<Action ID="MoveToGraspPose" pose="{initial_grasp_pose}"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 2차: 물체 재인식 후 파지 -->
<Sequence>
<Action ID="OpenGripper"/>
<Action ID="MoveToScanPose"/>
<Action ID="RedetectObject" result_pose="{updated_object_pose}"/>
<Action ID="ComputeGraspPose" object_pose="{updated_object_pose}"
grasp_pose="{updated_grasp_pose}"/>
<Action ID="MoveToGraspPose" pose="{updated_grasp_pose}"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 3차: 다른 시점에서 재인식 -->
<Sequence>
<Action ID="OpenGripper"/>
<Action ID="MoveToAlternativeScanPose"/>
<Action ID="RedetectObject" result_pose="{alt_object_pose}"/>
<Action ID="ComputeGraspPose" object_pose="{alt_object_pose}"
grasp_pose="{alt_grasp_pose}"/>
<Action ID="MoveToGraspPose" pose="{alt_grasp_pose}"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<Action ID="ReportGraspFailure"/>
</Fallback>
1차 시도 실패 시 카메라를 이용하여 물체를 재인식하고, 갱신된 자세로 파지를 재시도한다. 2차 시도도 실패하면 다른 시점에서 재인식하여 3차 시도를 수행한다. 이 구조는 초기 인식의 오차가 파지 실패의 원인인 경우에 효과적이다.
5. Retry 데코레이터를 이용한 파지 재시도
5.1 단순 반복 재시도
<Fallback>
<Retry num_attempts="3">
<Sequence>
<Action ID="OpenGripper"/>
<Action ID="MoveToGraspPose"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Retry>
<Action ID="ReportGraspFailure"/>
</Fallback>
Retry 데코레이터는 자식이 FAILURE를 반환하면 지정된 횟수만큼 재실행한다. 동일한 전략을 동일한 자세로 반복하므로, 파지 실패의 원인이 비결정론적(물체 미끄러짐 등)인 경우에 적합하다.
5.2 전략별 재시도 결합
<Fallback>
<!-- 정밀 파지: 최대 3회 재시도 -->
<Retry num_attempts="3">
<Sequence>
<Action ID="ExecutePrecisionGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Retry>
<!-- 포락 파지: 최대 2회 재시도 -->
<Retry num_attempts="2">
<Sequence>
<Action ID="ExecuteEnvelopingGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Retry>
<!-- 최후 수단 -->
<Action ID="RequestHumanAssistance"/>
</Fallback>
각 파지 전략에 대해 개별적인 재시도 횟수를 설정한다. 정밀 파지는 3회, 포락 파지는 2회까지 재시도하며, 모두 실패하면 인간 지원을 요청한다.
6. 물체 유형별 파지 전략 선택
6.1 조건 기반 파지 전략 분기
<Fallback>
<!-- 소형 물체: 핀치 파지 -->
<Sequence>
<Condition ID="IsSmallObject"/>
<Fallback>
<Sequence>
<Action ID="PinchGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<Sequence>
<Action ID="AdjustAndPinchGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Fallback>
</Sequence>
<!-- 대형 물체: 포락 파지 -->
<Sequence>
<Condition ID="IsLargeObject"/>
<Fallback>
<Sequence>
<Action ID="EnvelopingGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<Sequence>
<Action ID="TwoHandedGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Fallback>
</Sequence>
<!-- 평면 물체: 흡착 파지 -->
<Sequence>
<Condition ID="IsFlatObject"/>
<Action ID="SuctionGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 분류 불가: 범용 전략 -->
<Sequence>
<Action ID="GenericGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Fallback>
물체의 크기와 형상에 따라 적합한 파지 전략을 선택하고, 선택된 전략 내에서도 Fallback을 통해 대안을 제공한다.
7. 물체 자세 조정 후 재시도
7.1 물체를 재배치한 후 파지
<Fallback>
<!-- 현재 자세에서 파지 -->
<Sequence>
<Action ID="GraspAtCurrentPose"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 물체 회전 후 파지 -->
<Sequence>
<Action ID="PushObjectToRotate" angle="90"/>
<Action ID="RedetectObject"/>
<Action ID="GraspAtNewPose"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<!-- 물체를 안정적 자세로 변경 후 파지 -->
<Sequence>
<Action ID="FlipObjectToStablePose"/>
<Action ID="RedetectObject"/>
<Action ID="GraspAtStablePose"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
<Action ID="ReportGraspFailure"/>
</Fallback>
물체의 현재 자세가 파지에 불리한 경우, 물체를 밀어 회전시키거나 뒤집어서 파지에 유리한 자세로 변경한 후 재시도한다.
8. 파지 재시도 Fallback의 설계 원칙
-
파지 검증의 필수성: 모든 파지 시도 후에
IsObjectGrasped조건 노드로 파지 성공 여부를 반드시 검증해야 한다. 검증 없이 이동 단계로 진행하면 물체 분실이 발생한다. -
그리퍼 초기화: 각 재시도 전에 그리퍼를 완전히 개방하고, 이전 시도의 잔여 상태를 정리해야 한다. 이전 시도에서 물체가 그리퍼에 걸려 있으면 다음 시도가 방해받을 수 있다.
-
재시도 횟수 제한: 무한 재시도는 시스템의 응답성을 저하시키므로, 전략별로 최대 재시도 횟수를 설정하고 최후 수단을 반드시 포함한다.
-
물체 손상 방지: 재시도 과정에서 물체에 가해지는 힘과 접촉 횟수가 증가하므로, 물체의 재질과 내구성을 고려하여 재시도 전략을 설계해야 한다.
-
안전 감시 통합: 파지 재시도 전체를 ReactiveSequence로 감싸서, 재시도 중에도 관절 토크, 충돌 감지 등의 안전 조건을 지속 감시해야 한다(Faconti, 2022).
참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/