09-17 16:42
Notice
Recent Posts
Recent Comments
반응형
관리 메뉴

BAN2ARU

[ROS2/FOXY] 튜토리얼 2. Using turtlesim, ros2, and rqt 본문

Study/ROS

[ROS2/FOXY] 튜토리얼 2. Using turtlesim, ros2, and rqt

밴나루 2023. 6. 2. 12:54

ROS-foxy 튜토리얼은 공식 홈페이지를 참조하여 작성함

 

이전 튜토리얼 글 모음

 

목표 : turtlesim 패키지와 rqt tool을 설치하고 사용해 보기

 

Background

Turtlesim은 ROS2를 공부할 때 사용하는 시뮬레이터이다. ROS2에서 할 수 있는 가장 기본적인 수준의 작업을 제공하여 이를 통해 추후에 실제 로봇이나 로봇 시뮬레이션에 적용할 수 있다.

ROS2 툴은 ROS 시스템을 설치, 관리 및 상호작용하는 데 활용되며, 다양한 command를 지원한다. ROS 툴은 다양한 툴이 있는데 그중 rqt를 활용할 예정이다. rqt는 ROS+QT의 합성어로 ROS2용 GUI 툴로 사용자가 보다 편하게 개발할 수 있도록 해준다.

Task

1. turtlesim 설치하기

우선 turtlesim 패키지를 설치를 한다.

sudo apt update
sudo apt install ros-foxy-turtlesim

패키지가 설치되었는지는 다음 명령어를 통해 확인할 수 있다.

ros2 pkg executables turtlesim

다음과 같이 turtles im draw_square mimic turtle_teleop_key turtlesim_node가 확인되면 된다.

2. turtlesim 시작하기

turtlesim을 시작하기 위해서는 터미널에 다음과 같은 명령어를 작성한다.

ros2 run turtlesim turtlesim_node

위와 같은 거북이 모양의 GUI가 뜨는 것을 확인할 수 있으며, 터미널에서는 아래와 같은 메시지를 확인할 수 있다. 메시지에서 [INFO] 부분을 통해 우리는 turtlesim의 default node name과 좌표를 확인할 수 있다.

docker 버전

docker를 활용하는 경우에는 새로운 터미널을 연 후 turtlesim_node를 다음과 같은 명령어를 통해 실행시켜 준다. docker exec는 실행 중인 컨테이너에 명령어를 실행할 수 있는 명령어이다. 이를 통해 도커 컨테이너 내부에서 turtlesim_node를 실행시키고 추후에 turtle_teleop_key를 통해 조작하기 위해 사용하였다.

docker start [컨테이너명:ros_cyg]
docker exec [컨테이너명:ros_cyg] /bin/bash -c "source /opt/ros/foxy/setup.bash && ros2 run turtlesim turtlesim_node"

3. turtlesim 사용하기

이제 새로운 터미널을 연 후 거북이를 조작할 수 있는 새로운 노드를 실행한다. 도커의 경우 컨테이너에 접속한 후 해당 명령어를 작성해 주면 된다. 명령어를 작성하고 나면 turtle_teleop_key가 실행되는 터미널에서 방향키를 통해 거북이를 조작할 수 있다.

ros2 run turtlesim turtle_teleop_key

해당 시점에서는 3개의 창이 열려있어야 한다.

  1. turtlesim_node를 실행하는 터미널
  2. turtle_teleop_key를 실행하는 터미널
  3. turtlesim 창

현재 실행 중인 node, topic, service, action list를 확인하고 싶다면 아래와 같은 명령어를 통해 확인할 수 있다. 도커의 경우에는 앞선 docker exec 명령어를 통해 확인할 수 있다.

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

4. rqt 설치하기

새로운 터미널을 열어서 rqt를 설치해 주자.

sudo apt update
sudo apt install ~nros-foxy-rqt*

rqt를 실행하기 위해서는 rqt를 터미널에 입력해 주면 된다.

rqt

Docker 버전 명령어 및 rqt시 오류가 발생한다면

Window docker 환경에서 local 모니터에서 띄우는 경우에는 MobaXterm을 활용하자. putty+Xming 조합의 경우에는 오류가 뜨면서 제대로 rqt가 뜨지 않는 오류가 있어 stack overflow를 참조하여 MobaXterm으로 진행하였더니 제대로 실행이 된다! 아마 MobaXterm은 SSH프로그램이면서 Xserver가 내장되어 있어 잘 진행되는 것으로 추측한다.

docker exec [컨테이너명:ros_cyg] /bin/bash -c "source /opt/ros/foxy/setup.bash && rqt"

5. rqt 사용하기

최초 rqt 실행 시에는 빈 화면이 나올 것이다. 여기서 Plugins - Services - Service Caller 를 선택해 주자. 만약 Plugins를 클릭하였는데 Services라는 항목이 보이지 않는다면 rqt --force-discover 명령어를 활용하여 rqt를 실행시켜 주자

Service와 Call 사이의 버튼을 클릭한 후 /spawn을 클릭하자.

5.1 spawn 서비스 사용하기

이름에서 유추할 수 있듯이 /spawn은 Turtlesim 창에 또 다른 거북이를 생성할 수 있다.

name 부분에 더블클릭하여 원하는 이름을 넣어줄 수 있다. 이외에도 x와 y 좌표 또한 변경하여 거북이를 생성할 수 있다.

모든 설정을 완료하였으면 Call을 클릭하자. Call을 클릭하면 새로운 거북이가 생성되었음을 확인할 수 있다.

5.2 set_pen 서비스 이용하기

Service 쪽에서 /turtle1/set_pen을 찾아서 클릭해 주자. 아래와 같이 r, g, b 값 및 width 값을 줄 수 있는 창을 확인할 수 있다. 감이 좋은 사람이면 set_pen의 기능이 무엇인지 유추하였을 텐데, 해당 set_pen 기능은 거북이의 발자국의 속성에 관한 것이다.

기존에는 거북이의 발자국이 하얀색 선으로 나오는데 이를 초록색으로 변경해 보자. g에 255의 값을 주고 width에 3으로 변경 후 call을 하자. 그러면 아래와 같이 발자국의 색이 변경되는 것을 확인할 수 있다.

turtle1은 성공적으로 이동하고 보니 새로 생성한 ggobuk은 움직일 수가 없다. 이는 ggobuk에 대한 teleop node를 생성하지 않아서이다. 그럼 다음 스텝에서는 ggobuk 이를 움직여보자.

6. Remapping

ggobuk을 조종하기 위해서는 새로운 teleop이 필요하다. 현재 실행되고 있는 teleop 노드의 경우에는 turtle1만 조종할 수 있는데, 새로운 거북이(ggobuk) 또한 조종하기 위해서는 cmd_vel 항목을 다시 mapping 하여야 한다. 이를 remapping이라고 표현한다.

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

docker version

도커 버전의 경우는 아래와 같다. 새로운 터미널을 생성한 후 차례대로 진행하면 새로운 터미널에서는 새로운 거북이가 조종되며 기존의 teleop 터미널에서는 기존의 거북이가 조종되는 것을 확인할 수 있다.

docker exec -it ros_cyg /bin/bash
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=ggobuk/cmd_vel

7. turtlesim 종료

종료하려면 turtlesim_node에서 ctrl+c 키를 누르면 된다. 그리고 turtle_teleop_key 터미널에서는 q를 누르면 종료된다.

Summary

turtlesim과 rqt를 사용하여 ROS2의 기본적인 개념을 공부할 수 있었음!

728x90
Comments