ROS : ROS는 로봇의 응용프로그램을 개발하기 위한 운영체제와 같은 로봇 소프트웨어 플랫폼이다. 여러가지 패키지와 기능들의 구현을 오픈소스로 제공한다.
마스터(master) : 마스터는 노드와 노드 사이의 연결과 메시지 통신을 위한 네임 서버와 같은 역할을 한다.
roscore가 실행 명령어이며, 마으터 없이는 노드 간의 접속, 토픽과 서비브와 같은 메시지 통신을 할 수 없다.
사용자가 설정해 놓지 않았다면 기본값으로 URI 주소는 현재의 로컬 IP를 사용하고, 포트는 11311을 이용한다.
노드(node) : 노드는 ROS에서 실행되는 최소 단위의 프로세서를 지칭한다. 즉 하나의 실행 가능한 프로그램으로 생각하면 된다. ROS에서는 하나의 목적에 하나의 노드를 작성하길 권하며, 재사용이 쉽게 구성하여 개발하기를 권한다. 쉽게 생각하면, 휴대폰이 ROS로 되어있다고 생각하면, 디스플레이기능, 카메라기능들이 다 각각의 노드로 기능을 구현이 되는 것이라고 생각하면 된다.
노드의 구동과 함께 마스터에 노드와 퍼블리셔(publisher), 서브스크라이버(subscriber), 서비스 서버(service server),서비스 클라이언트(service client)의 역할을 하는 노드, 토픽, 서비스의 각 이름, 메시지 형태, URI 주소와 포트를 등록한다. 이 정보들을 기반으로 각 노드는 노드끼리 토픽과 서비스를 이용하여 메시지를 주고 받을 수 있다.
패키지 : 패키지는 ROS를 구성하는 기본 단위이다. ROS의 응용프로그램은 패키지 단위로 개발되며 패키지는 최소한 하나 이상의 노드를 포함하거나 다른 패키지의 노드를 실행하기 위한 설정 파일들을 포함하게 된다.
메타패키지 : 공통된 목적을 지닌 패키지들의 집합을 말한다. 예를 들어 Navigation 메타패키지는 AMCL, DWA, EKF, map_server 등 10개의 패키지로 구성되어 있다.
메시지 : 노드는 메시지를 통해 노드 간의 데이터를 주고 받는다. 메시지는 interger, floating point, boolean과 같은 변수 형태이다. 또한 메시지 안에 메시지를 품고 있는 간단한 데이터 구조나 메시지들이 나열된 배열과 같은 구조도 사용할 수 있다.
단방향 메시지 송수신 방식의 토픽(topic), 양방향 메시지 요청방식 서비스(service)를 이용한다.
퍼블리시 및 퍼블리셔 : 퍼블리시(publish)는 토픽의 내용에 해당하는 메시지 형태의 데이터를 송신하는 것을 말한다. 퍼블리셔(publisher) 노드는 퍼블리시를 수행하기 위하여 토픽을 포함한 자신의 정보들을 마스터에 등록하고, 서브스크라이브를 원하는 서브스크라이버 노드에 메시지를 보낸다. 퍼블리셔는 이를 실행하는 개체로써 노드에 선언한다.
서브 스크라이브 및 서브스크라이버 : 서브스크라이브(subscribe)는 토픽의 내용에 해당하는 메시지 형태의 데이터를 수힌하는 것을 말한다. 서브스크라이버(subscriber) 노드는 서브스크라이브를 수행하기 위하여 토픽을 포함한 자신의 정보들을 마스터에 등록하고, 구독하고자 하는 토픽을 퍼블리시하는 퍼블리셔 노드의 정보를 마스터로부터 받는다. 이 정보를 기반으로 서브스크라이버 노드는 퍼블리셔 노드와 직접 접속하여 메시지를 받는다.
서브스크라이버는 하나의 노드에서 복수로 선언할 수 있으며 비 동기식이다.
서비스 : 서비스 메시지 통신은 특정 목적의 작업에 해당되는 서비스를 요청하는 서비스 클라이언트와 서비스 응답을 담당하는 서비스 서버간의 동기적 양방향 서시스 메시지 통신을 말한다.
액션 : 액션은 서비스처럼 양방향을 요구하나, 요청 처리 후 응답까지 오랜 시간이 걸리고 중간 결괏값이 필요한 경우에 사용되는 메시지 통신 방식이다. 액션 파일도 서비스와 많이 비슷한데 목표(goal)와 결과(result)가 있고, 여기 중간 결괏값에 해당되는 피드백(feedback)이 있다.
파라미터 : ROS에서 파라미터는 노드에 사용되는 파라미터(변수)를 말한다.
캣킨(catkin) : 캣킨은 ROS의 빌드 시스템이다. ROS의 빌드 시스템은 기본적으로 CMake를 이용하여 패키지 폴더에 CMakeList.txt라는 파일에 빌드 환경을 기술하고 있다. ROS에서는 CMake를 ROS에 맞게 수정하여 ROS에 특화된 캣킨 빌드 시스템을 만들었다. 과거에는 ROS build가 있었지만 현재는 캣킨을 많이 사용하고, 또한 catkin_tools라는 빌드 시스템 또한 많이 쓰인다. catkin_tools는 캣킨의 진화버전으로 컬러의 cmd창에 catkin보다 많은 커맨드를 지원한다. 사람들도 더 좋다는 것 같다.
roscore : roscore는 ROS 마스터를 구동하는 명령어이다. 같은 네트워크라면 다른 컴퓨터에서 실행해도 된다. 단 멀티 roscore를 지원하는 특수한 경우를 제외하고는 roscore는 같은 네트워크에서 하나만 구동된다. ROS를 구동하면 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재된 URI 주소와 포트를 사용하게 된다. 사용자가 설정해놓지 않았으면 URI 주소로 현재의 로컬 IP를 사용하고, 11311포트를 사용한다.
$gedit .bashrc 로 들어가서 수정할 수 있다.
rosrun : ROS의 기본 실행 명령어이다. 패키지에서 하나의 노드를 실행하는데 사용된다. 노드가 사용하는 URI 주소와 포트는 현재 노드가 실행 중인 컴퓨터에 저장된 ROS_HOSTNAME 환경 변숫값을 URI 주소로 사용하며, 포트는 임의의 고윳값으로 설정된다.
roslaunch : rosrun이 하나의 노드를 실행하는 명령어라면 roslaunch는 여러 노드를 실행하는 개념이다. 이 명령어를 통해 하나 그 이상의 정해진 노드를 실행시킬 수 있다. 그 밖의 기능으로 노드를 실행할 때, 패키지의 파라미터나 노드 이름 변경 등 많은 옵션을 갖춘 노드 실행에 특화된 ROS 명령어이다.
bag : ROS에서 주고받는 메시지의 이트는 저장할 수 있는데 이때 사용되는 파일 포맷을 bag이라 한다.
CMakeList.txt : ROS 빌드 시스템인 캣킨은 기본적으로 CMake를 이용하고 있어서 패키지 폴더에 CMakeList.txt파일에 빌드 환경을 기술하고 있다.
package.xml : 패키지의 정보를 담은 xml파일로 패키지의 이름, 저작자, 라이선스, 의존성 패키지 등을 기술하고 있다.
※위의 내용은 ROS프로그래밍 책을 공부하며 요약, 수정했습니다.^^
'로봇 작품 > SLAM, ROS project' 카테고리의 다른 글
5. 라즈베리파이와 컴퓨터 ROS통신으로 패키지 실행시키기 (0) | 2020.07.29 |
---|---|
라즈베리파이 gmapping navigation 진행상황 (0) | 2020.07.29 |
Raspberry pi ubuntu hector slam setup (0) | 2020.07.29 |
3. VNC viewer 설정. 라즈베리파이 화면 (0) | 2020.07.29 |
2. ROS 설치 및 설정 (우분투 마테/MATE) (0) | 2020.07.29 |