앞에서 시뮬레이션 환경의 기본편을 알아보았다.
이번시간에는 자율주행을 위한 네비게이션 요소에 대해서 알아보고 실용적인 실습도 진행해본다.
예제코드를 통해 자율주행에 무엇이 필요한지 간단하게 알아보고, 자세한 활용방법에 대한 것은 차후 알아보도록 하겠다.
위 모델링 파일이 이번시간에서 사용될 시뮬레이션 Map이다.
중간에 서빙로봇 kobugi
가 위치한 것을 확인 할 수 있다.
가장 먼저해야 할 일으로 자율주행 하고자 하는 맵에 대한 정보가 필요하다.
이는 로봇의 카메라 정보로 하거나 기존에 가지고 있는 정보를 통해 설정 할 수 있다.
위 화면은 gmapping_demo
를 실행한 모습이다.
rviz
상에서 로봇이 인식한 맵을 확인 할 수 있고, 로봇을 움직여서 맵을 만들 수 있다.
로봇 조작은 아래의 명령어로 키보드로 조작할 수 있다.
roslaunch turtlebot_teleop keyboard_teleop.launch
로봇을 조작하여 위와 같이 mapping을 할 수 있었다.
mapping이 끝났다고 해서 자율주행을 할 수 있을까? 정답은 그렇지 않다.
로봇의 위치나 어디를 향하는 지를 알아야 제대로 된 자율주행을 만들 수 있다.
amcl
이라는 알고리즘을 통해 로봇의 위치를 알 수 있다. 아래의 실행화면을 보자.
화면을 보면 초록색 화살표가 보이는데 초기에는 퍼져서 분포되어 있다가 로봇을 조작하자
로봇의 위치와 거의 흡사한 위치를 추정하는 것을 알 수 있다.
amcl
알고리즘에 대해서는 차후 알아보자.
앞서 두가지 요소를 알아봤는데, 여기에 경로계획이라는 시스템이 있어야 자율주행이 가능하다.
그 중에는 장애물을 피하고, 목적지에 도달하는 알고리즘이 필요하다.
로봇의 목적지를 아래의 rviz 실행화면의 상단에 있는 2D Nav Goal
을 통해 설정이 가능하다.
목적지를 설정해두고 장애물을 추가하였을 때 어떤식으로 로봇이 동작하는 지 확인해보자.
로봇이 지나가는 경로에 여러가지 장애물을 추가해보았다.
장애물이 나타나는 순간 자연스럽게 경로를 꺾어 피해서 가는 모습을 확인 할 수 있었다.
아래의 실행화면은 장애물을 로봇이 어떻게 인식하여 회피하는 지 확인해보자.
로봇이 장애물을 확인하여 회피경로를 통해 이동하는 것을 확인할 수 있다.
실행화면을 자세히보면 초록색 경로와 빨간색 경로가 나타나는데,
초록색 경로는 전체경로, 빨간색 경로 장애물 회피경로이다.
로봇의 아래쪽에 깔린 여러가지 색상을 확인 할 수 있는데,
로봇이 앞으로 가야하는 경로의 우선순위(빨간색 우선)를 나타낸다고 볼 수 있다.
아래의 rqt_graph
실행 화면으로 각 노드가 주고받는 토픽에 대해서 알 수 있다.
cmd_vel -> 네이베이션 스텍에 출력을 받아서 모터의 속도로 변환하는 역할
LaserScan -> 스캐너의 스캔값을 네이게이션에 전달하는 역할
odom -> 네이게이션 스텍에 오도메트리 값 전달
tf -> 네이게이션 스텍에 map을 기준으로 로봇의 위치나 센서의 tf 정보를 전달하는 역할.
move_base -> 모든 정보를 모아서 로봇을 목적지까지 도달 할 수 있는 명령을 전달.