Turtlesim
은 ROS 2를 학습하기 위한 가벼운 시뮬레이터이다. ROS 2가 가장 기본적인 레벨에서 무엇을 수행하는지 보여준다. rqt
는 ROS 2를 위한 GUI 툴이다. 명령 줄을 통해서도 rqt
를 대체할 수 있지만 사용자 친화적인 GUI를 이용해 ROS 2 요소들을 보다 쉽게 다룰 수 있다.
turtlesim
설치ROS 2에 turtlesim
패키지를 설치한다.
sudo apt update
sudo apt install ros-foxy-turtlesim
패키지가 잘 설치되었는지 확인하자.
ros2 pkg executables turtlesim
다음과 같이 나와야 한다.
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
ros2 run turtlesim turtlesim_node
임의의 모양을 가진 거북이가 화면 중앙에 배치된 걸 볼 수 있다.
터미널 바로 아랫줄에 노드로부터 다음과 같은 메시지가 출력된다.
[INFO] [1659325767.440249889] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [1659325767.441517912] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
기본 설정 이름은 turtle1
이고, 생성되는 기본 좌표를 알 수 있다.
turtlesim
사용거북이를 제어하기 위해 새로운 노드를 생성해보자.
먼저 새 터미널을 열고, 다음 명령어를 수행한다.
ros2 run turtlesim turtle_teleop_key
이 때, turtlesim_node
를 실행하는 터미널, turtle_teleop_key
를 실행하는 터미널, tirtlesim
세 개의 창이 실행되고 있어야 한다.
화살표 키를 통해 제어할 수 있으며, 이동 시 이전 경로를 선으로 표시해준다.
화살표 키를 한 번 누를 때마다 특정 이동 거리를 이동하고 정지한다. 이는 사용자와 로봇간의 연결이 끊긴 경우를 대비하기 위해서다.
list
명령을 수행하여 node와 관련된 service, topic, action을 볼 수 있다.
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
rqt
설치터미널을 열어 rqt
패키지를 설치하자.
sudo apt update
sudo apt install ~nros-foxy-rqt*
rqt 실행 명령은 다음과 같다.
rqt
rqt
사용첫 실행시 빈 화면이 나올 것이다. Plugins > Services > Service Caller 를 차례대로 선택하자.
rqt
가 플러그인을 찾는 데 시간이 조금 걸릴 수 있다. 클릭 시 제대로 나오지 않으면 해당rqt
를 닫고 터미널에rqt --force-discover
를 수행하자.
Service 왼쪽에 위치한 새로고침 버튼을 통해 turtlesim
의 이용가능한 서비스를 확인하자.
Service 오른쪽에 위치한 드롭다운 리스트를 클릭하면 tirtlesim
의 서비스를 볼 수 있다.
rqt
의 /spawn
서비스를 사용해보자. 새로운 거북이를 turtlesim
윈도우에 생성할 수 있다.
다음 사진과 같이 새 거북이의 좌표와 이름을 설정할 수도 있다.
기존에 존재하는 이름(eg. tirtle1)을 사용할 경우
turtlesim_node
를 수행하는 터미널에 다음과 같은 메시지가 출력된다.[ERROR] [turtlesim]: A turtle named [turtle1] already exists
이후 Call 버튼을 통해 새 거북이를 생성한다. 설정한 해당 좌표에 거북이가 생성되어 있을 것이다.
rqt
창에서도 새로고침 버튼을 클릭하면 새롭게 생성한 거북이의 서비스도 볼 수 있다.
turtle1
의 /set_pen
서비스를 통해 turtle1
의 펜을 커스텀해보자.
r, g, b값을 조절하여 pen의 색깔을 변경할 수 있고, width로 펜의 두께 또한 변경할 수 있다.
값을 설정하고 나서 Call 버튼을 누르는 것을 잊지말자.
새롭게 생성된 거북이를 움직이기 위해서는 turtle1
의 cmd_vel
을 새 거북이로 재맵핑 해야한다.
새 터미널을 열고, 다음의 명령을 실행하자.
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=mcleroysane19/cmd_vel
이후 해당 터미널에서 제어할 수 있다.
turtlesim_node
터미널에서는 Ctrl + C
를 눌러, teleop 터미널에서는 q
를 눌러 종료할 수 있다.