|
|
(1) ROS 2 1~8장 정리
1장
1.1. 로봇 개발을 위한 툴
ROS는 운영체제와 비슷한 하드웨어 추상화를 포함하고 있으면서도 전통적인 운영체제는 아니기에 이기종
하드웨어에서도 사용할 수 있는 특징이 있다.
이와 함께 로봇 응용 프로그램을 개발하기 위해 로봇에 특화된 다양한 개발환경을 제공하는 로봇 소프트웨어
플랫폼이자 로봇 소프트웨어 개발을 위한 일종의 툴이다.
1.2. 메타 운영체제
ROS는 Robot Operating System의 줄임말로 운영체제이다. 좀 더 정확하게 표현하면 ROS는 메타 운영체제이다.
메타 운영체제는 명확히 정의된 용어는 아니지만, 애플리케이션과 분산 컴퓨팅 자원 간의 가상화 레이어로 분산
컴퓨팅 자원을 활용하여 스케줄링 및 로드, 감시, 에러 처리 등을 실행하는 시스템이다.
ROS는 윈도우, 리눅스와 같은 독립된 운영체제는 아니며, 기존 운영체제를 이용한다. ROS는 리눅스 배포판 중의
하나인 우분투와 같은 운영체제 위에 설치한다. 다수의 이기종 하드웨어 간의 데이터 송수신, 스케줄링, 에러 처리 등
로봇 응용 프로그램에 필요한 필수 기능들을 라이브러리 형태로 제공한다. 이러한 콘셉트를 미들웨어 또는 소프트웨어
프레임워크라고 한다.
ROS는 이러한 메타 운영체제를 기반으로 다양한 목적의 응용 패키지를 개발, 관리, 제공하고 있으며, 사용자들이 개발한
패키지를 유통하는 생태계를 갖추고 있다.
1.3. ROS의 목적
ROS의 목적은 "로보틱스 소프트웨어 개발을 전 세계 레벨에서 공동 작업이 가능하도록 하는 환경을 구축하는 것"이다.
ROS는 로보틱스 연구, 개발에서의 코드 재사용을 극대화하는 것에 초점이 잡혀있다. 이를지원하기 위하여 ROS는 노드
단위의 분산 프로세스, 공유 및 재배포를 쉽게 하기위한 패키지 단위 관리, 다양한 프로그래밍 언어 지원 기능을 갖추고 있다.
1.4. ROS의 구성
400여개의 ROS 2 공통 패키지로 구성되어 있다.빌드 시스템, ROS 인터페이스 생성, 관리, 사용할 때 사용하는 패키지
토픽, 서비스, 액션에 사용되는 인터페이스 패키지,통신 미들웨어를 포함하는 RMW패키지,다양한 언어 지원을 위한 RCL패키지
로보틱스 애플리케이션 프레임워크와 로보틱스 애플리케이션 패키지, 가상 공간에서 로봇을 제어해 볼 수 있는 시뮬레이션
로봇 소프트웨어 개발 툴로 구성되어 있다.
2장
ROS 2 기반 로봇 개발에 필요한 정보
2.1. 커뮤니티 중심의 개발문화
커뮤니티 중심의 개발 문화는 쉽게 참여할 수 있고 개방적이라는 장점은 있지만, ROS 플랫폼과 ROS 커뮤니티를 처음 접하게 되면
낯설고 흩어져 있는 코드와 문서, 자료로 인해 학습하기가 다소 어려움이있다.
2.2. 즐겨찾는 ROS 2 정보 및 개발 자료
1. ROS 커뮤니티 게시판 https://discourse.ros.org/
2. ROS 2 문서 https://index.ros.org/doc/ros2/
3. ROS 2 디자인 문서 http://design.ros2.org/
4. ROS 위키 http://wiki.ros.org/
5. ROSCon 페이지 https://roscon.ros.org/
6. ROS 2 리포지터리 https://github.com/ros2
7. REPs(ROS Enhancement Proposals) https://ros.org/reps/rep-0000.html
8. ROS 배포판 리포지터리 https://github.com/ros/rosdistro
9. ROS 2 패키지 배포 현황 http://repo.ros2.org/status_page/
10. ROS 질의응답 페이지 https://answers.ros.org/questions/
3장
ROS 2 개발환경 구축
실습환경
OS : ubuntu 18.04 on Jetson nano
ROS version : ROS 2 Eloquent Elusor
아래의 명령어는 터미널을 열때 마다 실행해줘야 한다
$ source /opt/ros/eloquent/setup.bash -> ROS2 실행에 필요한 환경설정을 수행함
$ ros2 run demo_nodes_py listener -> 명령어 원형은 ros2 run <패키지명> <노드명>이며
패키지의 노드를 실행할 때 사용한다.
패키지(package) : ROS를 구성하는 기본 단위로 하나 이상의 노드 및 노드를 실행하기 위한 정보를 포함하고 있음.
노드(node) : 최소 단위의 실행 가능한 프로세서 하나의 기능을 하나의 실행 가능한 프로그램인 노드로 구성하도록 추천.
ROS를 사용하는 다른 노드들과 메시지 통신으로 데이터를 주고 받음.
매번 터미널을 열때마다 환경설정을 반복하는 것은 불편하므로
.bashrc 파일의 마지막 줄에 위 문장을 추가하여 bash 쉘이 실행될때마다 위 문장이 실행되도록 해야한다.
환경설정 후에 printenv | grep -i ROS 명령을 통해 환경변수 설정이 올바르게 되었는지 확인해야함.
5장
ROS 2의 중요 콘셉트
1.시장 출시 시간 단축
ROS 2는 로봇 응용 프로그램을 개발하는 데 필요한 도구, 라이브러리 및 기능을 제공하므로 본연의 중요한 로봇개발 작업에
더 많은 시간을 할애할 수 있다는 가장 큰 장점이 있다.그리고 ROS2는 상용 소프트웨어가 아닌 ROS 커뮤니티에서 개발해오고
있는 오픈소스이기 때문에 ROS 2를 사용할 부분과 그 사용 방법을 유연하게 결정할 수 있을 뿐만 아니라 필요에 따라 자유롭게
수정할 수 있다.
2.생산을 위한 설계
ROS는 로보틱스 R&D의 사실상의 글로벌 표준으로서 ROS 1의 10년 경험을 바탕으로, ROS 2 는 처음부터 산업용 수준으로
개발되었고 높은 신뢰성과 안전성을 중시하고 있다.
3.멀티 플랫폼
ROS 2는 리눅스, 윈도우, macOS 지원과 테스트를 진행하고 있기에 자율성, 백앤드 관리, 사용자 인터페이스의 원활한 개발 및
배포가 가능하다.
6장
ROS 1과 2의 차이점으로 알아보는 ROS 2의 특징
ROS 2의 특징
1. 두 대 이상의 로봇 지원
2. 임베디드 시스템에서의 ROS 사용
3. 실시간 제어
4. 불안정한 네트워크 환경에서도 동작할 수 있는 유연함
5. 멀티 플랫폼(리눅스, 윈도우, macOS)
6. 최신 기술 지원
7. 상업용 제품 지원
7장
ROS 2와 DDS
ROS에서 사용되는 메시지 통신은 토픽, 서비스, 액션, 파라미터가 있다. 각 메세지 통신의 목적과 사용 방법이 다르기는 하지만
토픽의 퍼블리시와 서브스크라이브의 개념을 응용하고있다.
이 데이터를 보내고 받는 퍼블리시, 서브스크라이브 개념은 ROS 1은 물론 ROS 2에서도 매우 중요한 개념으로 변함이 없는데 이 기술에 사용된 통신 라이브러리는 ROS 1과 2에서 조금씩 다르다.
ROS 1에서는 자체 개발한 RCPROS와 같은 통신 라이브러리를 사용하고 있고, ROS 2에서는 DDS의 RTPS를 사용하고 있다.
DDS란? 데이터 분산 시스템의 줄임말로 OMG에서 표준을 정하고자 만든 트레이드 마크이다. 이는 그냥 개념일 뿐이고 그 실체는 데이터 통신을 위한 미들웨어이다.
export ROS_DOMAIN_ID=11
8장
DDS의 QoS
QoS란 ? 데이터 통신 옵션
ROS 2에서는 TCP처럼 신뢰성 중시, UDP처럼 속도 중시 방식 중 선택 가능
ROS 2에서는 QoS의 Reliability가 대표적 사용임.
QoS의 종류
Reliability : 데이터 전송에 있어 속도를 우선시 하는지 신뢰성을 우선시 하는지 결정
History : 통신 상태에 따라 정해진 크기만큼의 데이터를 보관
Durability : 데이터를 수신하는 서브스크라이버가 생성되기 전의 데이터를 사용할지 폐기할지에 대한 설정
Deadline : 정해진 주기 안에 데이터가 발신 및 수신되지 않을 경우 이벤트 함수 실행
Lifespan : 정해진 주기 안에 수신되는 데이터만 유효 판정 그렇지 않은 데이터 삭제
Liveliness : 정해진 주기 안에 노드 혹은 토픽의 생사 확인
대표적 사용인 Reliability의 옵션들
1. Values
BEST_EFFORT : 데이터 송신에 집중. 전송 속도 중시 네트워크 상태에 따라 유실 발생 가능성
RELIABLE : 데이터 수신에 집중. 신뢰성 중시, 유실 발생시 재전송을 통해 수신 보장
2. RxO(Requested by Offered)
| Pub(↓)/Sub(→) | BEST_EFFORT | RELIABLE |
| BEST_EFFORT | BEST_EFFORT | 불가 |
| RELIABLE | BEST_EFFORT | RELIABLE |
(2) ROS1,2 버전을 모두 조사하시오. 버전, 지원 OS, 출시연도 등
ROS 1
ROS BOX Turtle(10.03.02) : Ubuntu Hardy, Red Hat, Debian, Gentoo, Max OS X(호환성 제약)
ROS C Turtle(10.08.02) : Ubuntu Hardy, Red Hat, Debian, Gentoo, Max OS X(호환성 제약), FreeBSD(호환성 제약)
ROS Diamondback(11.03.02) : Ubuntu Hardy, Red Hat, Debian, Gentoo, Max OS X(호환성 제약), FreeBSD(호환성 제약)
ROS Electric Emys(11.08.30) : Ubuntu Hardy, Red Hat, Debian, Gentoo
ROS Fuerte Turtle(12.04.23) : Ubuntu Hardy, Oneiric, Precise, Red Hat, Debian, Gentoo
ROS Groovy Galapagos(12.12.31) : Ubuntu 12.04(Precise)
ROS Hydro Medusa(13.09.04) : Ubuntu 12.04 LTS(Precise)
ROS Indigo Igloo(14.07.14) : Ubuntu 14.04 LTS(Trusty)
ROS Jade Turtle(15.05) : Ubuntu 15.04
ROS Kinetic Kame(16.03.23) : Ubuntu 16.04(Xenial)
ROS Lunar Loggerhead(17.03.23) : Ubuntu 17.04(Zesty)
ROS Melodic Morenia(18.03.23) : Ubuntu 18.04(Bionic)
ROS Noetic Ninjemys(20.03.23) : Ubuntu 20.04(Focal)
ROS 2
alpha1(15.08) : Linux(Ubuntu Trusty), OS X(Yosemite) 및 Windows(8)
alpha2(15.10) : Linux(Ubuntu Trusty), OS X(Yosemite) 및 Windows(8)
alpha3(15.12) : Linux(Ubuntu Trusty), OS X(Yosemite) 및 Windows(8)
alpha4(15.02) : Linux(Ubuntu Trusty), OS X(Yosemite) 및 Windows(8)
alpha5(16.04) : Linux(Ubuntu Trusty), OS X(Yosemite) 및 Windows(8)
alpha6(16.06) : Linux(Ubuntu Trusty), OS X(Yosemite) 및 Windows(8)
aplha7(16.07) : Ubuntu Xenial Xerus(16.04)
alpha8(16.10) : Ubuntu Xenial Xerus(16.04)
beta1(16.09.19) : Ubuntu 16.04(Xenial), Mac OS X 10.11(El Capitan), Windows 8.1 및 10
beta2(17.07.05) : Ubuntu 16.04(Xenial), macOS 10.12(Sierra) 및 Windows 10
beta3(17.09.13) : Ubuntu 16.04(Xenial), macOS 10.12(Sierra) 및 Windows 10
ROS 2 Ardent Apalone(17.12.08) : Ubuntu 16.04(Xenial), macOS 10.12(Sierra) 및 Windows 10
ROS 2 Bouncy Bolson(18.07.02) : Ubuntu 18.04(bionic), 16.04(Xenial), macOS 10.12(Sierra) 및 Windows 10(VS 2017)
ROS 2 Crystal Clemmys(18.12.14) :
Tier 1 : Ubuntu 18.04(bionic), macOS 10.12(Sierra) 및 Windows 10
Tier 2 : 16.04(Xenial)
ROS 2 Dashing Diademata(19.05.31) :
Tier 1 : Ubuntu 18.04(bionic) amd64 and arm64, macOS 10.12(Sierra) 및 Windows 10(VS 2019)
Tier 2 : Ubuntu 18.04(bionic) arm32
Tier 3 : Debian Stretch (9) : amd64, arm64, arm32, OpenEmbedded Thud(2.6)/webOS OSE : arm32 and x86
ROS 2 Eloquent Elusor(19.11.22) :
Tier 1 : Ubuntu 18.04(bionic) amd64 and arm64, macOS 10.14(Mojave) 및 Windows 10(VS 2019)
Tier 2 : Ubuntu 18.04(bionic) : arm32
Tier 3 : Debian Stretch (9) : amd64, arm64, arm32, OpenEmbedded Thud(2.6)/webOS OSE : arm32 and x86
ROS 2 Foxy Fitzroy(20.06.05) :
Tier 1 : Ubuntu 20.04(Focal) amd64 and arm64, macOS 10.14(Mojave) 및 Windows 10(VS 2019)
Tier 3 : Ubuntu 20.04(Focal):arm32, Debian Stretch (10) : amd64, arm64, arm32
OpenEmbedded Thud(2.6)/webOS OSE : arm32 and x86
(3) 리눅스에서 ROS2 설치결과를 제출하시오.
ros2 명령어 실행 확인
$ ros2 -h
colcon 명령어 실행 확인
$ colcon -h
(4) 리눅스에서 아래 문장에서 사용된 source명령어를 설명하시오.
$ source /opt/ros/eloquent/setup.bash -> ROS2 실행에 필요한 환경설정을 수행함
(5) 위 문장에서 확장자가 bash인 파일의 기능을 설명하라.
리눅스에서 확장자가 sh 또는 bash인 파일을 쉘스크립트라고 부른다.
쉘 스크립트란 간단히 말하자면 Unix커맨드등을 나열해서 실행하는 것이다. 언제 어떤 조건으로 어떠한 명령을 실행시킬 것인가, 파일을 컨텐츠를 읽어 들일 것인가, 로그 파일을 작성하는 것 등을 할 수 있다.
*로그 파일이란?
- 컴퓨터의 모든 사용내역을 기록하고 있는 파일을 말한다.
- 해킹 등의 사건이 발생했을때, 로그파일을 분석하여 사건의 원인을 파악한다.
