Written by
LSM
on
on
Robotics : ROS
로봇 운영체제 ROS
- ROS?
- 오픈 소스 기반
- BSD 레벨(ROS1), 커머셜 제품도 문제가 안됨
- 모든 로봇에 사용할 수 있는 운영체제
- meta-operating system
- 일종의 framework, tool, middleware라 봐야함
- 기존의 운영체제를 사용하는 형태
- 협업을 위해 만들어진 컨셉
- 이기종 디바이스 간 통신이 기본임
- ROS1은 약하나 ROS2는 잘 됨
- 복수 대의 로봇 활용이 가능
- 기업체에서 우분투 커스터마이징 후 재배포 시 canonical을 지워야 함
- 리눅스 민트/데비안를 추천
- 오픈 소스 기반
- ROS 구성
- client layer
- 다양한 프로그램을 지원 (c++, python이 메인, 최근은 nodejs가 떠오름)
- matlab, labview 역시 지원됨
- robotics application
- navigation, slam 등을 지원
- robotics application framework
- navigation, slam 등에 대한 component
- communication layer
- ROS1은 TCP가 기본
- 통신 기반에 대한 것이 모여있음
- Hardware Interface Layer
- 모터, 레이저, IMU 등의 센서에 대한 인터페이스
- Software Development Tools
- 패키지 관리, 시각화 관리 등의 툴을 제공
- Simulation
- 3차원 시뮬레이터 gazebo 지원
- client layer
- ROS 특징
- 통신 기능
- 노드 : 하나의 프로그램
- 노드 간 통신 제공
- 메시지 기록 & 재생 가능
- 받는 메시지를 전부 레코딩 및 재현 가능
- 로봇 관련 다양한 기능
- 표준 메시지 정의
- 로봇 기하학 라이브러리 : 로봇 joint 같은 것
- 다양한 개발 도구
- 통신 기능
ROS의 중요 컨셉
- 용어
- Node
- 최소 단위의 실행 가능한 프로세스
- 기능을 별개로 작성하고 실행 시 같이 실행시킴
- 메시지로 이벤트가 실행될 것이기 때문에 실행 순서는 상관없음
- 자동적으로 순차가 되어감
- Package
- 노드들을 묶어 놓은 것
- Message
- 노드 간 데이터 주고 받는 방식
- 타임스탬프가 찍힘
- 어느 시간, 어느 노드로부터 찍혔는지 나옴
- 메시지의 크기는 크게 만들 수 있음
- Topic
- 메세지를 주고 받음
- 단방향이 특징
- 연속성을 가짐 (멈추기 전까지 데이터를 계속 보냄) ex. 센서 데이터
- 1:N, N:1, N:N 통신 가능
- Service
- client ; 서비스를 요청
- sever : 요청 받은 것을 처리
- Topic과 다르게 양방향 (A->B->A)
- 요청을 처리 후에는 접속이 끊김
- Action
- server : 중간 중간에 피드백을 전달, 마지막일 때 결과 전달
- 복잡한 task 일 때 많이 쓰임
- 엄밀히 말하면 topic(???)
- server : 중간 중간에 피드백을 전달, 마지막일 때 결과 전달
- roscore
- ros master
- 파라미터 서버
- 로그 기록기
- 어디서 실행시키는 것이 중요, 이 코어만 죽이면 모든 로봇 구동이 죽음
- 한 네트워크 당 master 1개
- 보안에 취약
- 컨트롤 부분을 빼앗길 수도 있음
- ROS2에서 해당 부분이 고쳐짐
- Name
-
고유의 식별자
ROS + 임베디드 시스템
Rosserial
-
- Node
- 중계자 역할을 하는 패키지
- 아두이노, 라즈베리파이에 메시지를 serial로 변환해 보냄
- server, client로 구성
- 제약사항
- 메모리 사이즈가 매우 작아 publisher, subscriber 개수 정해야함 (약 5개)
- 32비트로 변환해 연산해야 함
OpenCR
- ROS를 사용하기 위해 만들어진 보드
- 부족한 메모리 문제를 해결
- 터틀봇이 이 보드를 사용하여 구동됨