Behavior Tree 101

yun·2024년 1월 11일
1

Behavior Tree

목록 보기
1/2

nav2 기본 BT

  • navigate_to_pose_w_replanning_and_recovery.xml

  • Groot2에서 확인한 트리

  • Navigation Subtree는 3개의 파트로 이루어짐

    • 경로 계산
    • 경로 이동
    • a 또는 b가 실패했을 때 RecoveryFallback → ClearGlobal(Local)Costmap-Context
  • The ComputePathToPose subtree clears the global costmap. The global costmap is the relevant costmap in the context of the planner 경로 계산 실패 시 글로벌 코스트맵을 초기화. global path planning(기본값: A star 알고리즘)과 관련된 알고리즘.

  • The FollowPath subtree clears the local costmap. The local costmap is the relevant costmap in the context of the controller 경로 이동 실패 시 로컬 코스트맵을 초기화. local path planning(기본값: DWB -- Dynamic Window Approach의 변형)

  • Navigation Subtree에서의 RecoveryFallback이 충분하지 않은 경우, Navigation Subtree는 Failure를 리턴하고 Recovery Subtree 노드로 이동해서 시스템 레벨의 모든 navigation failure를 삭제

  • 실제 파일 경로: /opt/ros/humble/share/nav2_bt_navigator/behavior_trees/navigate_to_pose_w_replanning_and_recovery.xml


기본 BT 적용 시 문제점

  • 1초에 1번씩 경로를 재설정하는데, 재설정이 필요하지 않고 최초 경로대로 움직이면 되는 경우에도 계속해서 재설정하는 모습을 자주 볼 수 있다. (특히 꺾어서 움직여야 하는 경우)
  • 장애물이 움직이지 않는다고 가정하므로, 장애물이 동적인 경우에 멈추지 않고 계속해서 움직이고, 대상(ex. 사람)이 움직이는 순간에 충돌하는 경로로 잘못 설정할 수 있다.
  • 경로 계산/이동 실패 시 Reactive Fallback 발생 -> 물러나고 5초 기다리는 동작이 시간을 많이 소모한다.

  • 어떻게 변경할까?
    -> 장애물 감지 시 멈추는 행동트리(Navigate To Pose and Pause Near Goal-Obstacle — Nav2 1.0.0 documentation)를 응용해 보자.
    -> MonitorAndFollowPath Subtree를 사용해서 더 긴 경로(PathLongerOnApproach)가 감지되면 CancelingControlAndWait 로 로봇의 컨트롤을 취소하고 지정된 시간(위에서는 5초) 동안 대기시킨다. 지정된 시간이 지난 후 1번 더 기존 경로보다 긴 경로를 감지했는지 확인 후, 장애물이 없다면 기존 경로대로 이동하고 장애물이 있다면 새로운 경로대로 이동한다.

0개의 댓글

관련 채용 정보