본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 Nav2를 활용해서 Path Planning을
하는 방법에 대해서 실습해 보았다.
[오늘의 수강 영상]
[오늘의 실습]
먼저 Path Planning을 수행하기 위해서는
Launch 파일, YAML 파일, Rviz 파일이 필요하다.
1. Launch 파일
Launch 파일에는 Navigation_launch.py와
bringup_launch.py가 필요하다.
Navigation_launch.py에서는
Navigation 할 때 필요한 node들과
lifecycle_manager가 관리하고자 하는 노드들의
이름이 정의되어 있다.
bringup_launch.py에서는
지금까지 사용되었던 launch 파일들을
모두 키는 코드가 포함되어 있는 통합 launch 파일이다.
SLAM과 localization, navigation, rviz에서
어떤 걸 끼고 끌지 정할 수 있다.
그리고 여기서 어떤 파라미터 파일을 가져오고
어떤 지도파일을 불러올지도 정할 수 있다.
2. YAML 파일
여기서는 Path Planning과 관련된 파라미터들이
정의되어 있다.
여기서는 amcl, bt_navigator, controller_server, local_costmap,
global_costmap, map_server, map_saver, smoother_server,
behavior_server, waypoint_follower에 대한 파라미터들값을
정할 수 있다.
3. Rviz 파일
아까 bringup_launch.py에서 사용하기 위한
rviz 파일로 사용하고자 하는 topic들을 미리 저장해 둔다.
이제 Nav2를 통한 Path Planning을 하기 위해서
로봇에 목적지를 전달해 주겠다.
방법은 4가지 방법이 있다.
1. Rviz2의 2D Goal Pose 버튼
Rviz2에는 아래와 같은 버튼이 있다.
이 버튼을 사용해서 목적지를 직접적으로
설정할 수 있다.
이를 실행해 보기 위해서
아래 두 개의 명령어로 시뮬레이션 환경과
Path Planning 수행을 위해서 bringup_launch.py를 시작해 준다.
$ ros2 launch neuronbot2_gazebo neuronbot2_world.launch.py
$ ros2 launch neuronbot2_nav bringup_launch.py use_sim_time:=true
그러고 나서 실행해 보면 아래와 같은 동작을 얻을 수 있다.
2. action server
/navigate_to_pose라는 action server를 활용해서
목적지 좌표를 로봇에 보내준다.
$ ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose
"pose: {header: {frame_id: map}, pose: {position: {x: 1.52, y: 1.92, z: 0.0}, orientation:{x: 0.0, y: 0.0, z: 0, w: 1.0000000}}}"
실행결과는 아래와 같다.
3. Topic
/goal_pose라는 Topic을 사용하여
목적지 좌표를 로봇에 보내준다.
$ ros2 topic pub -1 /goal_pose geometry_msgs/PoseStamped
"{header: {stamp: {sec: 0}, frame_id: 'map'}, pose: {position: {x: 2.2, y: 0.0, z: 0.0}, orientation: {w: 1.0}}}"
실행결과는 아래와 같다.
4. 프로그래밍
프로그래밍을 통해서 로봇에 목적지를 전달하는 방법도 있다.
바로 /navigate_to_pose action server를 사용하는 건데
2번에서 사용했던 action server로 코드를 사용하여
목적지를 전달하는 것이다.
이 방법은 추후에 더욱 자세히 다뤄보고자 한다.
이렇게 4가지 방법을 사용해서
목적지를 전달하여 Nav2를 활용한 Path Planning을
수행할 수 있다.
실습을 해보다가 gazebo와 Rviz에서의 위치가
맞지 않을 때는 로봇이 어떻게 움직이는지
궁금해서 실습해 보면 결과가 아래와 같고
로봇이 움직일 수 있는 범위 내에서
장애물 회피도 잘하고 어떻게든 움직여보긴 하지만
결국 로봇이 생각하는 주변환경과 가고자 하는 목적지의 위치가
생각과 다르기 때문에 다시 gazebo와 Rviz에서의 위치를
맞춰주니 다시 제대로 목적지를 찾아가는 것을 알 수 있었다.
오늘 실습을 통해 bringup 파일에서
다른 tool을 쉽게 키고 끌 수 있다는 것을 알게 되었고
SLAM만 제대로 잘해두면 ROS를 통해서 Navigation은
쉽게 실행할 수 있다는 것을 알게 되었다.
따라서, 앞으로 남은 Navigation 수업도
잘 들어서 SLAM 뿐만 아니라 Navigation도
다룰 줄 아는 로봇공학자가 되고자 한다!!
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
🎉누적 구매수 111만 건 돌파 감사제 100% 페이백 (04.21 - 04.26) | 패스트캠퍼스
통 크게! 전 구매 고객께 결제 금액을 100% 돌려드립니다!
fastcampus.co.kr