2D Goal Pose로 목표 보내기

지도 위를 한 번 누르면, 로봇이 정말 혼자 갈까?

출발 전

출발 전에 네 가지를 봅니다

① Gazebo와 ③ Nav2가 켜져 있고, 초기 위치를 맞췄고, ② teleop은 꺼져 있어야 합니다(5~6편). 하나라도 빠지면 목표를 보내도 로봇이 가지 않거나 엉뚱하게 움직입니다.

따라 하기

Nav2 Goal로 목표를 찍습니다

rviz2 위쪽의 Nav2 Goal을 누르고, 가고 싶은 자리를 누른 채 도착해서 바라볼 쪽으로 끕니다. 2D Pose Estimate와 같은 손놀림입니다. 손을 떼면 로봇이 바로 출발합니다.

기본 rviz2에서는 같은 일을 하는 단추가 2D Goal Pose이고, ROBOTIS 매뉴얼은 Navigation2 Goal이라고 부릅니다.

스스로 가기

경로를 긋고 스스로 갑니다

planner_server가 경로를 긋고, controller_server가 그 경로를 따라 속도를 냅니다(7편). 키보드를 하나도 누르지 않았는데 로봇이 기둥 사이를 지나 목표에 닿고, 찍은 방향으로 돌아섭니다.

rviz2의 Navigation 2 패널에서 남은 거리와 걸린 시간도 볼 수 있습니다.

액션

목표는 액션으로 갑니다

Nav2 Goal은 navigate_to_pose 액션(nav2_msgs/action/NavigateToPose)의 목표를 보냅니다. 가는 동안 현재 위치와 남은 거리가 피드백으로 오고, 끝나면 결과가 옵니다. 9강에서 본 목표·피드백·결과 그대로입니다.

명령으로

rviz2 없이 명령으로도 보냅니다

ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{pose: {header: {frame_id: map}, pose: {position: {x: 0.5, y: 1.0}}}}"로 보냅니다. 9강 4편에서 거북이에게 보낸 것과 같은 명령입니다.

x, y는 예시입니다. rviz2의 Publish Point로 지도를 누르고 ros2 topic echo /clicked_point를 보면 빈 곳의 좌표를 알 수 있습니다.

막히면

길이 막히면 돌아갈 길을 찾습니다

가는 길에 상자가 나타나면 라이다가 보고 전역·지역 코스트맵에 칠합니다. 행동 트리가 1초마다 경로를 다시 계산하므로(7편), 막힌 통로를 피해 돌아가는 경로로 바뀝니다. 끝내 길이 없으면 복구를 해 보고, 그래도 안 되면 실패를 결과로 돌려줍니다.

Gazebo 위쪽 도구 막대의 상자 단추로 길 위에 상자를 놓아 시험해 볼 수 있습니다.

다음 편

시뮬레이션에서 돈 이 코드, 진짜 로봇에서도 돌까요?

9편다음 걸음 15강 목록