대표적인 ROS의 모바일로봇으로 터틀봇이 있다.
여기서는 터틀봇을 위주로 모바일로봇에 대해 설명한다.
터틀봇(Turtle Bot)
- 터틀(turtle)은 1967년에 개발된 교육용 컴퓨터 프로그래밍 언어인 로고(Logo)를 이용해 실제 로봇을 구동하기 위해 만들어진 터틀 로봇에서 유래되었음.
- ROS의 공식 로봇 플랫폼이다.
- SLAM, Navigation, Gazebo, RViz 등을 서포트함
- TurtleBot3의 하드웨어는 오픈소스로 깃허브에 제공되어서 3D 프린터로 출력이 가능하다.
TurtleBot3 네트워크
PC와 TurtleBot을 연동하는 경우
- gedit ~/.bashrc
- 위 명령어로 bashrc 파일을 열어서 아래와 같이 변경한다. IP 주소는 터미널에서 ifconfig를 입력하면 알 수 있다.
- ROS_MASTER_URI = http://IP_OF_REMOTE_PC:11311
- ROS_HOSTNAME = IP_OF_TURTLEBOT
PC에서 시뮬레이션만 돌리는 경우
- ROS_MASTER_URI = http://IP_OF_REMOTE_PC:11311
- ROS_HOSTNAME = IP_OF_REMOTE_PC
TurtleBot3 원격 제어
- roscore 구동 [Remote PC]
roscore
- turtlebot3_robot.launch 런치 파일 실행 [TurtleBot]
roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen
- turtlebot3_teleop_key.launch 런치 파일 실행 [Remote PC]
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch --screen
TurtleBot3 시각화
RViz 실습
터미널에서 아래처럼 코드를 입력한다. (모든 설치는 완료되었다고 가정, 패키지 미설치시 Robotis 사이트에서 설치 바람)
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_bringup turtlebot3_model.launch
burger 모델을 기준으로 시각화를 진행한다. 만약 waffle 모델을 이용하는 경우 burger 대신 waffle을 입력하면 된다.
모두 입력하면 아래와 같은 RViz 시각화 tool이 열린다.
ctrl + c를 눌러서 위의 RViz를 닫고, 아래의 코드로 다시 RViz를 열자.
아래의 코드는 로봇이 바라보는 방향(오도메트리 정보)을 화살표로 나타내준다.
roslaunch turtlebot3_fake turtlebot3_fake.launch
방향키를 이용해서 로봇을 제어해보자. 터미널 창을 따로 열어서 아래의 코드를 입력하자.
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
방향키로 로봇의 속도를 제어하면 다음과 같이 로봇의 움직임이 어떤지를 시각화할 수 있다.
이번에는 오도메트리 정보를 끄고 TF를 확인해보자.
그림과 같이 오도메트리를 체크 해제하고, 하단의 TF를 체크한다.
TF는 로봇의 모듈들이 어떤식으로 연결되고 움직일 때 어떻게 구동되는지를 시각화할 수 있다.
Gazebo 실습
또다른 시각화 툴인 Gazebo를 실습한다.
아래의 코드를 입력하여 가제보 툴을 실행한다. 원하는 맵을 골라서 실행하면 되겠다.
roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_gazebo turtlebot3_house.launch
가제보를 실행하면 다음과 같은 프로그램이 실행된다.
아래의 코드로 키보드 입력을 활성화한다.
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
가제보 툴을 켠 상태로 RViz를 실행해보자. RViz로 로봇의 라이다 센서가 맵을 센싱하는 것을 시각화할 수 있다.
다음의 코드를 입력해서 RViz를 실행하자.
roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
실행하면 라이다 센서 데이터가 시각화된다. Size(m)을 레이저 포인터가 잘 보이도록 적당한 크기로 조정하자.
로봇을 방향키로 움직이면서 어떤 식으로 센싱이 이뤄지는지를 확인해보자.
종료하고 SLAM 시뮬레이션 RViz을 새로이 실행해보자. SLAM은 Localization과 Mapping가 동시에 이뤄진다.
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
아래와 같이 맵이 나타난다. 로봇을 움직여서 맵이 어떻게 생성되는지 확인하자.
맵이 완성되면 다음의 명령어로 지도 저장이 가능하다. (pgm 파일로 저장된다.)
rosrun map_server map_saver -f ~/map
마지막으로 네비게이션을 실행한다. SLAM을 종료하고 다음의 명령어를 입력해서 네비게이션을 실행하자.
참고로 내가 제작한 지도를 사용한다.
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
Navigation 시뮬레이션에서는 particle filter 방식을 이용한다.
2D Pose Estimate로 현재 로봇이 위치하고 바라보는 방향을 선택한다.
2D Nav Goal을 이용해서 로봇을 원하는 위치와 바라보는 방향으로 위치할 수 있다.
로봇이 스스로 방향을 찾고 장애물을 피해 목표 위치로 이동한다.
출처
- ROS 강의 Chapter10. 모바일로봇: https://www.youtube.com/watch?v=rV-POzbzoHc&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=10