Link
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의 핵심 개념을 이해하는 가장 효과적인 방법이다.
'Knowhow > ROS2' 카테고리의 다른 글
[ROS2 Foxy Tutorial 한글 번역] 6. Understanding parameters (0) | 2023.02.02 |
---|---|
[ROS2 Foxy Tutorial 한글 번역] 5. Understanding services (0) | 2023.02.01 |
[ROS2 Foxy Tutorial 한글 번역] 4. Understanding topics (0) | 2023.02.01 |
[ROS2 Foxy Tutorial 한글 번역] 3. Understanding nodes (0) | 2023.01.31 |
[ROS2 Foxy Tutorial 한글 번역] 1. Configuring environment (0) | 2023.01.31 |