본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 신의석 #2주차 - ROS의 중요컨셉, 명령어, 도구

반응형

2주차 스터디에선 ROS의 기본을 배우고 간단한(?) 실습을 해봤습니다.

 

*출처

ROS 강의

https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw 

ROS 강의 pdf 자료

https://github.com/robotpilot/ros-seminar 

 

chapter 4. ROS의 중요콘셉트

 

무엇이든 공부하는 데 있어서 용어들을 알아볼 필요가 있습니다.

 

기본용어

1. Node: 최소 단위의 실행 가능한 프로세서(프로그램), 각 노드는 메시지 통신으로 데이터를 주고받습니다.

2. Package: 하나 이상의 노드 혹은 노드 정보를 묶어 놓은 것, n개의 노드를 하나의 목적으로 묶었을 때, 실질적인 서비스를 제공할 수 있습니다.

3. Message: 메시지를 통해 노드 간 데이터를 주고받게 됩니다. 메시지는 변수형태입니다. 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있습니다.

 

데이터 전달 형식

1. Topic

2. Service

3. Action

가 있습니다.

 

1. Topic

한 방향 데이터 전달, Publisher: 데이터 전달하는 놈, Subscriber: 데이터 전달받는 놈, 연속 전달.

 

2. Service

양방향 데이터 전달,Service server: Service client의 요청에 응답, Service client: Service server에게 요청, 1회성 전달.

 

3. Action

양 방향 데이터 전달, Action server: client에게 받은 액션목표를 수행하면서 중간결과들을 전달한다(액션 패드백을 한다.), Action client: Action server에게 액션목표를 전달한고 중간 결과와 마지막 결과까지 받는다. 간헐적 전달.

 

이렇게 기본용어와 데이터 전달 형식을 정리할 수 있습니다. 이제 메시지 통신하는 단계를 알아봅시다.

 

메시지 통신

메시지 통신을 알아보기 전에 용어 하나를 더 알 필요가 있습니다.

master: 노드 정보들을 관리한다. 각 실행되는 노드들을 관리 및 연결, 서버 역할.

 

마스터를 구동한 뒤 subscriber node, publisher node를 구동합니다. 그 단계에서 마스터에게 subscriber, publisher node들의 정보(노드 이름, 토픽 이름, 메시지 형태, ip정보, 포트번호)를 전달하고 마스터는 두 노드의 정보로 정확이 둘을 연결해 줄 수 있게 됩니다.

1주차 때 구동해 본 거북이 기준 roscore: 마스터, turtlesim: subscriber node, telopkey: publisher node로 이해할 수 있습니다.

 

chapter 5. ROS 명령어

 

소개할 ROS 명령어가 너무 많아서 명령어 종류만 정리해 보겠습니다. 나머지는 위에서 밝힌 ROS 강의 pdf 자료에 잘 정리되어 있으니 보시면 좋을 것 같습니다.

 

ROS 셸 명령어

ROS 실행 명령어: 노드 실행

ROS 정보 명령어: 토픽, 메시지, 노드 정보 확인

ROS catkin 명령어: 컴파일, 빌드 관련 시스템, 의존성 관계 파악

ROS 패키지 명령어: 패키지 관련 정보, 설치, 의존성 검사, 의존성 설치

가 있습니다.

 

chapter 6. ROS 도구

ROS 도구들은 ROS를 사용하는 이유이자 매우 유용하게 사용할 수 있는 툴입니다.

 

1. RViz: ROS의 3D 시각화 툴

Rviz 실행해보기

1. roscore

구동 후 

2. rviz

를 다른 터미네이터에 입력

성공!

큰 무리 없이 성공했습니다.

 

rviz에 관한 간단한 정리

 

Rviz는 센서 및 로봇 데이터를 시각화하는 데 사용됩니다.

 

2. RQT: 플러그인 방식의 ROS의 종합 GUI 툴

rqt 실행해보기

1. roscore

역시나 구동 후

2. rqt

를 다른 터미네이터에 입력

실행은 됐으나 불길한 에러들이 떴습니다. 해결을 위해 노력했지만 아예 rqt가 실행이 안되기도 해서 다 취소하고 찝찝함을 뒤로한 채, 다른 실습을 진행해 봤습니다.

실습 1. rqt_image_view

$ rosrun uvc_camera uvc_camera_node

$ rqt_image_view

도저히 진행이 안돼서 구글링 결과 카메라에 초록불이 들어오는 단계까진 진행해 봤지만 결국엔 실패했습니다. 이전 에러 탓인 건지 다른 문제가 있는지 알아봤지만 역부족입니다. 구동된다면 rqt에서 본인 얼굴이 보일 겁니다.

 

실습 2. rqt_graph

$rosrun turtlesim turtlesim_node

$ rosrun turtlesim turtle_teleop_key

$ rosrun uvc_camera uvc_camera_node

$ rosrun image_view image_view image:=image_raw

$ rqt_graph

image가 좀 이상하지만 gragh로 chapter 4에서 배운 topic을 직접 확인할 수 있습니다.

 

실습 3. rqt_plot

실패했습니다. 블로그에 글 작성하면서 한번 시도해 봤는데 데이터 그래프가 안 그려져서 이전 에러를 해결하려 해 봤지만  이제는 rqt가 실행이 안돼서 실패하는 것도 스크린샷 못했습니다.

이전 실습에서부터 rqt 실행 후 이미지, 그래프로 들어가는 건 됐지만 한 번에 명령어로 들어가는 것은 안 됐는데 지속적으로 이상한 형태로 진행되는 거 보니 처음에 찝찝한 마음으로 진행했던 것이 결국 이렇게 된 것 같습니다.

 

나머지는 에러 차후에 실습진행 해보겠습니다...

 

여하튼, RQT를 이용하면 GUI 형태로 ROS를 이용할 수 있고 GUI 툴 제작이 간단해집니다.

 

 

3. Gazebo: 로봇 개발에 필요한 3차원 시뮬레이터

실제와 근사한 결과를 얻을 수 있고 ros와 호완성도 좋다고 합니다.

 

 

 

이렇게 2주차 스터디를 해봤습니다. 쉽게 진행되는가 했지만, 역시나 어려웠습니다. 다시 한번 ros에 적응하는 시간을 가졌다 생각하고 다음 주차도 열심히 해보겠습니다.

 

 

반응형