🦾 로봇 운영체제 ROS 소개
ROS란?
- 오픈 소스
- 로봇 운영체제
- 엄밀히 따지면, 운영체제는 아니다
- meta-operating
- 소프트웨어 프레임워크
소프트웨어 프레임워크(미들웨어)
ROS
- 로봇 소프트웨어를 개발하기 위한 소프트웨어 프레임워크
- 노드 간에 메시지 교환 방법
- 복잡한 프로그램을 나누어 공동 개발 가능
- 개발에 필요한 다양한 tool 제공
- 명령어 도구, 시각화 도구 Rviz
- GUI 도구 모음 rqt,
- 3차원 시뮬레이터 Gazebo 지원
- 로보틱스에서 많이 사용되는 기능 지원
- 모델링, 센싱, 인식, 내비게이션, 매니퓰레이션
ROS의 진정한 목적
- 로보틱스 소프트웨어 개발을 전세계 레벨에서 공동 작업 가능하도록 생태계를 구축하는 것
🦾 메타 운영체제
ROS는 운영체제(OS)인가?
- 운영체제(Operating System)
- 범용 컴퓨터
- Windows
- Linux(Ubuntu, Redhat, ...)
- MAC(OS X...)
- 스마트폰
- ROS(Robot Oerating System)
- 메타 운영체제(Meta-Operating System)
메타 운영체제
- 메타 운영체제(Meta-Operating System)
- 어플리케이션과 분산 컴퓨팅 자원 간의 가상화 레이어
- 분산 컴퓨팅 자원을 활용하여 스케쥴링 및 로드, 감시, 에러 처리 등을 실행하는 시스템
- 전통적인 운영체제X >> 이용
- 전통적 운영체제 기능 + 로봇 응용 SW 개발의 필수 기능들을 라이브러리 형태로 제공
- 로봇 소프트웨어 프레임워크를 기반으로 로봇 생태계를 갖춤
- 다양한 목적의 응용 프로그램 개발, 관리, 제공
- 유저들이 개발한 패키지 유통
- 제공 기능(Tool Box)
- 디바이스 드라이버, 라이브러리, 디버그 도구, 메시지 통신 구동 도구, 컴파일 도구, 인스톨러, 패키지 생성 및 릴리즈
이기종 디바이스 간의 통신 지원
- 예시
- 리눅스에서 개발된 프로그램을 안드로이드에서 구동 가능
- 로봇에 장착된 카메라와 스마트폰 연동 가능
- 모바일 로봇과 휴머노이드 로봇 간의 통신 가능
ROS를 사용 가능한 운영체제
- ROS를 사용 가능한 운영체제
- 기존 전통적 운영체제
- Ubuntu, OS X, Windows, Raspbian, ...
- 일부 제한 사항 있음
- 스마트폰 운영체제
- OS 탑재 불가능한 마이크로 컨트롤러 유닛(MCU)
- 시리얼 통신, 블루투스, LAN 경유로 통신 가능한 라이브러리 제공
- ROS 2.0은 3대 OS 모두 지원
- Windows
- Virtual Box로 구동 가능
- BUT 하드웨어 작업 시, 권장X
🦾 ROS의 구성
- Robotics Application Framework
- Software Development Tools
- Simulation
- 2차원: stage ros
- 3차원: gazebo ros pkgs
🦾 ROS의 생태계
- ROBOT, SENSOR
- 로봇, 센서 회사
- 90 종류 이상의 로봇 지원(ROS)
- 80 종류 이상의 센서 지원
- ROS
- 시뮬레이터: gazebo, player/stage, ...
- 지능모듈: navigation, ...
- 라이브러리: OpenCV, ...
- 디바이스 드라이버: camera_drivers, ...
- 디버그 툴: rviz, rqt_graph, ...
- 프로그래밍 언어: C++, Python, Lisp, JAVA, MATLAB, ...
- 애플리케이션 / 메시지 통신 / 실행 툴 / 컴파일 툴 / 파일 시스템 / 설치 툴
- APP
- 개발자, 유저
- 5000개 이상의 패키지
- 2818개의 공식 패키지 제공(Indigo)
- 10만 이상 다운로드
- 만 7천 이상 Wiki 페이지
🦾 ROS의 특징
통신 인프라
- 노드(프로세스) 간 데이터 통신 제공
- 통상적으로 미들웨어로 지칭되는 메시지 전달 인터페이스 지원
- 메시지 파싱 기능
- 로봇 개발 시에 빈번히 사용되는 통신 시스템 제공
- 캡슐화 및 코드 재사용을 촉진하는 노드들 간의 메시지 전달 인터페이스
- 메시지의 기록 및 재생
- 노드 간 송수신되는 데이터인 메시지를 저장
- 저장된 메시지를 기반으로 반복적인 실험 가능
- 알고리즘 개발에 용이함
- 메시지 사용으로 인한 다양한 프로그래밍 언어 사용 가능
- 노드 간의 데이터 교환이 메시지를 사용
- 클라이언트 라이브러리
- roscpp, rospy, roslisp, ...
- 분산 매개 변수 시스템
- 시스템에서 사용되는 변수를 글로벌 키 값으로 작성하여 공유 및 수정 >> 실시간 반영
로봇 관련 다양한 기능
- 로봇에 대한 표준 메시지 정의
- 카메라, IMU, 레이저 등의 센서 / 오토메트리, 경로 및 지도 등의 내비게이션 데이터 등의 표준 메시지를 정의
- 모듈화, 협업 작업 유도
- 효율성 향상
- 로봇 기하학 라이브러리
- 로봇, 센서 등의 상대적 좌표를 트리화시키는 TF(Transform) 제공
- 로봇 기술 언어
- 로봇의 물리적 특성을 설명하는 XML 문서 기술
- 모델링 시, 필요
- 진단 시스템
- 현재 로봇의 상태를 한눈에 파악할 수 있는 진단 시스템 제공
- 센싱/인식
- 센서 드라이버, 센싱/인식 레벨의 라이브러리 제공
- 내비게이션
- 로봇의 이동
- 로봇에 많이 사용되는 로봇의 포즈(위치/자세) 추정 제공
- 지도 내의 자기 위치 주정 제공
- 지도 작성에 필요한 SLAM 라이브러리 제공
- 작성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리 제공
- 매니퓰레이션
- 로봇 arm에 사용되는 IK, FK 기능
- 응용단의 Pick and Place를 지원하는 다양한 Manipulation 라이브러리 제공
- GUI 형태의 매니퓰레이션 Tools 제공
다양한 개발 도구
- Command-Line Tools
- GUI 없이 ROS에서 제공되는 명령어로만 로봇 엑세스 및 거의 모든 ROS 기능 소화
- RViz
- 강력한 3D 시각화 툴 제공
- 레이저, 카메라 등의 센서 데이터를 시각화
- 로봇 외형과 계획된 동작 표현
- RQT
- 그래픽 인터페이스 개발을 위한 Qt 기반 프레임워크 제공
- 노드와 그들 사이의 연결 정보 표시(rqt_graph)
- 인코더, 전압 또는 시간이 지남에 따라 변화하는 숫자를 플로팅(rqt_plot)
- 데이터를 메시지 형태로 기록하고 재생(rqt_bag)
- Gazebo
- 물리 엔진 탑재
- 로봇, 센서, 환경 모델 등을 지원
- 3차원 시뮬레이터
- ROS와의 높은 호환성
🦾 ROS의 버전 선택
ROS 릴리즈 스케쥴과 버전 선택
- Hydro부터 1년에 1번 정식 버전 릴리즈 하기로 결정
- Kinetic Kame(LTS) 추천
- Kinetic Kame(EQL)
- 버전 선택
- 5년 지원 약속된 최신 LTS 버전의 우분투 선택
- 우분투 릴리즈된 후 3개월 후
- 최신의 LTS 지원 ROS 버전
- 단, (일반적인 경우)ROS는 릴리즈된 후 3개월 후
- Gazebo "gazebosim.org" 정보 확인 후 사용
- 정리
- Ubuntu 20.04 LTS
- ROS Noetic Ninjemys on Ubuntu Linux
- Gazebo 11.0
* 출처: 유튜브 ROBOTIS OpenSourceTeam 채널 - ROS 강의