이번주에는 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 통신 시나리오
- 마스터 구동 - $ roscore
- Subscriber 노드 구동 - $ rosrun PACKAGE_NAME NODE_NAME
- Publisher 노드 구동$ rosrun PACKAGE_NAME NODE_NAME
- Publisher 정보 알림
- 마스터(ros_master)는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알림
- Publisher 노드에 접속 요청
- 마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속을 요청함
- Subscriber 노드에 Publisher노드가 접속요청에 대한 응답을 보냄
- 이때, Publisher 노드의 TCP URI 주소와 포트번호를 전송한다.
- TCPROS를 이용해 퍼블리셔 노드와 직접연결
- 메시지 전송
이전에 ROS를 사용할때는 정확한 내용을 모르고 했었어서 힘든적이 많았는데, 스터디를 하며 정확한 개념을 알게되어 큰 도움이 될것같다는 생각이 들었다.
CHAPTER 5
chapter 5에서는 ROS 명령어에 대하여 설명했다.
http://wiki.ros.org/ROS/CommandLineTools
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
$ 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
# 토픽들간의 구독, 발행관계를 그래프로 시각화해준다.
실습 3. rqt_plot
이 실습에서는 터틀심 토픽의 내용을 시각화 해주는 rqt의 plot기능을 사용하는 방법을 학습한다.
$ rosrun turtlesim turtlesim_node
# 위의 설명 참고
$ rusrun turtlesim turtle_teleop_key
# 위의 설명 참고
$ rqt_plot /turtle1/pose
# /turtle1/pose 토픽의 내용들을 그래프로 도식화해준다.
실습 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 확장자를 가진 파일을 선택하면 재생하여 준다.
실습을 하며 여러 시각화도구들을 이용하며, 토픽에 대한 개념도 다시 짚어볼 수 있어 좋았다.
개발을 하며 유용하게 사용할 수 있을 것같고, 특히 모의 테스트를 할 때 유용할 것같다.
강의 출처
https://www.youtube.com/@ROBOTISOpenSourceTeam
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2023 ROS 스터디] 신의석 #2주차 - ROS의 중요컨셉, 명령어, 도구 (0) | 2023.01.22 |
---|---|
[2023 ROS 스터디] 조성준 #2주차 - ROS 명령어 및 도구 (2) | 2023.01.22 |
[2023 ROS 스터디] 최지웅 #2주차 - ROS 용어 (0) | 2023.01.22 |
[2023 ROS 스터디] 이은선 #2주차 - ROS 기초 다지기 (0) | 2023.01.22 |
[2023 ROS 스터디] 홍선재 #2주차 - ROS (0) | 2023.01.21 |