티스토리 뷰

https://navigation.ros.org/configuration/packages/configuring-dwb-controller.html

 

DWB Controller — Nav2 1.0.0 documentation

DWB Controller Source code on Github. The DWB controller is the default controller. It is a fork of David Lu’s controller modified for ROS 2 using the Dynamic Window Approach. Example controller_server: ros__parameters: # controller server parameters (se

navigation.ros.org

 

아이디어

널리 알려진 지역 경로 계획 알고리즘으로 로봇 주변의 장애물을 회피하기 위한 방법으로서 제안됐습니다. 로봇이 충돌이 발생하지 않는 속도 범위로부터 현재 속도, 가속 한계, 장애물 등 여러 조건들을 고려하며 평가 항목을 정의하고 가장 좋게 평가된 최적의 속도를 선정합니다.

해당 아이디어 알고리즘의 수행 순서는 다음과 같습니다.

 

 1. DWB 로컬 플래너는 로봇의 속도 공간(Velocity space)로부터 경로(Circular trajectories)를 생성함.

 2. 장애물 영역에 도달 하기 전 멈출 수 없는 속도는 제거하여 허용 속도(Admissible Velocities)로 정의함.

 3. 이후 허용 속도중 가속 한계를 고려해 이산 시간 내 도달 가능한 범위를 Dynamic Window로 정의

 4. Dynamic Window 범위 내 허용 속도로부터 생성된 경로에 대해 사전에 정의한 비용함수를 최소로 만드는 속도를 선정함.

 

장점은 수식이 비교적 간단하여 계산량이 적기 때문에 작은 컴퓨팅 파워에도 실시간 성을 확보하기에 유리하다는 것입니다. 실시간 성을 확보하는 것은 로봇이 주행할 때 동적으로 변화하는 주변 환경에 대응하도록 해주며 이는 주행 성능에 있어 매우 중요한 요소입니다.

단점은 현재 속도로부터 도달 가능한 속도 영역 내에서 충돌 여부 확인 및 비용 함수를 최소로 만드는 속도를 선정하는데, 제한된 탐색영역을 가지고 있어 local minimum에 빠질 가능성을 증가시킬 수 있습니다.

이를 자신의 시스템을 적용하기 위해 위해서는 목적에 맞게 파라미터를 조정해야 합니다.


파라미터

 

prune_plan

전역 경로 계획을 통해 얻은 경로를 따라 이동할 때, 로컬 플래너는 로봇의 주변 환경을 고려하여 로봇의 속도와 방향을 조정하는 역할을 수행합니다. 이때 prune_plan은 지나오거나, 바라보고 있는 추종점 이후의 전역 경로를 자를지 결정합니다.

 

prune_distance

전역 경로의 시작점부터 prune_distance 만큼 떨어진 범위 이내에서 로봇과 경로점의 거리가 prune_distance보다 작은 첫번째 전역 경로 점을 조정된 전역 경로의 시작점으로 재정의 한다. 이는 로봇이 지나는 경로를 어느 범위까지 고려할 것인지에 대한 요소이며 로봇이 생성한 경로가 이미 지나온 경로에 대해 평가를 하지않음을 의미합니다.

prune_distance의 전역 경로상 표현

forward_prune_distance

전역 경로의 prune_point로부터 어느 지점의 경로까지 포함시킬 것인지에 대해 다루고 있습니다. 일반적으로 LookAhead라고 불리우기도 하며 멀리 설정할 경우 로봇은 멀리있는 경로점에 대해 추종하려는 움직임을 보이게 됩니다. 이는 전역 경로 상 심한 진동을 유도하는 경로에 대해 부드러운 움직임을 가질 수 있도록 해주지만, 동시에 전역경로를 정확히 따를 수 없게 됩니다.

 

장애물에 대해서는 값이 클수록 넓은 영역에서의 경로점들이 고려되어 경로를 효율적으로 따르려하며 장애물이 등장해도 먼 거리에서부터 고려되기 때문에 더 효율적으로 회피할 수 있습니다. 하지만 값이 작다면 좁은 영역에서의 경로점들이 고려되어 경로를 정확히 따르려하지만 조정된 전역 경로 상 장애물에 갑작스럽게 대응하게 됩니다.

 

sim_time

값이 작을수록 속도를 기반으로 짧은 시간동안 궤적을 생성하게 됩니다. 생성된 궤적은 장애물에 도달하는지 판별하게 되며 좁은 영역에서 충돌 가능성을 확인하다가 장애물을 마주하는 경우 갑작스럽게 대응하게 되지만 좁은 영역에서의 탐색은 장애물이 밀집된 공간에서 사이 사이로 회피하는데에 유리합니다.

 

값이 클수록 속도를 기반으로 긴 시간동안 궤적을 생성하게 됩니다. 생성된 궤적은 장애물에 도달하는지 판별하게 되며 큰 영역에서 충돌 가능성을 확인하다가 장애물을 마주하는 경우 미리 회피 가능한 경로로 주행하게 되지만 큰 영역에서의 탐색은 장애물이 밀집된 공간에서 장애물 사이로 회피하는데 불리합니다.


비용함수 파라미터

 

BaseObstacle

생성된 각 경로의 경로점에 해당하는 map frame의 그리드로부터 cost를 가져오고 모든 비용을 합산한 결과가 생성된 경로의 비용으로서 정의된다. 장애물 영역으로의 경로가 생성되는 것을 방지하며, 장애물이 인플레이션된 영역에서 경로를 생성하는 것을 지양합니다..

생성된 경로점들은 로컬 맵에서의 장애물 정보를 참조하므로 inflation_radius, cost_scaling_factor를 함께 고려해야합니다.

sum_scores=true, 생성된 궤적에 존재하는 모든 장애물을 고려

sum_scores=false, 생성된 궤적에 존재하는 장애물 중 가장 비용이 큰 장애물을 고려

 

PathAlign

생성된 각 지역 경로가 Global Path Planner로부터 제공된 경로에 대해 얼마나 잘 정렬되는지에 대한 평가입니다.

전역 경로가 장애물의 인플레이션 영역을 지나도록 설정한 경우 이 파라미터를 가중할수록 전역경로를 따르도록 하며 인플레이션 영역을 지나는 경로를 따르게 되어 충돌위험을 초래할 수 있습니다. 

PathDist

생성된 각 지역 경로가  Global Path Planner로부터 제공된 경로에 대해 얼마나 떨어져 있는지에 대한 평가입니다.

이 파라미터를 가중할수록 전역 경로를 더욱 추종하도록 합니다. 

GoalAlign

생성된 각 경로 목적 지점이 전역 경로 목적지점으로부터 forward_point_distance 만큼 떨어진 곳에 얼마나 잘 정렬되는지에 대한 평가입니다.

 

GoalDist

생성된 각 경로 목적 지점이 로컬 맵 이내 전역 경로 목적 지점으로부터 얼만큼 떨어져 있는지에 대한 평가를 진행합니다.

 

RotatetoGoal

전역 경로의 목적 지점의 각도와 생성된 경로의 목적 지점의 각도의 거리로서 평가합니다.

전역 목적 지점에 가깝지 않은 경우 (생성된 경로의 속도)*slowing_factor_ + scoreRotation(생성된경로에 대한 평가)로 평가되며 이는 모바일 로봇이 회전하는 동안 주행 속도가 늦춰지도록 장려합니다.

 

반면 전역 목적 지점에 가까운 경우 단순히 생성된 경로의 목적지점 각도의 차로 평가되어 로봇이 목적지점에서의 각도를 따르도록 장려합니다. 따라서 비용 함수를 크게 설정할수록 목적 지점에서 목적 각도를 추종하도록 장려하며 이는 모바일 로봇이 생성된 궤적을 평가하고 어떤 움직임을 가질지 결정하는데에 영향을 끼치게 됩니다.

 

Oscillation

로봇의 이전 움직임과 생성된 경로의 경로점으로의 향 후 움직임으로부터 Oscillation을 판단하며 Oscillation이 발생하는 경로의 경우 따르지 않도록 장려합니다. 이는 로봇의 주행 중이던 방향으로의 자연스러운 움직임을 유도한다.


CostMap 파라미터

 

Global Costmap(inflation_radius:0.11) - Local Costmap(inflation_radius:0.11)

Global Costmap(inflation_radius:0.22) - Local Costmap(inflation_radius:0.11)

Global CostMap에서Inflation_radius 증가에 따라 인플레이션 영역 증가는 더 보수적인 전역 경로를 생성하게 합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31