[Dashing][CLI Tools] 2. Introducing turtlesim and rqt
이 글은 아래의 자료를 참고로 만들어졌습니다.
docs.ros.org/en/dashing/Tutorials/Turtlesim/Introducing-Turtlesim.html
Introducing turtlesim and rqt
Goal: Install and use the turtlesim package and rqt tools to prepare for upcoming tutorials.
Tutorial level: Beginner
Background
Turtlesim은 ROS 2를 배우기 위한 간단한 시뮬레이터입니다. Turtlesim은 ROS 2에서 가장 기본적인 수준의 작업들을 보여주며, 나중에 실제 로봇이나 로봇 시뮬레이터로 무엇을 할지에 대한 아이디어를 제공합니다.
rqt는 ROS 2의 GUI(Graphical User Interface) 도구입니다. rqt에서 할 수 있는 모든 작업은 명령어(CLI, Command-Line Interface)로도 가능합니다. 하지만, rqt는 ROS 2를 조작하기 보다 쉬우며, 사용자 친화적인 방법을 제공합니다.
이번 튜토리얼에서는 ROS2 의 중요한 개념들(nodes, topics, servies)을 다룰 것입니다. 각각의 개념들은 추후의 튜토리얼에서 더욱 상세히 알아볼 것입니다. 따라서, 지금은 tools을 설정하고, 대략적인 감을 잡으면 되겠습니다.
Prerequisites
이전 글인 환경설정을 미리 하였다는 가정에 진행하겠습니다.
즉, 아래의 명령어를 실행하여
~/.bashrc의 환경 설정을 해주었거나,
$ echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
또는,
모든 terminal에 아래의 명령어를 실행했다고 가정하겠습니다.
$ source /opt/ros/dashing/setup.bash
Tasks
1 Install turtlesim
turtlesim 패키지를 아래의 명령으로 설치합니다.
$ sudo apt update
$ sudo apt install ros-dashing-turtlesim
패키지가 설치되었는지 아래의 명령을 통해 확인할 수 있습니다.
$ ros2 pkg list
(생략)...
turtlesim
...(생략)
그리고 노드, 패키지 등과 같은 용어는 다음과 같습니다.
노드(node) : 프로그램의 재사용성을 극대화하기 위해 최소 단위의 실행 가능한 프로세서
패키지(package) : 하나 이상의 노드 또는 노드 실행을 위한 정보 등을 묶어 놓은 것
메타패키지(metapackage) : 패키지의 묶음
해당 패키지에 실행가능한 노드들을 알아보는 방법은 다음과 같다.
$ ros2 pkg executables turtlesim
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
2 Start turtlesim
turtlesim을 시작하기 위해서, 아래의 명령을 실행합니다.
$ ros2 run turtlesim turtlesim_node
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
노드를 실행하면 터미널에는 메세지가 출력됩니다.
그리고 simulator window에 random한 turtle이 가운데이 나타납니다.
default turtle의 이름이 turtle1이고
default 좌표에 turtle1이 스폰(spawn)된 것을 볼 수 있습니다.
3 Use turtlesim
위의 실행한 terminal은 그대로 놓고,
새로운 terminal을 열어 아래의 명령어를 실행합니다.
$ ros2 run turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
'Q' to quit.
그리고 turtle_teleop_key를 실행한 터미널을 활성화(클릭)시킨 상태에서
터미널에 제시된 키보드를 입력(방향키, G,B,V,C,D,E,R,T)하면 turtle1이 움직이거나 회전합니다.
그리고 "pen"으로 turtle의 경로를 그려줍니다.
참고사항으로,
방향키를 눌렸을 때 짧은 거리를 가고 멈추는데
이는 실제 상황에서 operator의 통신이 끊겼을 때에 로봇이 계속 명령을 실행하지 않기 위해서라고 합니다.
그리고 위 두 노드들(turtlesim_node, turtle_teleop_key)을 실행 중인 상태에서
각 노드들(nodes)과 노드들의 통신 방법들(topic, service, action)을 아래의 명령으로 알아볼 수 있습니다.
$ ros2 node list
/turtlesim
/teleop_turtle
$ ros2 topic list
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
$ ros2 service list
/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
/teleop_turtle/get_parameter_types
/teleop_turtle/get_parameters
/teleop_turtle/list_parameters
/teleop_turtle/set_parameters
/teleop_turtle/set_parameters_atomically
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically
$ ros2 action list
/turtle1/rotate_absolute
4 Install rqt
새로운 terminal을 열어 rqt와 plugins를 설치합니다.
$ sudo apt update
$ suod apt install ros-dashing-rqt*
그리고 rqt를 실행합니다.
$ rqt
5 Use rqt
rqt를 처음 실행했을 경우, 빈 화면일 것입니다.
위쪽의 메뉴바에서 아래를 선택합니다.
Plugins > Services > Service Caller
turtlesim_node와 turtle_teleop_key를 실행 중이라면,
새로고침(refresh) 버튼을 누르고 service의 list를 다음과 같이 볼 수 있습니다.
5.1 Try the spawn service
rqt를 이용하여 /spawn 서비스를 사용해보겠습니다.
이 서비스는 새로운 turtle을 simulator window에 추가합니다.
x = 1 (type: float),
y = 1 (type: float),
name = 'turtle2' (type: string)으로 설정하고
Call 버튼을 눌러 실행시키면
Responce와 simulator window에 새로운 turtle가 (x,y)에 생겼음을 볼 수 있습니다.
만약 name = 'turtle1'으로 설정한다면
이미 default로 'turtle1'이 있기 때문에
turtlesim_node 터미널에서 에러 메세지를 볼 수 있습니다.
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
5.2 Try the set_pen service
이번에는 /set_pen 서비스를 사용해보겠습니다.
r, g, b 값은 uint8로 0 ~ 255(2^8-1)의 범위를 가지고 있습니다.
그리고 width는 "pen"의 thickness를 뜻합니다.
빨간색의 width = 5로 아래와 같이 설정을 한 후
Call 버튼을 눌러줍니다.
그리고 turtle_teleop_key 터미널에서 키보드를 이용하여 움직이면,
우리가 원하였던 세팅으로 바뀌었음을 알 수 있습니다.
하지만, turtle2는 remapping하지 않아 움직이지 않습니다.
6 Remapping
새로운 터미널에 다음 명령어를 실행합니다.
$ ros2 run turtlesim turtle_teleop_key turtle1/cmd_vel:=turtle2/cmd_vel
위 명령을 실행한 터미널이 활성화 되었을 경우,
turtle2를 조종할 수 있습니다.
turtle1은 이전 turtle_teleop_key를 실행한 terminal에서 조종할 수 있습니다.
7 Close turtlesim
turtlesim을 종료하고 싶다면,
간단하게 terminal을 종료하면 됩니다.
만약 terminal을 계속 open한 상태에서 종료하고 싶다면,
turtlesim_node에서는 Ctrl + C를 입력하고,
turtle_teleop_key에서는 Q를 입력하면 됩니다.