ROBOT ENGINEERING NOTES

로봇과 AMR의
전장 설계부터 인증까지

회로 실무, 산업자동화, Functional Safety, ISO 규격과 로봇 인증을 실제 설계 관점에서 정리합니다.

회로 실무 AMR / AGV Functional Safety ISO 13849 EMC / CE

【로봇-AMR 실무】 ROS2 Nav2란? | Costmap, Planner, Controller와 AMR 장애물 회피 구조

ROS2 NAVIGATION PRACTICE
Nav2는 길찾기 하나의 Node가 아니라
Costmap, Planner, Controller와 Recovery가 연결된 Navigation Framework다

SLAM 이후 AMR이 실제 목적지까지 이동할 때 필요한 Global Path, Local Avoidance, Behavior Tree와 ACS 연동 경계를 정리한다.

ROS2에서 SLAM으로 Map을 만들었다고 Robot이 목적지까지 자동으로 가는 것은 아니다. Map과 Localization은 현재 어디에 있는지를 알려주고, 실제로 어디로 어떻게 움직일지는 Navigation Stack이 결정한다.

Nav2는 이 역할을 Planner, Controller, Costmap, Behavior Tree, Recovery Plugin으로 나눠 구성한다. AMR에서 장애물 자동회피와 Replanning을 이해하려면 Nav2의 이 구조를 보는 것이 가장 좋다.

한 줄 Architecture Localization → Global Costmap → Planner → Global Path → Local Costmap → Controller → cmd_vel → Base Controller

1. Nav2는 단일 Algorithm이 아니다

Nav2 공식문서에는 Planner, Controller, Behavior Tree, Costmap Layer, Behavior 같은 Plugin Interface가 분리되어 있다.

즉 A* 하나를 쓰느냐 Dijkstra를 쓰느냐보다 Robot 특성에 맞춰 각 Component를 조합하는 Framework에 가깝다.

2. Global Planner는 목적지까지 큰 경로를 만든다

Robot의 Current Pose와 Goal을 기준으로 Map과 Global Costmap을 보고 전체 Path를 계산한다.

좁은 통로, Keepout Zone, Preferred Lane 같은 운영규칙도 Global Costmap에 반영할 수 있다.

Nav2 Navigation Flow
POSELocalizationCurrent Pose
GLOBALCostmapMap + Rules
PLANPlannerGlobal Path
LOCALCostmapObstacle Update
CTRLControllerTrajectory
BASEcmd_velMotion

3. Local Controller는 Global Path를 그대로 따라가기만 하지 않는다

Local Controller는 현재 Robot Pose, Local Costmap과 Global Path를 이용해 실제 Velocity Command를 계산한다.

앞에 사람이 지나가거나 Cart가 잠시 놓이면 Local Costmap의 Obstacle을 보고 감속하거나 우회 가능한 Trajectory를 찾을 수 있다.

4. Global Costmap과 Local Costmap의 역할은 다르다

구분 Global Costmap Local Costmap
영역 Map 전체 또는 큰 영역 Robot 주변 작은 Window
주요 사용 Global Path Planning Collision Avoidance와 Local Control
Update 상대적으로 느려도 가능 빠른 Obstacle Update가 중요
정보 Static Map, Keepout, Route Rule LiDAR Obstacle, Footprint 주변

5. Costmap에서 Robot은 점이 아니라 Footprint다

Robot 중심이 장애물을 피한다고 실제 Body가 충돌하지 않는 것은 아니다. Nav2 Costmap은 Robot Footprint를 사용해 Collision을 판단할 수 있다.

Pallet을 들어 Robot 외형이 달라지는 AMR이라면 Footprint를 동적으로 바꾸는 설계도 검토해야 한다.

6. Inflation Layer는 장애물 주변에 Margin을 만든다

장애물 Cell 바로 옆까지 Path를 허용하면 Localization Error와 Sensor Noise 때문에 실제 Robot이 너무 가까이 붙을 수 있다.

Inflation Layer는 장애물 주변 Cost를 높여 Planner와 Controller가 일정 Margin을 두도록 한다.

7. Keepout Zone은 공장 운영규칙을 Map에 넣는 방법이다

Nav2 공식 Keepout Filter는 Robot이 특정영역에 들어가지 못하게 하거나 Preferred Lane을 유지하도록 Costmap Mask를 적용할 수 있다.

이 기능은 AMR 자율성이 "공장 어디든 마음대로 이동"을 뜻하지 않는다는 좋은 예다.

8. Planner가 만든 Path가 막히면 Replanning이 필요하다

처음 계획한 Corridor에 Pallet이 장시간 놓여 있으면 Local Avoidance만으로 해결되지 않을 수 있다.

이때 Global Planner가 다른 Corridor를 찾아 새 Path를 만들 수 있다. 이것이 100번 AMR과 AGV 차이 글에서 이야기한 Global Replanning이다.

9. Behavior Tree는 Navigation의 상태와 예외처리를 구성한다

Nav2의 NavigateToPose는 Behavior Tree를 이용해 Planning, Following, Recovery와 Retry 순서를 구성할 수 있다.

Path가 Invalid되면 Replan하고, Controller가 진행하지 못하면 Clear Costmap이나 Backup 같은 Recovery를 시도하는 식이다.

10. Recovery를 많이 넣는다고 좋은 Navigation은 아니다

Robot이 계속 Spin, Backup, Replan을 반복하면 겉으로는 "자율적으로 해결 중"처럼 보이지만 Fleet 전체에서는 통로를 오래 점유할 수 있다.

Recovery 횟수와 Timeout을 정의하고, 일정시간 해결되지 않으면 ACS에 Blocked 상태를 올려 상위에서 Mission을 재조정하는 편이 낫다.

11. Odometry 품질이 Controller 성능에 직접 연결된다

Local Controller는 Robot이 지금 얼마나 움직였는지 믿을 수 있어야 한다. Wheel Slip과 Heading Error가 크면 Path Tracking도 흔들린다.

그래서 Encoder와 IMU를 이용한 Odometry를 먼저 안정화한 뒤 Nav2 Parameter를 튜닝하는 편이 좋다.

12. LiDAR, Camera와 Costmap을 무조건 많이 넣는 것도 답은 아니다

Sensor Source가 늘어나면 Blind Spot은 줄지만 False Obstacle과 Synchronization 문제도 늘 수 있다.

2D LiDAR, 3D LiDAR PointCloud, Depth Camera 중 각 Sensor가 어떤 높이와 물체를 담당할지 역할을 분리하는 것이 좋다.

13. AMR에서는 Safety Layer가 별도로 있어야 한다

Nav2 Obstacle Avoidance는 Functional Safety와 다르다.
Costmap에서 사람을 발견해 속도를 줄인다고 Safety Function이 되는 것은 아니다. Safety LiDAR, Safety Controller와 Safe Stop은 별도 Architecture로 검증해야 한다.

14. cmd_vel 이후에도 실제 Base Controller가 남아 있다

Nav2가 Linear/Angular Velocity를 출력해도 Motor Driver가 바로 그것을 이해하는 것은 아니다.

Base Controller는 cmd_vel을 Wheel RPM으로 변환하고 Acceleration Limit, Motor Command, Feedback를 처리한다.

Software에서 Wheel까지
NAV2cmd_velvx, vy, wz
BASEKinematicsWheel Target
CTRLSpeed LoopRPM Control
DRIVEMotor DriverCurrent
MOTORWheelMotion
FBEncoderOdometry

15. ACS와 Nav2의 역할을 어디서 나눌까?

제가 현실적인 AMR Architecture로 보는 것은 ACS가 Mission과 Global Traffic Rule을 관리하고 Robot Nav2가 Local Trajectory를 담당하는 구조다.

다른 Aisle로 Global Replanning을 하면 ACS가 예상한 Resource Reservation이 달라질 수 있으므로 Route Change를 상위에 알려야 한다.

16. Docking은 일반 NavigateToPose와 다르게 보는 편이 좋다

Charging Dock이나 Conveyor PIO Station은 마지막 수 cm Accuracy와 Orientation이 중요하다. 일반 Map Navigation으로 Approach Point까지 이동하고, 마지막 구간은 Marker, Reflector, Camera 또는 정밀 Sensor 기반 Docking Controller로 분리할 수 있다.

17. Nav2 튜닝 순서

제가 권하는 순서
  • TF Tree와 Frame 이름 확인
  • Wheel Odometry와 IMU 검증
  • Localization 안정화
  • Robot Footprint와 Inflation 설정
  • Global Planner만 먼저 검증
  • Local Controller Path Tracking 확인
  • Obstacle Layer와 Sensor Range 조정
  • Recovery와 Timeout 설정
  • Keepout, Speed Zone 같은 운영 Rule 추가
  • ACS와 Blocked / Replan 상태연동 검증

18. "회피가 잘 된다"만으로 평가하지 않는다

실제 공장에서는 Path Length, Mission Time, 사람 옆에서의 거동, 좁은 통로 통과, Deadlock Recovery, Network Loss와 Localization Loss까지 반복시험해야 한다.

정리하면
Nav2는 SLAM 다음에 붙는 단순 길찾기 기능이 아니다. Costmap, Planner, Controller, Behavior Tree와 Recovery가 연결된 Navigation Framework다. AMR에서는 여기에 Odometry, Safety Layer와 ACS Traffic Policy까지 함께 맞춰야 실제 공장에 적용할 수 있다.

같이 보면 좋은 TerryPack 글

반응형
LIST