- 아래 사이트를 참고해서 포스팅 하였다.
http://wiki.ros.org/global_planner
global_planner - ROS Wiki
kinetic melodic noetic Show EOL distros: EOL distros: hydro indigo jade lunar hydro: Documentation generated on August 27, 2015 at 02:07 PM (doc job).indigo: Documentation generated on March 03, 2019 at 11:32 AM (doc job).jade: Documentation gene
wiki.ros.org
Global Planner
- 책임
- global costmap을 확인하고, goal까지의 path를 만들어 낸다.
여기서, 전체 맵을 하나의 graph로 간주하고, 목적지 까지의 경로를 graph탐색으로 찾아내는 방법을 많이 사용한다.
move base에서는 carrot_planner와 navfnm global_planner란 plugin이 있으며 다음과 같다.
carrot_planner
목적지까지의 vector를 만든 다음에 로봇이 진행할 수 있는 곳까지 만 vector를 따라 이동한다.

global_planner
navfn은 global_planner에서 dijkstar를 사용한 version이므로 함께 설명한다.
global_planner는 기본적으로 graph search를 dijkstart를 사용하며, 선택적으로 A*를 사용할 수 있으며 그에 대한 차이점은 아래 그림과 같다.
- Dijkstar 사용시

- A* 사용시

planning에 있어 다음과 같은여러 옵션들이 존재한다.
- parameters
- allow_unknown
- map 상에서 unknown(회색을 표현되는 부분)을 가는걸 허용
- use_dijkstar
- true로 설정하면 dijkstar를 사용하고, 아니면 A*를 사용한다.
- use_quadratic
- potential을 계산하는 방식이 바뀐다.
- documentation에선 Slightly different calculation for the potential. Note that the original potential calculation from navfn is a quadratic approximation. Of what, the maintainer of this package has no idea. 이라고 소개되어 있다.
- use_grid_path
- true로 설정되면 path가 grid로 만들어지게 된다.
- old_navfn_behavior
- true로 설정시 navfn이 plan한 것 과 동일한 path가 나온다.
- cost_factor
- cost에 계산되는 인자이다.
- costmap의 value에 cost factor를 곱해서 사용한다.
- neutral_cost
- cost에 기본적으로 offset을 주는 값이다.
- lethal_cost
- 로봇이 움직일 수 없다고 판단하는 Cost이다.
- 너무 작으면 path를 생성할 수 없다.
- default_tolerance
- path를 생성할 때 목적지에 대한 tolerance이다.
- 0.0이 default이며, 이상적으로 생각도 맞다.
- visualize_potential
- potential을 나타내기 위한것이다.
- planner_window_x ,planner_window_x
- 아무 역할 하지 않는다.
- allow_unknown
Base Global Planner
move base에서는 nav_core package안에 global planner plugin에 대한 base class인 base global planner의 인터페이스가 명시돼 있으며 다음과 같다.
class BaseGlobalPlanner{
public:
virtual bool makePlan(const geometry_msgs::PoseStamped& start,
const geometry_msgs::PoseStamped& goal, std::vector<geometry_msgs::PoseStamped>& plan) = 0;
virtual bool makePlan(const geometry_msgs::PoseStamped& start,
const geometry_msgs::PoseStamped& goal, std::vector<geometry_msgs::PoseStamped>& plan,
double& cost)
{
cost = 0;
return makePlan(start, goal, plan);
}
virtual void initialize(std::string name, costmap_2d::Costmap2DROS* costmap_ros) = 0;
virtual ~BaseGlobalPlanner(){}
protected:
BaseGlobalPlanner(){}
};
- makePlan()
- start point와 goal point가 주어졌을 때, path를 vector array로 반환하는 함수를 제공해야 한다.
- initialize
- costmap과 name이 주어졌을 때, global planner가 작동하기 위해 initialize를 할 수 있게 함수를 제공해야 한다.
'ROS' 카테고리의 다른 글
[ROS] Move Base (6) Local Planner 개념 (0) | 2022.03.16 |
---|---|
[ROS] Move Base (5) Global Planner Code 분석 (2) | 2022.02.21 |
[ROS] Move Base (3) Move Base Code 분석 (0) | 2022.02.21 |
[ROS] Move Base (2) Velocity & Acceleration (0) | 2022.02.18 |
[ROS] Move Base (1) Navigation Stack (2) | 2022.02.18 |