[ROS2]turtlesim으로 로봇제어하기

윤성웅·2025년 2월 14일
0

ROS2 레시피

목록 보기
3/3

목표

  • tutlesim 패키지 설치 및 사용법 배우기
  • rqt 설치 및 사용법 배우기

1. turtlesim 설치하기

# src로 이동
cd /worpsace
mkdir -p src
cd src

# 레포지토리 받아오기
git clone -b humble https://github.com/ros/ros_tutorials.git
  • 이렇게 하면 ros_tutorials저장소[레포지토리]가 src 디렉토리에 복제된다.
  • 해당 레포지토리는 구조는 아래와 같은데,
📦ros_tutorials
 ┣ 📂ros_tutorials
 ┣ 📂roscpp_tutorials
 ┃ ┣ 📂add_two_ints_client
 ┃ ┣ 📂add_two_ints_server
 ┃ ┣ 📂add_two_ints_server_class
 ┃ ┣ 📂anonymous_listener
 ┃ ┣ 📂babbler
 ┃ ┣ 📂cached_parameters
 ┃ ┣ 📂custom_callback_processing
 ┃ ┣ 📂launch
 ┃ ┣ 📂listener
 ┃ ┣ 📂listener_async_spin
 ┃ ┣ 📂listener_class
 ┃ ┣ 📂listener_multiple
 ┃ ┣ 📂listener_single_message
 ┃ ┣ 📂listener_threaded_spin
 ┃ ┣ 📂listener_unreliable
 ┃ ┣ 📂listener_with_tracked_object
 ┃ ┣ 📂listener_with_userdata
 ┃ ┣ 📂node_handle_namespaces
 ┃ ┣ 📂notify_connect
 ┃ ┣ 📂parameters
 ┃ ┣ 📂srv
 ┃ ┣ 📂talker
 ┃ ┣ 📂time_api
 ┃ ┣ 📂timers
 ┣ 📂rospy_tutorials
 ┃ ┣ 📂001_talker_listener
 ┃ ┣ 📂002_headers
 ┃ ┣ 📂003_listener_with_user_data
 ┃ ┣ 📂004_listener_subscribe_notify
 ┃ ┣ 📂005_add_two_ints
 ┃ ┣ 📂006_parameters
 ┃ ┣ 📂007_connection_header
 ┃ ┣ 📂008_on_shutdown
 ┃ ┣ 📂009_advanced_publish
 ┃ ┣ 📂msg
 ┃ ┣ 📂srv
 ┃ ┣ 📂test
 ┗ 📂turtlesim
 ┃ ┣ 📂action
 ┃ ┣ 📂images
 ┃ ┣ 📂include
 ┃ ┣ 📂launch
 ┃ ┣ 📂msg
 ┃ ┣ 📂src
 ┃ ┣ 📂srv
 ┃ ┣ 📂tutorials
  • 우리는 여기서 다른 건 안 건드리고 turtlesim만 쓸거다.
# 빌드 도구 설치
sudo apt-get update
sudo apt-get install -y python3-colcon-common-extensions

# 패키지 빌드
cd /workspace
colcon build --symlink-install --packages-select turtlesim

cf. 명령어를 살펴보자면,

  • colcon build: 패키지를 빌드하는 명령어
  • --symlink-install: 패키지를 심볼릭 링크로 설치하여 소스 코드 수정시 바로 반영하도록 함
  • --packages-select turtlesim: turtlesim만 빌드(전체빌드는 아니다)
# 환경설정 업데이트
source /workspace/install/setup.bash

2. turtlesim 실행시키기

# 실행
ros2 run turtlesim turtlesim_node
  • 위 명령어를 실행하면 gui창에 거북이가 나타날 것이다.

  • 결과:

cf.만약 아래와 같은 오류가 발생한다면?

→이는 컨테이너OS로부터 로컬OS쪽으로 gui데이터를 받아오지 못하는 건데, 이를 해결하기 위해 터미널을 하나 더 열고 X11 Forwarding을 활성화한다.
(호스트의 X서버가 컨테이너와 통신할 수 있도록 허용하기 위함)

admin@admin-desktop:~$ xhost +local:docker 

3. turtlesim 작동시키기

cf.status 확인하기
위에서 두개의 터미널을 켠 상태에서 추가적으로 하나의 터미널을 더 열어서, 컨테이너에 접속후 아래 명령어를 쳐보자.

  • 코드
rqt_graph
  • 결과

    →위 그림은 현재 돌아가고 있는 노드와 토픽, 액션, 서비스들 간의 관계를 도식화한 것이다.
    이를 통해:
    현재 어떤 노드가 돌아가고 있고, 어떤 노드가 끊겨있는지,
    어떤 토픽이 전달되고, 어떤 토픽이 발행되지 않았는지 등
    여러가지 복잡한 관계를 하나의 그림으로 시각화하여, 쉽게 확인하는 것이 가능하다.

하지만, 위 그림을 보아도 이해하기가 어려우면, 항목별로 정리해서 리스트를 뽑아볼수도 있다.

  • 코드
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
  • 결과

    • ros2 node list는 현재 실행 중인 node 목록을 보여준다.

    • ros2 topic list는 현재 실행 중인 topic 목록을 보여준다.

    • ros2 service list는 현재 실행 중인 service 목록을 보여준다.

    • ros2 action list는 현재 실행 중인 action 목록을 보여준다.

위 단서를 취합해보면 아래와 같이 설명할 수 있다.

아직까지는 node가 뭔지, 토픽, 서비스, 액션이 모를 수 있다. 현재로서는 그냥 그런게 있나보다 하고 넘어가도 좋다.

4. rqt 설치 및 실행

이번에는 rqt를 설치하고 실행해보겠다.

  • 코드
# 업데이트 및 설치
sudo apt update
sudo apt install ~nros-humble-rqt*

# 새로운 터미널에서 rqt명령어 실행
rqt
  • 결과

    (처음 열면 위와 같은 설명문구가 뜨는데, 여러 분석도구들을 보여주는 툴이라는 설명이다. 무시해도 된다.)

4-1.spawn service 실습

이제 상단의 Plugins 탭에 들어가서,
Services > Service Caller 순으로 클릭한다.

이제 좌측 상단에 있는 파란색 새로고침 버튼을 눌러준다.

4-2.set_pen service 실습

5. Remapping

profile
풀스택 웹개발자에 이어 풀스택 모빌리티 개발자를 꿈꾸는 학생입니다.

0개의 댓글