본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 초라핀스카 베로니카 #2주차 - ROS에서 쓰이는 용어 및 도구

반응형

ROS의 중요 컨셉

 

ROS 용어

 

Node - 최소 단위의 실행 가능한 프로세스 (하나의 실행 가능한 프로그램)

ROS에서는 최소한의 실행 단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고받는다.  

Package

하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것  

Message

메시지를 통해 노드 간의 데이터를 주고받게 된다. 메시지는 integer, floatingpoint, boolean와 같은 변수 형태이다.

또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.

 

Topic, Publisher, Subscriber

Topic - 단방향성과 연속성 (데이터를 계속 보냄)을 가진 메시지 통신 방법

Topic에 대해 목적에 따라 1:1, 1:N, N:1, N:N Publisher, Subscriber 통신 가능하다. 

Publisher - Topic을 보내는 노드  

Subscriber Node - Topic을 받는 노드

 

Service, Service client, Service server
Service - 양방향성과 일회성 (데이터를 한번 보내고 끊김)을 가진 메시지 통신 방법
Service client가 Service server 한테 요청하면 Service server 그 요청을 이행하고 완료 메시지 보낸다.
Service server - Service를 보내는 노드
Service client - Service를 요청하는 노드

 

Action, Action server, Action client
Action - Service와 비슷하고 중간에 피드백 제공하는 메시지 통신 방법
Action server가 Action client한테서 요청을 받으면 그 요청을 수행하면서 액션 피드백을 전달하고 끝나면 결과도 전달한다.
Action server - Action 명령을 이행하고 중간결과와 결과를 전달하는 노드
Action client - Action을 요청하는 노드

ROS에서는 Topic을 제일 많이 쓰며 (90% 정도) 5~10%는 Service를 사용하고 Action은 많이 쓰이지 않다.
Action은 프로그램이 많이 복잡할 때 주로 사용된다.

 

노드 간의 메시지 통신 개념

 

1. 마스터 구동: XMLRPC(XML-Remote Procedure Call)
 $roscore
 (마스터는 노드의 정보를 관리하며 노드 간의 통신을 연결시키는 매개체다)
    
2. 서브스크라이버 노드(Node) 구동
$rosrun 패키지이름 노드이름
(Subscriber Node의 정보(Node 이름, Topic 이름, 어떤 형태의 메시지를 보낼 것인지, ip번호, 포트 번호)를 마스터에게 전달한다)


3. 퍼블리셔 노드(Node) 구동
$rosrun 패키지이름 노드이름
(Publisher Node 정보를 마스터에게 전달한다)


4. 퍼블리셔 정보 알림
마스터는 Publisher Node과 Subscriber Node의 Topik 이름과 메시지 형태를 보고 매칭시킨 다음 Subscriber Node에게 새로운 Publisher Node 정보를 알린다.
    
5. 퍼블리셔 노드에 접속 요청
마스터로부터 받은 Publisher Node 정보를 이용하여 Subscriber Node가 CPROS 접속을 요청한다


6. 서브스크라이버 노드에 접속 응답
접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송한다


7. TCP 접속

TCPROS를 이용하여 퍼블리셔 노드와 직접 연결한다.


8. 메시지 전송
발행자 노드는 서브스크라이버 노드에게 메시지(토픽)를 전송

연속성 - 토픽 방식에서는 접속을 끊지 않는 이상 지속적으로 메시지를 전송한다.

 

서비스 요청 및 응답
1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로 간의 접속을 끊는다.
1회성 - 서비스는 토픽과 달리 1회에 한해 접속하고 서비스 요청 및 서비스 응답이 수행한 후 서로간의 접속을 끊는다.

 

 

 

ROS 메세지
메세지는 노드 간에 데이터를 주고받을 때 사용하는 데이터의 형태

  • 토픽, 서비스, 액션은 모두 메세지를 사용
  • 단순 자료형  
    예) 정수(integer), 부동 소수점(floating point), 불(boolean) 
  • 메세지 안에 메세지를 품고 있는 간단한 데이터 구
    예) geometry_msgs/PoseStamped
  • 메세지들이 나열된 배열과 같은 구조
     예) float32[] ranges 
     예) sensor_msgs/LaserScan
       

네임(Names)

  • 네임 - 노드, 메세지(토픽, 서비스, 액션, 파라미터)가 가지는 고유의 식별자
  • ROS는 그래프(graph)라는 추상 데이터 형태(abstract data type) 지원한다
  • 글로벌(global) - 문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙임
  • 프리베이트(private) - 네임 앞에 틸트(~)를 붙임

 

좌표 변환(TF, transform)
각 조인트(joint)들의 상대 좌표 변환
트리(tree) 형태로 조인트들간의 관계도를 표시함
 
클라이언트 라이브러리(Client Library)
다양한 프로그래밍 언어 지원

  • roscpp, rospy, roslisp 
  • rosjava, roscs, roseus, rosgo, roshask, rosnodejs,
  • RobotOS.jl, roslua
  • PhaROS, rosR, rosruby, Unreal-Ros-Plugin
  • MATLAB for ROS
  • LabVIEW for ROS


ROS 명령어

 

 

ROS  도구


3차원 시각화 도구(Rviz)

  • ROS의 3D 시각화툴
    • 센서 데이터의 시각화
    • 레이저 거리 센서(LDS)센서의 거리 데이터
    • RealSense, Kinect, Xtion 등의 Depth Camera의 포인트 클라우드 데이터
    • 카메라의 영상 데이터
    • IMU 센서의 관성 데이터 등
  • 로봇 외형의 표시와 계획된 동작을 표현 - URDF (Unified Robot Description Format)
  • 내비게이션
  • 매니퓰레이션
  • 원격 제어

RViz 실행 : $ rosrun rviz rviz 또는 $ rviz

 

 

RQT - 플러그인 방식의 ROS의 종합 GUI 툴
RQT 실행: $rqt

 

Gazebo 
Gazebo는 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터이다.

반응형