<용어정리>
ROS
ROS란 로봇의 응용프로그램을 개발하기 위해 만든 운영체제와 같은 로봇 소프트웨어 플랫폼이다
OS 위에 있다고 해서 Meta OS라 하기도 한다
XML
XML(Extensible MArkup Language)는 W3C에서 다른 특수 목적의 마크업 언어를 만드는 용도로 권장하는 다목적 Markup language 이다. 태그 등을 이용하여서 데이터의 구조를 명기함
ex) *.launch, *.urdf, package.xml
package.xml : 패키지의 정보를 담은 xml : 패키지의 이름 저작자 라이선스 의존성 패키지에 대한 정보를 담음
RPC
RPC는 Remote Procedure Call 의 약자로써 Remote 즉, 멀리 떨어져 있는 컴퓨터 프로그램이 다른 컴퓨터 내에 있는 서브 프로그램 Procedure을 불러내는 Call 것을 의미한다
TCP/IP, IPX 등의 전송 프로토콜을 이용한다
(TCP/IP : Transmission Control Protocol 전송 제어 프로토콜 : IP(Internet Protocol)을 기반으로 전송 제어 프로토콜인 TCP를 사용하여 데이터 전달을 한다 )
Node
Node(노드)는 ROS에서 실행되는 최소단위의 프로세서를 지칭한다
즉, 하나의 실행 가능한 프로그래밍
-> 그렇기에 하나의 목적에 하나의 노드를 사용하는 것이 좋다
Node가 하는 역할은 구동이 되면 Master에
Publisher, Subscriber, Service server, Service client에서 사용하는
Topic 과 서비스 이름, 메세지 형태 URI주소와 포트를 등록한다
여기서 Topic과 서비스는 Node 간의 Message를 주고 받을 수 있도록 한다
Node와 Master의 통신은 XMLRPC를 이용, Node간의 통신은 XMLRPC 혹은 TCP/IP 통신 꼐열의 TCPROS를 사용한다
단 Message 통신은 마스터와는 관계없는 Node간의 통신 이므로 TCPROS를 이용한다
환경변수 설정에 있어서
URI 주소는 현재 node가 실행 중인 컴퓨터에 저장된 ROS_HOSTNAME이라는 환경 변수값을 URI 주소로 사용하고
포트는 임의의 고윳값으로 설정 된다
Master
Node와 Node의 연결과 메세지 통신을 위한 일종의 서버 역할을 한다고 생각하면 된다
roscore로 실행하며 (서버를 열어주며)
HTTP 기반의 프로토콜인 XMLRPC(XML-Romote Procedure Call)을 이용하여 Slave 들과 통신한다
여기서 Slave는 Node를 뜻하며
Node는 필요할 때 Master에 접근을 하여 자신의 정보를 등록하거나 다른 노드의 정보를 요청하여 수신 받는다
평상시에는 서로의 접속상태를 점검하지 않는다
환경변수로는
ROS_MASTER_URI 변수에 적혀진 URI주소와 포트를 가진다
여기서 사용자가 따로 설정하지 않았을 때
URI 는 local IP이고
포트는 11311 이다
Package
Package는 ROS를 구성하는 기본 단위이다
하나의 패키지는 하나 이상의 Node로 구성 되거나 다른 패키지의 노드를 실행하기 위한 설정파일을 포함한다
Message
Message는 Node간에 데이터를 주고 받을 때 사용한다
변수형태이며 데이터 타입은 integer, floating point, boolean 등이 있다
Message안에 Message가 있는 간단한 배열구조나 데이터 구조를 사용할 수 있다
단반향 메시지 송수신 방식의 Topic과 양방향 메시지 송수신 방식인 request(요청) / response(응답) 방식의 Service를 이용한다
Topic
Topic은 이름 그대로 이야깃거리이다.
Publisher Node가 하나의 이야깃거리를 Topic으로 Master에 등록한 후
그 Topic에 대한 이야기를 Message형태로 Publish한다
이 이야깃거리를 수신받기 원하는 Subscriber는 마스터에 등록된 토픽의 이름에 해당하는 Publisher node을 정보를 받는다
이 Publisher node의 정보를 받으면 Subscriber Node는 Publisher Node 와 직접연결하여 메시지를 Topic으로 송수신한다
뭔가 소개팅 어플이고 A가 게시글을 올리고 B가 관심이 있어서 어플에게 쪽지를 요청하고 이것이 처리되면 둘이 메세지 주고 받는 느낌 인것 같다
Publisher
Topic의 내용을 메세지 형태의 데이터로 송신하는 것을 Publish라 하고
이를 수행하는 역할의 Node가 Publisher 이다
이것을 수행하기 위해서 Publisher는 Topic을 포함한 자신의 정보들을 마스터에 등록하고
Subscriber Node에 메세지를 보낸다
Subscriber
Topic의 내용을 메세지 형태의 데이터로 수신하는 것을 Subscribe라 하고
이를 수행하는 역할의 Node가 Subsciber 이다
이것을 수행하기 위해서 Subscriber는 Topic을 포함한 자신의 정보들을 마스터에 등록하고
Publisher의 정보를 받게되고 이를 기반으로 Subscriber는 Publisher이게 직접 접속하여 메세지를 받는다
-> 한 번 연결하면 지속적으로 메시지 송수신이 가능해서 센서 테이터에 적합하다
-> 하지만 가끔은 요청/응답 방식이 필요하기에 Service가 등장한다
Service
서비스는
서비스 요청이 있을 때 응답 하는 서비스 서버와
요청하고 응답을 받는 service Client 로 나뉜다
-> 일회성 메세지 통신 : 송수신이 완료되면 두 노드의 접속이 끊긴다
여기서 요청과 응답은 모두 메세지로 되어있다
이러한 방식으로
Service server는 서비스 요청을 받으면 지정된 서비스를 수행한 다음 결과를 서비스 클라이언트에게 전달
Service Client는 서비스 요청을 server에게 전달하고 결과값을 받는다
Action
Action은 서비스 처럼 양방향을 요구하거나 처리시간이 오래 걸리는 경우 중간에 출력을 보고 싶을 때 사용한다
서비스와 유사하게 목표(goal)과 결과(result)가 있다 <- 여기에 중간 값에 해당되는 Feedback이 추가 되었다
구성 또한 Action client 가 Goal을 정하고 이 목표에 맞춰 정해진 일을 수행한다음
Action server가 액션 피드백과 결과를 전달한다
즉, Action server는 액션 클라이언트로 부터 목표를 입력받고 결과 및 피드백 값을 출력한다 (goal을 전달 받고 실질적인 실행까지)
Action client는 액션서버로부터 결과 및 피드백 값을 입력 받는다. (목표를 전달하고 결과 및 피드백을 수신 받아 다음 지시 혹은 목표를 취소까지)
Catkin
catkin은 Ros의 빌드 시스템이다
ROS 빌드 시스템은 CMAKE(Cross platefrom make)를 이용하고 있어서 CMakeKists.txt라는 파일에 빌드 환경을 적어놓는다
이러한 catkin 빌드 시스템은 ROS 관련된 빌드 패키지 관리 패키지 간의 의존관계를 편리하게 사용하게 해준다
Bag
ROS에서 주고받는 메시지의 데이터를 bag 라는 파일 포맷을 이용하여 저장할 수 있다 (확장자 : *.bag)
ROS는 이 bag를 이용하여 메시지를 저장하고 이를 이용하여 이전 상황을 그대로 재현할 수 있다
ex) .로봇 센싱 -> message 발생 -> bag를 이용하여 저장
bag가져와서 재현 -> 센싱 이후의 가설 1 진행
bag가져와서 재현 -> 센싱 이후의 가설 2 진행
bag가져와서 재현 -> 센싱 이후의 가설 3 진행
이런걸 할 수 있다
<명령어 정리>
roscore
roscore는 ROS master를 구동한다
같은 네트워크기반이면 다른 컴퓨터에서도 실행이 가능하다
주의점은 하나의 네트워크에서 하나만 구동해야한다
아니면 아래와 같은 문구를 얻음
ROS를 구동하면 ~/.bashrc에 적혀있는 ROS_MASTER_URI 변수의 URI와
포트를 사용하는데 만약 사용자 설정이 없다면 URI는 현재의 로컬IP 포트는 11311 포트를 이용한다
rosrun
rosrun은 하나의 노드를 실행하는 명령어 이다
URI주소는 ROS_HOSTNAME에 적혀있는 환경변수를 이용하며
포트는 임의의 고윳값으로 설정된다
roslaunch
roslaunch는 여러 노드를 실행시킨다
기능으로 패키지의 파라미터나 노이 이름 변경 노드 네임스페이스 변경 ROS_ROOT, ROS_PACKAGE_PATH, 환경설정 변경 등 많은 옵션을 가졌다
roslaunch는 *.launch 파일을 사용하여 실행 노드에 대한 설정을 준다
'Robotics > ROS' 카테고리의 다른 글
[Robotics] Intel® RealSense™ Depth Camera D455 (0) | 2023.04.05 |
---|---|
[Robotics] ROS를 이용한 Publisher/Subscriber (0) | 2023.03.28 |
[Robotics] ROS에 대하여 (0) | 2023.03.23 |
[Robotics] 아두이노 우분투 개발환경 설정 (0) | 2023.03.23 |
[Robotics] 라즈베리파이 원격 연결 (1) | 2023.03.13 |