왕다방

인공지능 & 로봇 사용자들의 자유게시판입니다. 인공지능, 가정용로봇, 서비스로봇, 인공지능스피커 등 자유롭게 올려주세요. 질문과답변도 이곳에 올려주세요.

제목로봇 소프트웨어 플랫폼 : ROS2021-11-11 18:06
작성자user icon Level 4

88x31.png


1. ROS란? 


ROS는 Robot Operating System의 약자로 메타운영체제입니다. 윈도우나 리눅스, 안드로이드 같은 운영체제는 아니지만 로봇 애플리케이션 개발을 지원하는 일종의 소프트웨어 플랫폼이며 기존 운영체제를 통해 메시지 전달, 패키지 관리, 개발환경에 필요한 라이브러리와 도구를 제공하는 등 일종의 미들웨어입니다.

기존의 로봇 개발 방식은 하드웨어 설계부터 소프트웨어에 이르기까지 모든 것을 독자적으로 개발해야 했기때문에 로봇마다 API 인터페이스가 다르고 이를 적용하는데 사전 학습이 필요했으며, 소프트웨어를 작성하는데 하드웨어에 대한 지식이 필요했습니다. 이런 한계를 극복하여 로봇 프로그래밍 생태계를 구축하고자 많은 종류의 로봇 소프트웨어 플랫폼이 생겼는데 그 중 하나가 ROS 입니다.



2. ROS의 특징


ROS는 오픈소스로 표준화된 소프트웨어 플랫폼을 제공합니다. 노드(Node) 사이에 메세지를 교환하는 방식으로 프로그램을 잘게 나누어 프로그래밍 하기때문에 공동개발이 가능합니다. 클라이언트 층에서 다양한 프로그래밍 언어를 지원하고, rqt나 gazebo 같은 개발도구도 제공합니다. 또한 10년 이상의 ROS 프로젝트를 통해 거대한 글로벌 커뮤니티를 형성하고 있어서 초보자들도 쉽게 로봇개발을 할 수 있습니다 . 현재는 ROS1의 단점을 보완하여 로봇의 상용화를 위한 ROS2가 나왔으며, 이 글에서는 ROS2를 다루겠습니다.



3. ROS2의 통신 프로토콜 : DDS RTPS


ROS1은 독자적인 TCPROS를 통해 통신을 했습니다. ROS2는 ROS1과 달리 OMG에 의해 표준화된 DDS RTPS 프로토콜을 통해 통신합니다.

RTPS(Real Time Publish Subscribe)는 OMG(Object Management Group)에서 표준화된 

DDS(Data Distribution Service)를 위한 데이터 전송 프로토콜입니다. DDS는 지난번 글에 소개한 MQTT처럼 발행-구독 방식으로 통신합니다. 하지만 MQTT는 TCP 기반으로 브로커를 통해 메시지를 전달하는 반면 DDS는 UDP 기반으로 중간 매개체가 없습니다.


mb-file.php?path=2021%2F11%2F11%2FF4215_1.png
 

mb-file.php?path=2021%2F11%2F11%2FF4216_2.png
 

UDP 기반의 통신이기때문에 기본적으로는 신뢰성이 없지만 QoS(Quality of Service)를 설정하여 신뢰성을 확보할 수 있습니다. DDS는 22가지의 QoS가 있는데 ROS2에서는 6가지 옵션을 사용합니다.


통신을 하는 방법에는 토픽(Topic), 서비스(Service), 액션(Action), 파라미터(Parameter)가 있습니다.


자세한 내용은 다음 글에 작성하겠습니다.



4. ROS2 설치


이제 ROS2를 설치해보겠습니다. ROS1은 리눅스만 지원했지만 ROS2는 윈도우와 맥도 지원합니다. 홈페이지에서는 리눅스 민트 20.x에 설치하는 것을 추천합니다. 이 글에서는 우분투 기반 국산 OS인 하모니카에 ROS2를 설치하겠습니다.


mb-file.php?path=2021%2F11%2F11%2FF4217_3.png
 

https://www.ros.org/blog/getting-started/# 


현재 ROS2는 LTS 버전인 Foxy와 최신 버전인 Galactic이 있는데 LTS인 Foxy를 apt를 통해 설치하겠습니다.

https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html 


우선 다음 가이드에 따라 하모니카를 설치합니다. 저는 기존 윈도우는 두고 디스크 파티션을 나눠 멀티부팅하도록 하모니카를 설치했습니다. 멀티부팅에 대한 설명은 생략합니다.

https://docs.hamonikr.org/hamonikr 


하모니카를 설치한 후 터미널을 열고 업데이트를 합니다.

 $ sudo apt update &&  sudo apt upgrade


locale을 설정합니다. 언어를 영어로 바꾸는데 생략해도 됩니다.

 $ sudo apt install locales 

 $ sudo locale-gen en_US en_US.UTF-8

 $ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

 $ export LANG=en_US.UTF-8

 $ locale


레포지토리를 추가하기위해 GPG키를 인증합니다.

 $ sudo apt update && sudo apt install curl gnupg2 lsb-release

 $ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg


sources list에 레포지토리를 추가합니다.

 $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null


$(lsb_release -cs) 명령어는 현재 OS의 코드네임을 나타냅니다.

우분투 20.x의 코드네임은 focal 이지만 하모니카4.0이 우분투 20.x를 기반으로 하더라도 코드네임은 ulyana 입니다. 다음 명령어를 통해 코드네임을 바꿔줍시다.

 $ sudo sed -i -e 's/ubuntu .* main/ubuntu focal main/g' /etc/apt/sources.list.d/ros2.list


이제 apt를 통해 ROS2를 설치합니다.

 $ sudo apt install ros-foxy-desktop


데스크탑 패키지는 ROS를 비롯한 RViz, demos, tutorials가 함께 설치됩니다.

용량이 2기가를 넘으므로 설치하는데 시간이 조금 걸립니다.

mb-file.php?path=2021%2F11%2F11%2FF4220_4.png
 

CLI(Command Line Interface)를 통해 ROS를 실행하기 위해서는 환경설정을 해야합니다.

 $ source /opt/ros/foxy/setup.bash


우선 튜토리얼인 C+로 작성된 토픽 발행 노드를 실행해보겠습니다.

 $ ros2 run demo_nodes_cpp talker


터미널창을 하나 더 열고 파이썬으로 작성된 토픽 구독 노드를 실행해보겠습니다. 터미널을 새로 열면 환경설정을 다시 해야합니다.

 $ source /opt/ros/foxy/setup.bash

 $ ros2 run demo_nodes_py listener


mb-file.php?path=2021%2F11%2F11%2FF4223_5.png
다른 언어로 작성된 노드지만 두 노드사이에 메시지를 주고 받는 것을 확인 할 수 있습니다.


노드를 실행할때마다 환경설정을 해야하는데 이를 간소화하기위해 .bashrc에 커맨드를 입력하겠습니다.

.bashrc 파일은 쉘을 실행시킬때마다 자동으로 로딩되는 파일입니다.

 $ nano ~/.bashrc


맨 아래쪽에 다음과 같이 입력하세요.

source /opt/ros/foxy/setup.bash


alias도 지원하므로 축약어도 설정해봅시다.

alias eb='nano ~/.bashrc'

alias testpub='ros2 run demo_nodes_cpp talker'

alias testsub='ros2 run demo_nodes_py listener'


mb-file.php?path=2021%2F11%2F11%2FF4224_6.png

작성후 Ctrl + O를 눌러 저장하고 Ctrl + X를 눌러 빠져나옵니다.


다음 명령어를 입력하여 .bashrc 파일을 리로드 합니다.

 $ source ~/.bashrc


이제 환경설정을 해주지 않아도 노드를 실행시킬 수 있고 축약어 사용이 가능합니다.

다음 그림을 보면 환경설정 없이 'testpub'와 'testsub' 명령어를 통해 노드가 실행된 것을 확인할 수 있습니다.

mb-file.php?path=2021%2F11%2F11%2FF4225_7.png


새로운 터미널창을 열고 다음 명령어를 입력하면 현재 네트워크에서 실행중인 노드와 연결된 토픽 정보를 UI로 확인할 수 있습니다.

 $ rqt_graph


mb-file.php?path=2021%2F11%2F11%2FF4226_8.png
 

#ROS# Robot Operating System# 로봇 소프트웨어 플랫폼# DDS# RTPS
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)