1314.40 객체 집기 및 놓기 액션의 모델링 사례

1314.40 객체 집기 및 놓기 액션의 모델링 사례

1. 기본 파지 및 방출 모델

객체의 집기(pick)와 놓기(place)는 로봇 조작(manipulation) 도메인의 핵심 액션이다. 이 액션 쌍은 로봇의 그리퍼 상태, 물체의 위치, 적재 상태 등 다수의 상태 요소를 동시에 변경한다.

1.1 기본 pick 액션

(:action pick
    :parameters (?r - robot ?obj - object ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (object_at ?obj ?loc)
        (gripper_free ?r)
    )
    :effect (and
        (holding ?r ?obj)
        (not (object_at ?obj ?loc))
        (not (gripper_free ?r))
    )
)

1.2 기본 place 액션

(:action place
    :parameters (?r - robot ?obj - object ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (holding ?r ?obj)
    )
    :effect (and
        (object_at ?obj ?loc)
        (gripper_free ?r)
        (not (holding ?r ?obj))
    )
)

2. 다중 그리퍼 모델

양팔 로봇이나 다중 그리퍼를 가진 로봇의 경우:

(:types robot object waypoint gripper - entity)

(:predicates
    (robot_at ?r - robot ?w - waypoint)
    (object_at ?o - object ?w - waypoint)
    (holding ?r - robot ?o - object ?g - gripper)
    (gripper_free ?r - robot ?g - gripper)
    (gripper_of ?g - gripper ?r - robot)
)

(:action pick_with_gripper
    :parameters (?r - robot ?obj - object ?loc - waypoint ?g - gripper)
    :precondition (and
        (robot_at ?r ?loc)
        (object_at ?obj ?loc)
        (gripper_free ?r ?g)
        (gripper_of ?g ?r)
    )
    :effect (and
        (holding ?r ?obj ?g)
        (not (object_at ?obj ?loc))
        (not (gripper_free ?r ?g))
    )
)

3. 무게 및 용량 제약이 있는 모델

(:functions
    (weight ?obj - object)
    (current_load ?r - robot)
    (max_load ?r - robot)
    (grip_strength ?r - robot)
)

(:action pick_with_weight_check
    :parameters (?r - robot ?obj - object ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (object_at ?obj ?loc)
        (gripper_free ?r)
        (<= (weight ?obj) (grip_strength ?r))
        (<= (+ (current_load ?r) (weight ?obj)) (max_load ?r))
    )
    :effect (and
        (holding ?r ?obj)
        (not (object_at ?obj ?loc))
        (not (gripper_free ?r))
        (increase (current_load ?r) (weight ?obj))
    )
)

(:action place_with_weight
    :parameters (?r - robot ?obj - object ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (holding ?r ?obj)
    )
    :effect (and
        (object_at ?obj ?loc)
        (gripper_free ?r)
        (not (holding ?r ?obj))
        (decrease (current_load ?r) (weight ?obj))
    )
)

4. 듀레이티브 파지 액션

실제 파지 동작은 시간이 소요되므로:

(:durative-action pick_up
    :parameters (?r - robot ?obj - object ?loc - waypoint)
    :duration (= ?duration 5)
    :condition (and
        (at start (robot_at ?r ?loc))
        (at start (object_at ?obj ?loc))
        (at start (gripper_free ?r))
        (over all (robot_at ?r ?loc))
    )
    :effect (and
        (at start (not (gripper_free ?r)))
        (at end (holding ?r ?obj))
        (at end (not (object_at ?obj ?loc)))
    )
)

over all (robot_at ?r ?loc) 조건은 파지 동작 중 로봇이 해당 위치에 머물러야 함을 보장한다.

5. 특수 배치 위치에 대한 모델링

특정 표면, 선반, 컨베이어 등에 물체를 배치하는 경우:

(:action place_on_surface
    :parameters (?r - robot ?obj - object ?surface - surface ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (holding ?r ?obj)
        (surface_at ?surface ?loc)
        (surface_clear ?surface)
        (compatible ?obj ?surface)
    )
    :effect (and
        (on ?obj ?surface)
        (object_at ?obj ?loc)
        (gripper_free ?r)
        (not (holding ?r ?obj))
        (not (surface_clear ?surface))
    )
)

6. 스택 조작 모델

물체를 쌓거나 내리는 블록 세계(blocks world) 유형의 조작:

(:action stack
    :parameters (?r - robot ?upper - block ?lower - block ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (holding ?r ?upper)
        (block_at ?lower ?loc)
        (clear ?lower)
    )
    :effect (and
        (on ?upper ?lower)
        (clear ?upper)
        (not (clear ?lower))
        (gripper_free ?r)
        (not (holding ?r ?upper))
        (block_at ?upper ?loc)
    )
)

(:action unstack
    :parameters (?r - robot ?upper - block ?lower - block ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (on ?upper ?lower)
        (clear ?upper)
        (gripper_free ?r)
    )
    :effect (and
        (holding ?r ?upper)
        (clear ?lower)
        (not (on ?upper ?lower))
        (not (clear ?upper))
        (not (gripper_free ?r))
        (not (block_at ?upper ?loc))
    )
)

7. 설계 지침

  1. pick과 place를 대칭적으로 설계하라. pick의 효과에서 변경하는 술어는 place의 효과에서 역으로 변경해야 한다.

  2. 그리퍼 상태를 명시적으로 관리하라. gripper_free 술어의 추가와 삭제가 일관되지 않으면 로봇이 여러 물체를 동시에 잡는 비현실적 상태가 발생한다.

  3. 물체의 고유 위치 보장: 물체가 동시에 여러 위치에 존재하지 않도록 object_at 삭제를 빠짐없이 수행해야 한다.

8. 참고 문헌

  • Ghallab, M., Nau, D., & Traverso, P. (2004). Automated Planning: Theory and Practice. Morgan Kaufmann.
  • Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.