Knowhow/ROS2

[ROS2 Foxy Tutorial 한글 번역] 2. Using turtlesim and rqt

침닦는수건 2023. 1. 31. 16:34
반응형

Link

https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html

 

Using turtlesim and rqt — ROS 2 Documentation: Foxy documentation

Open a new terminal and source ROS 2 again. At this point you should have three windows open: a terminal running turtlesim_node, a terminal running turtle_teleop_key and the turtlesim window. Arrange these windows so that you can see the turtlesim window,

docs.ros.org

 

Background

Turtlesim은 아주 가벼운 ROS2 입문용 시뮬레이터 예제다. 가장 기본적인 수준에서 ROS2가 어떻게 동작하는 지 알려주고 실제 사용할 로봇을 사용하기 이전에 감을 잡는데 도움이 된다. 

 

rqt는 ROS2 GUI 도구이며 단순히 커맨드라인을 통해 rqt의 모든 기능을 사용할 수 있다. ROS2에서 일어나는 일들을 시각화하여 조금 더 쉽게 이해할 수 있도록 도움을 준다. 

 

이 튜토리얼은 ROS2의 핵심 개념, 예를 들어 node, topic, service, 을 다룬다. 이는 튜토리얼에 기반이 되는 내용이니 잘 익혀두길 바란다.

 

Prerequisites 

2023.01.31 - [Develop/ROS2] - [ROS2 Foxy Tutorial 한글 번역] 1. Configuring environment 에서 다룬 설치 및 환경 설정을 잘 마쳤다는 전제 하에 진행된다.

 

Tasks

1. Install turtlesim

당연하게도, 터미널을 켠 뒤 setup file을 sourcing한다. (bashrc에 저장해두었다면 안해도 된다.) 그리고 turtlesim 패키지를 ROS2 distro(여기선 Foxy)로부터 설치한다. 

sudo apt update

sudo apt install ros-foxy-turtlesim

* 여기서 sudo apt update에서 오류날 때가 있는데 그럴 경우 2023.01.30 - [Trouble] - sudo apt-get update 시 ppa repository로 인한 error 해결법 참조!

 

설치가 끝나면 다음 커맨드로 확인까지 한다.

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]

출력된 문구로부터 중앙에 있는 거북이의 이름이 "turtle1"이라는 것을 알 수 있고 생성된 좌표도 알 수 있다. 

 

3. Use turtlesim

새로운 터미널을 열고 ROS2 sourcing을 다시 한다. 그리고 다음 커맨드를 통해 거북이를 컨트롤하기 위한 새로운 노드를 실행한다. 

ros2 run turtlesim turtle_teleop_key

여기까지 잘 따라왔다면 지금 3개의 윈도우가 열려있을 것이다. "turtlesim_node", "turtle_teleop_key" 노드를 실행시키고 있는 터미널과 거북이가 보이는 turtlesim 윈도우가 있을 것이다. "turtle_teleop_key" 터미널을 active시킨 뒤 거북이를 컨트롤할텐데 다른 터미널에 출력되는 결과를 잘 관찰해보아라.

 

키보드의 화살표 키를 이용하여 거북이를 이동시킬 수 있다. 거북이는 "pen"이 연결되어 있어 지나간 길이 윈도우 상에 계속 그려지도록 되어있다. 

 

화살표를 누르면 거북이가 짧은 거리를 이동한 뒤 자동으로 멈추는데 이는 실제로 로봇이 계속 움직이도록 설정하면 안 멈추고 통신 거리를 벗어나거나 사고를 겪을 수 있기 때문에 일반적으로 해두는 설정과 맞추어둔 것이다.

 

turtlesim이 갖추고 있는 service, topic, action 등을 보고 싶다면 "list" 커맨드를 이용해서 확인할 수 있다.

ros2 node list
ros2 topic list
ros2 service list
ros2 action list

이어지는 튜토리얼에서 자세한 내용을 더 다루게 될 것이다. 이번 튜토리얼 글의 목적은 개략적인 ROS2 그림을 설명하는 것이다. rqt를 이용해 GUI로 한 번 더 살펴보자.

 

4. Install rqt

ubuntu 20.04 대상으로 다음과 같이 입력하면 설치할 수 있다. 마지막 rqt 호출로 실행할 수 있다.

sudo apt update

sudo apt install ~nros-foxy-rqt*

rqt

 

5. Use rqt

처음 rqt를 실행하면 윈도우는 텅텅 비어있을 것이다. 걱정하지 말고, 상단에서 Plugins > Services > Service Caller 를 차례로 클릭해라.

 

rqt가 모든 플러그인들을 가져오는데 시간이 조금 걸릴 수 있다. 조금 기다려보고 그래도 아무것도 안 뜬다면 rqt를 일단 닫은 후 다음 rqt --force-discover 커맨드로 재실행해보아라.

새로고침 버튼을 통해서 조회할 수 있는 Service 목록을 확인해보고 "/spawn" service를 클릭해라.

 

5.1 Try the spawn service

rqt를 이용해 "/spawn" service를 호출해볼 것이다. 이름으로부터 추측했겠지만 또 다른 거북이를 윈도우에 생성하는 service이다. 

 

거북이마다 이름이 겹치면 안되니 name 행, Expression 열의 빈공간을 더블 클릭한 뒤 "turtle2"와 같은 새이름을 입력해라. Type을 보면 string인 것을 볼 수 있으니 string을 입력해주면 된다.

 

그 다음은 거북이를 생성할 위치 좌표를 입력해라. 예를 들어, x=1.0, y=1.0 같이 입력하면 된다.

만일 이름을 바꾸지 않고 거북이 이름이 겹칠 경우, 다음과 같은 에러 메시지를 받을 수 있다. 

[ERROR] [turtlesim]: A turtle named [turtle1] already exists

 

"turtle2"를 생성하기 위해 우측의 Call 버튼을 클릭하면 무작위 외형을 가진 거북이가 아까 입력한 위치에 생성되는 것을 볼 수 있다. 

 

rqt 상에서 refresh 버튼을 다시 누르면 이제 turtle2에 관한 service도 조회되는 것을 볼 수 있다. 

 

5.2 Try the set_pen service

이제 "turtle1"에 독특한 pen을 부여해주기 위해 "/set_pen" service를 사용해보자.

r,g,b는 각각 0~255 정수를 갖는 값으로 "turtle1"이 지나간 경로의 색깔을 변화시킬 수 있다. width 값은 당연하게도 경로의 두께를 변경할 수 있다.

 

"turtle1"이 두꺼운 빨간색 선을 그리도록 해보자면, r을 255로 변경하고 width를 5로 변경하면 된다. 값을 바꾼 뒤 Call 버튼을 누르는 것을 잊지 마라.

 

"turtle_teleop_key"을 실행했던 터미널로 돌아와 다시 거북이를 컨트롤해보면 아래와 같이 "turtle1"의 pen이 바뀐 것을 볼 수 있다. 

"turtle2"는 움직일 수 없는게 눈에 띌 지 모르겠다. 두번째 거북이는 "turtle1"의 "cmd_vel" topic을 "turtle2"로 remapping 해줌으로써 움직일 수 있다.

 

6. Remapping

또 새로운 터미널을 켜서 ROS2 를 sourcing 해준다. 그리고 다음 커맨드를 입력한다.

ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel

 

그러면 이 터미널에서 컨트롤 키를 입력했을 때 두번째 거북이가 움직이는 것을 볼 수 있다. 첫번째 거북이는 이전에 사용했던 터미널에서 컨트롤할 수 있다. 

 

7. Close turtlesim

종료는 "turtlesim_node"에서는 Ctrl+C , "teleop_key" 에서는 q를 입력하면 된다. (그냥 모조리 Ctrl + C 누르면 된다.)

 

Summary

turtlesim 과 rqt를 이용하는 것이 ROS2의 핵심 개념을 이해하는 가장 효과적인 방법이다.

 

반응형