본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 조현준 #2주차 - ROS의 컨셉, 명령어, 도구

반응형

이번주에는 ROS강의의 Chapter 4~6을 공부했다.

 

 

 


CHAPTER 4

Chapter 4에서는 ROS의 중요 컨셉에 대하여 설명하고 특히 그 중에서도 통신방법에 대하여 많은 설명이 있었다.

 

ROS의 핵심 용어

 

컨셉

 

  • Node
    • 노드는 ROS에서 최소단위의 실행가능한 프로세서(?라고 설명하는데 프로그램도 맞는말같다)
    • ROS에서 최소 실행단위로 프로그램을 나누어 작업하게 한다.
      • 이로인해 단위테스트가 훨씬 용이하다는 장점이 있다.
  • Package
    • 하나 이상의 노드의 묶음
    • 노드의 실행을 위한 환경변수같은 정보들을 묶어 놓은 것
    • 패키지의 묶음은 메타 패키지라고 한다.
  • Message
    • ROS에서는 메시지 통신을 통해 노드간의 데이터를 주고 받게 된다.
    • 메시지의 자료형은 Int, Float, Boolean과 같은 변수의 형태이다.
    • 메시지 안에 메시지를 품은 간단한 데이터 구조나 메시지들로 이루어진 배열과 유사한 형태의 구조도 사용할 수 있다.

 

통신 방식

  • Topic
    • ROS에서 사용하는 단방향, 연속성의 성격을 가지는 통신 방식이다.
    • Publisher : 메시지를 발행하는 노드 ( 비유하자면 신문사와 비슷하다)
    • Subscriber : 메시지를 구독하는 노드( 신문을 구독하는 독자)
    • 1 : 1, 1 : N, N : N 형식의 통신이 모두 가능하다.
  • Service
    • 양방향, 일회성의 성격을 가지는 통신방식이다.
    • 클라이언트가 서버에 정보를 요청해서 받는 방식이다.
  • Action 
    • 서비스와 작동원리는 비슷하지만 중간 결과를 보고해준다는 차이점이 있다.
    • 강사님의 설명으로는 사용하는 비중이 매우 적다고 한다...

메시지 통신의 종류와 구조

TOPIC 통신 시나리오

  1. 마스터 구동 - $ roscore
  2. Subscriber 노드 구동 - $ rosrun PACKAGE_NAME NODE_NAME
  3. Publisher 노드 구동$ rosrun PACKAGE_NAME NODE_NAME
  4. Publisher 정보 알림
    • 마스터(ros_master)는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알림
  5. Publisher 노드에 접속 요청
    • 마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속을 요청함
    •  
  6. Subscriber 노드에 Publisher노드가 접속요청에 대한 응답을 보냄
    • 이때, Publisher 노드의 TCP URI 주소와 포트번호를 전송한다.
  7. TCPROS를 이용해 퍼블리셔 노드와 직접연결
  8. 메시지 전송

TCP ROS설명

 

이전에 ROS를 사용할때는 정확한 내용을 모르고 했었어서 힘든적이 많았는데, 스터디를 하며 정확한 개념을 알게되어 큰 도움이 될것같다는 생각이 들었다. 


CHAPTER 5

chapter 5에서는 ROS 명령어에 대하여 설명했다.

http://wiki.ros.org/ROS/CommandLineTools

 

ROS/CommandLineTools - ROS Wiki

The following tools are built when a top-level make is called in $ROS_ROOT. They are installed to $ROS_ROOT/bin, which should have been added to your PATH variable as part of the installation process. If this is not the case, please follow the Installation

wiki.ros.org

 


CHAPTER 6

chapter 6에서는 4개의 실습을 통해 패키지와 노드를 사용하는 방법, RViz와 RQT를 사용하는 방법을 배웠다.

 

실습 1.  rqt_image_view

rqt의 이미지 시각화 도구를 사용해보고, 토픽에 대한 개념을 실습했다.

$ roscore
# ros mater 실행

 

$ rosrun usb_cam usb_cam_node
# 웹캠(설정을 바꾸면 다른 카메라도 사용가능)의 데이터를 /usb_cam/image_raw 토픽에 발행

 

- 강의에서는 uvc_camera 패키지의 uvc_camera_node를 사용하지만 필자는 ros melodic을 사용중이기에 uvc_camera패키지의 지원이 중단되어, usb_cam패키지를 사용했다.

- Virtual Box를 이용할 시 웹캠이 ubuntu에서 연결되지 않는 오류가 발생할 수 있다. 필자는 아래의 블로그를 참조하여 해결하였다.

https://webnautes.tistory.com/1371

 

VirtualBox에 설치된 Ubuntu에서 웹캠(webcam) 사용하는 방법

버추얼박스에 설치된 우분투에서 웹캠을 사용하는 방법을 다룹니다. 최초작성 2019. 8. 23 버추얼박스의 가상머신 창에 있는 메뉴를 보면 아래 스크린샷처럼 장치 > 웹캠에서 컴퓨터에 연결되어

webnautes.tistory.com

 

$ rqt_image_view

처음에 아무것도 보이지 않는다면 좌측 상단의 토픽 선택창에서 토픽을 선택하면 보인다.

 

rqt_image_view 실행화면

실습 2.  rqt_graph

두가지의 토픽을 발행하고 구독하며, rqt_graph를 통해 구조를 시각화했다.

$ rosrun turtlesim turtlesim_node
# turtlesim 패키지의 turtlesim_node를 실행하여 화면에 터틀이 실행되게 한다.
# 이 노드는 /turtle/cmd_vel 토픽을 구독

 

$ rosrun turtlesim turtle_teleop_key
# turtlesim 패키지의 turtle_teleop_key를 실행하여 키보드 방향키 입력을 /turtle/cmd_vel 토픽에 발행한다

 

$ rosrun usb_cam usb_cam_node
# 위의 설명 참고
$ rosrun image_view image_view image:=usb_cam/image_raw
# 위의 코드와 다른 부분은 직접 토픽을 입력해준 부분이다. (image:=usb_cam/image_raw)
$ rqt_graph
# 토픽들간의 구독, 발행관계를 그래프로 시각화해준다.

실습 2 실행화면

실습 3.  rqt_plot

이 실습에서는 터틀심 토픽의 내용을 시각화 해주는 rqt의 plot기능을 사용하는 방법을 학습한다.

 

$ rosrun turtlesim turtlesim_node
# 위의 설명 참고

$ rusrun turtlesim turtle_teleop_key
# 위의 설명 참고
$ rqt_plot /turtle1/pose
# /turtle1/pose 토픽의 내용들을 그래프로 도식화해준다.

실습 3 실행화면

 

실습 4.  rqt_bag

이 실습에서는 토픽을 기록한 후 재생하는 기능인 rosbag기능을 사용하고, rqt_bag을 이용하여 재생하는 방법을 학습한다.

 

$ rosrun usb_cam usb_cam_node
# 위의 설명 참고

$ rosbag record /usb_cam/image_raw
# rosbag record 'topic_name' : 'topic_name'라는 토픽을 구독하여 메시지 내용을 기록한다.
$ rqt_bag

# .bag 확장자를 가진 파일을 선택하면 재생하여 준다.

rosbag 실습 화면

 

실습을 하며 여러 시각화도구들을 이용하며, 토픽에 대한 개념도 다시 짚어볼 수 있어 좋았다.

개발을 하며 유용하게 사용할 수 있을 것같고, 특히 모의 테스트를 할 때 유용할 것같다.

 


강의 출처

https://www.youtube.com/@ROBOTISOpenSourceTeam

 

ROBOTIS OpenSourceTeam

We are an Open Source Team of ROBOTIS. With the open source hardware/software, our robot friends are hoping to enrich our lives. We mainly develop/support the Dynamixel SDK, OpenManipulator, OpenCM, OpenCR and OpenAutonomousCar. Our favorite platform is RO

www.youtube.com

 

반응형