본문 바로가기
Autonomous Vehicle/ROS programming

특강 1일차 : ROS 에 대한 이해

by kim.jeff 2020. 7. 23.

2020년도 국민대학교 기계공학부에서 제공하는 로봇 AI 특강을 신청하였고 선발되어 7일간 참석하게 되었습니다. 관련 내용을 정리하고 공유하는 시간 갖도록 하겠습니다.

1. 전체 특강 목표

1. ROS 라는 미들웨어에 대한 이해

2. YOLO 영상처리용 오픈소스 실습

3. JetBot을 활용한 자율주행 실습

 

더보기

로봇을 개발한다는것

아두이노로 로봇을 만드는것까지는 어떻게 쉬울 수 있지만, 기구학 해석이 들어가면서 부터 그 난이도는 점차 증가한다.

시뮬레이션의 중요성

동시공학적인 측면에서 효율을 가진다.

 

ROS는 로봇을 다루기 쉽게 해주는 도구이다.

앤드류응 교수의 랩에서 처음으로 시작되었다. 

 

ROS의 특징...? 

더보기

토픽 중심의 메세지 전송방식이기 때문에

데이터를 가져와서 뿌려보면 된다는 장점이 있다.

우분투의 버전마다 ROS의 버전이 달라진다. (우분투 16.04의 경우 kinetics우분투 18.04의 경우 melodic)

ROS2 구조는 비슷하지만 python3로 버전 업 되었다.

우아한 형제들의 배달로봇의 ROS 사용

Rviz : ROS vizualization의 약자

GAZEBO : 물리 엔진을 가진 시뮬레이션 환경

 

 

 

 

ROS master

노드와 노드사이의 연결과 메시지 통신을 위한 네임서버와 같은 역할을 한다.

마스터는 접속하는 슬래이브들과의 접속상태를 유지하지 않는 http 기반의 프로토콜인 xmlrpc를 이용하여 슬레이브들과 통신한다.

roscore

 

Node

ROS에서 실행가능한 최소한의 단위이다.

Tip : 패키지나 노드이름을 다 타이핑하지말고 <tab>키를 이용하면 쉽게 타이핑할 수 있다.

 

Service

service에서 요청하는 데이터형과 응답을 받을 데이터 형이 정의되어 있는 파일로 확장자 명은 srv이다

 

Topic

Topic 은 Node들이 Publisher 혹은 Subscriber 가 될 수 있다. (어떤 노드든 필요하면 데이터를 추출 하거나 보낼 수 있다. 반대로 서비스는 요청하지 않으면 데이터를 추출할 수 없는 것과 다르다.)

 

서비스와 토픽에 관하여

더보기

"서비스는 요청하고 받는것이다. 그에 반해 토픽은 방송이다. 노드가 계속 떠든다. 요청에 상관없이 계속 방송한다. 토픽 이름만 알면 된다. 굉장히 유용하다. 특정 메세지를 간단히 열람해 볼 수 있다. "

 

ROS의 주요 명령어

1. rosrun

로스의 최소 실행 단위인 노드를 실행하는 명령어

rosrun turtlesim turtlesim_node
#rosrun <pkg> <node>

2. rosnode

노드에 관한 정보를 얻을 수 있는 명령어

 

2.1 rosnode list

현재 실행중인 노드의 목록을 조회한다.

rosnode list

 

2.2 rosnode info

노드에 대한 정보 (구독자와 발행자 그리고 서비스의 목록)를 알 수 있다.

(구독자와 발행자는 Topic을 통한 connection이다. Service와 구별.)

rosnode info
#rosnode info <pkg address>



3. roscd 

roscd 는 ros 에서이용하고 있는 패키지의 주소로 이동시켜 준다.

roscd turtlesim
# roscd <pkg> 

4. rosed

rosed 는 srv파일을 열람한다. ros edit 의 준말.

 

srv 파일의 특징 : 빼기 기호(-) 세 개 ( --- )로 구분해서 윗부분이 요청(request)고 아랫부분이 응답(response)이다.

turtlesim의 TeleportAbsolute.srv는 요청만 있고 응답 데이터는 없다. (c의 return 0;)

필요로 하는 요청데이터는 x, y, theta 값임을 확인 할 수 있다. 

rosed turtlesim TeleportAbsolute.srv
# rosed <pkg> <srv>

 

 

5. rosservice

서비스에 관한 명령어

5.1 rosservice list

실행중인 서비스의 리스트를 출력해준다. 

rosservice list

5.2 rosservice info 

service의 정보를 출력해준다.

rosservice info /spawn
# rosservice info <service>

5.3 rosservice call

서비스로 요청을 보낸다. (request as service)

rosservice call /spawn 1 2 0 'tt' # x,y,theta,name 에 대한 값을 전달
rosservice call /turtle1/teleport_absolute 1 1 0 # 1 1 0을 요청
rosservice call /reset #리셋 요청
# rosservice <address of the service> <parameter>

6. rostopic 

토픽에 관한 명령어

6.1 rostopic list

rostopic list

6.1.1 rostopic list -v

rostopic list -v

6.2 rostopic info

rostopic info /turtle1/pose
# rostopic info <address of the topic>

밑의 echo하고 있다는 정보 또한 나온다. 

 

6.3 rostopic echo

특정 메세지를 열람 할 수 있다.

rostopic echo /turtle1/pose

6.4 rosmsg show

특정메세지의 형식을 알 수 있다.

rosmsg show /turtlesim/pose

7. rqt_graph

 

8. rosbag

토픽의 상황을 저장해서 다시 재생하는 기능

 

8.1 rosbag record

전체 토픽을 저장하는 명령어  (가방에 담아둔다)

rosbag record -a

 

8.2 rosbag play 

저장된 토픽을 다시 재생시키는 명령어 (토픽을 다시 뿌린다.)

rosbag play <*.bag>