본문 바로가기
[Intel] 엣지 AI SW 아카데미/펌웨어 프로그래밍 75hour

[Intel] 엣지 AI SW 아카데미 30일차 (부산상공회의소 인력개발원)

by 0x01 2023. 12. 17.

일정: 2023.12.06(수)

수업 내용: 
 

 - Robot Operating System (ROS)

 

목표: 

로봇 소프트웨어 플랫폼
(하드웨어 추상화, 하위디바이스 제어, 로보틱스 센싱, 인식, 위치추정, 지도 작성 , 내비게이션 등) 중심의 기술과
로봇 소프트웨어 플랫 폼(ROS)이 가져올 미래 가치와 기술 선점을 위한 교육을 바탕으로
다양한 영상과 라이다 기반의 로봇 자율주행 기술 교육을 통해 학생들의 첨단 기술습득을 목표로 함.

 

3-2. About ROS
 ROS 특징
: 분산 프로세스
- 최소 단위의 실행 가능한 프로세스(Node) 형태로 프로그램, 각 프로세스는 독립적으로 실행되면서 데이터를 주고 받음
- Node 간의 송/수신되는 데이터인 메시지를 저장하고 재사용 가능
: 패키지 단위 관리
- 같은 목적을 갖는 다양한 프로세스를 패키지 단위로 관리하기 때문에 개발, 공유, 수정 후 재배포 쉬움
: 공개 repository
- 개발자가 선호하는 공개 repository (GitHub 등) 등에 패키지를 공개 및 각 라이선스도 배포
: API(Application Programming Interface) 형태
- ROS를 활용한 프로그램을 개발할 때 단순히 API를 불러와 자신이 사용하던 코드에 쉽게 삽입할 수 있도록 설계
- ROS 프로그래밍과 C++, Python 프로그램
: 복수의 프로그래밍 언어 지원
- 다양한 언어를 지원하기 위해 Client Library를 제공.
- Python, C++ 등 로봇 분야에서 많이 사용하는 프로그래밍 언어와 JAVA, C# 등의 언어에서도 사용가능

: 로봇에 대한 표준 메시지 정의
- 카메라, IMU, 레이저, 센서와 경로 및 지도 등의 내비게이션 데이터 등 표준 메시지 정의

 

 모듈화, 협업 작업을 유도, 효율성 향상
: 로봇 기하학 라이브러리 제공
- 진단 시스템, 센싱과 인식 레벨의 라이브러리
: 내비게이션
- 로봇에서 많이 사용되는 로봇의 포즈(위치/자세) 추정, 지도내의 자기 위치 추정 제공
- 지도 작성에 필요한 SLAM, 작성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리를 제공
: Manipulation (운동학: kinematics)
- 로봇 암에 사용되는 IK(Inverse kinematics: Task -> Joint ), FK(forward kinematics : J->T) 제공
- Pick and Place(평면상의 물체 위치 선정과 객체를 집는 과정)를 지원
→ Manipulation algorithm (https://youtu.be/5DnKot3mMSc) tools제공(Moveit)
Moveit → 운동 계획과 제어를 위한 도구 toolkit

 

: Rviz : RQT
- ROS에서 제공하는 3D visualization tool - Qt(Qt Project : open collaboration)기반의 framework for GUI
- 3parts  노드와 그들 사이의 연결 정보 표시(rqt_graph)

 

   인코더, 전압, 시간에 따라 변화하는 숫자를 플롯(rqt_plot)
   데이터를 메시지 형태로 기록하고 재생(rqt_bag)

 

: Gazebo (http://gazebosim.org)
- 물리 엔진을 탑재
- 로봇, 센서, 환경 모델 등을
3차원 시뮬레이터

 

 ROS version
: 2010년 ROS 1.0 release
- Box Turtle, C Turtle, Diamondback, Electric Emys, Fuerte, Groovy Galapagos, Hydro Medusa, Indigo Igloo, Jade Turtle,
Kinetic Kame, Lunar Loggerhead …
: 각 버전마다 일러스트와 거북이 아이콘(https://www.worldturtleday.org)
- 거북이 아이콘은 turtlesim이라는 ROS 공식 tutorial 시뮬레이션  Turtlebot 유례
: ROS version 주기는 ROS가 공식적으로 지원하는 운영체제 우분투(Ubuntu) release 주기와 동일
: ROS 서포트 기간은 각 버전 별로 release 후 2년간 지원
: 2년에 한 번씩 release 되는
Ubuntu LTS(Long Term Support) version에 맞추어 나오는 ROS version은 LTS 서비스가 종료되는 5년간 지원

 

: 2016년의 Ubuntu 16.04 LTS를 지원하는 ROS 버전인 ROS Kinetic Kame 버전은 2021년 5월까지 지원
    Ubuntu 16.04 LTS (Xenial Xerus) 지원기간 연장(https://ubuntu.com / https://releases.ubuntu.com )
“ Ubuntu 16.04 LTS is supported until 2024 through Canonicals' Extended Security Maintenance (ESM) product.”

 

[ Ubuntu ]
https://ubuntu.com / https://releases.ubuntu.com

 

Ubuntu Releases

There are 2 types of Ubuntu releases: Interim and LTS. Each Ubuntu LTS is maintained for 10 years total: 5 years of standard support + 5 years of ESM. Interim releases are maintained for 9 months. For the Ubuntu release cycle please see: The Ubuntu lifecyc

releases.ubuntu.com

 

: ROS packages for Noetic
http://repositories.ros.org/status_page/ros_noetic_default.html

 

ROS packages for Noetic - 2023-12-16 10:52:04 -0800

 

repositories.ros.org

 

3-3. ROS 용어
http://wiki.ros.org
- ROS Wiki. ROS의 기본적인 사용법과 각 패키지에 대한 설명, 
사용되는 parameter, 저작자, 라이선스, 홈페이지, 
repository, tutorial 등이 기술

 

 ROS Master (http://wiki.ros.org/Master)
: 실행 명령어 roscore
: Node와 Node 사이의 연결과 메시지 통신을 위한 네임 서버와 같은 역할
: Master가 실행하면 각 node의 이름을 등록, 필요에 따라 정보를 받음
- Master 없이, node 간의 접속, topic 서비스와 같은 메시지 통신을 할 수 없음
: Master는 http 기반의 프로토콜인 XMLRPC(XML-Remote Procedure Call)를 이용 slave과 통신
- ROS 구동하면, master는 사용자가 정해 놓은 ROS_MASTER_URI 변수에 기재된 URI 주소와 포트를 갖음

 

 ROS Node (http://wiki.ros.org/Nodes)
: ROS에서 실행되는 최소 단위의 프로세서를 의미. 즉 하나의 실행 가능한 프로그램
: 하나의 목적에 하나의 node를 작성(각 프로그램 세분화)
- 센서 드라이브, 센서 데이터를 이용한 변환, 장애물 판단, 모터 구동, Encoder 입력, 내비게이션 등 세분화된 node
: node 구동 후 master에 node name, topic 및 service name, message type(ROS naming사용), URI address, Port를 등록
- for publisher, subscriber, service server, service client에서 사용하기 위해
: 각 node는 node간에 topic과 service를 이용하여 message를 주고받음
- node는 master와 통신할 때 XMLRPC(eXtensible Markup Language-Remote Procedure Call) 이용
- node 간의 통신에서는 XMLRPC나 TCP/IP 통신 계열의 TCPROS(ROS message 통신)를 이용
→ http://wiki.ros.org/ROS/TCPROS
→  node간의 접속 요청과 응답은 XMLRPC를 사용하며, 메시지 통신은 노드와 노드 간의 TCPROS를 이용
: URI 주소와 Port는 현재 노드가 실행 중인 컴퓨터에 저장된 ROS_HOSTNAME 환경변수 값을 URI 주소로 사용

 

 ROS Package (http://wiki.ros.org/Packages)
: ROS 응용프로그램은 Package 단위로 개발
Package는 최소한 하나 이상의 node를 포함하거나 다른 Package의 node를 실행하기 위한 설정 파일을 포함
: ROS Kinetic package http://repositories.ros.org/status_page/ros_kinetic_default.html
: Metapackage
- 공통된 목적을 지닌 패키지들의 집합(ROS의 file system concepts)


 ROS Message (http://wiki.ros.org/Messages)
: 노드 간의 데이터를 주고 받음. 메시지는 integer, floating point, Boolean 같은 변수 형태

 

 ROS Topic (http://wiki.ros.org/Topics)

 

 ROS Service (http://wiki.ros.org/Services)
: ROS topic 통신 방식은 비동기 방식(필요에 따라 data 송수신)
: ROS는 필요에 따라 동기 방식 사용  Service 명칭
- 요청이 있을 때 응답 하는 Service server, 요청하고 응답 받는 Service client로 구분
- Service는 토픽과는 달리 일회성 메시지 통신. 서비스의 요청과 응답이 완료되면 연결된 두 노드의 접속은 끊김

 

 ROS Action (http://wiki.ros.org/actionlib)
: 요청 처리 후 응답까지 오랜 시간 필요하고
중간 결과값이 필요한 경우에 사용되는 message 통신 방식
: 요청과 응답에 해당되는 goal과 result, 중간 결과값의 feedback 추가
- Action의 goal을 정하는 action client
- goal에 맞춰 일을 수행하고 action result, feedback 전달하는 action server
: 비동기 방식 양방향 메시지 통신

 

 ROS Parameter (http://wiki.ros.org/Parameter%20Server#Parameters)
: Parameter는 default로 설정 값들이 지정되어, 필요에 따라 외부에서 읽거나 쓸 수 있음
특히 외부에서 쓰기 기능을 이용하여 상황에 따라 설정 값을 실시간으로 바꿀 수 있음
: 예를 들어 RPi Camera 설정

 

 ROS Parameter server (http://wiki.ros.org/Parameter%20Server)
: Parameter 사용할 때, 각 Parameter를 등록하는 서버

 

 catkin (http://wiki.ros.org/catkin)
: low-level build system macros and infrastructure for ROS. 
: ROS와 관련된 빌드, 패키지 관리, 패키지 간의 의존관계를 편리하게 사용하기 위함
: ROS의 빌드 시스템은 CMake(Cross Platform Make)를 이용, 패키지 폴더에 CMakeLists.txt 에 빌드 환경을 기술
→ ROS에서 CMake를 ROS에 맞게 수정하여, ROS에 특화된 catkin build system 


 rosbuild (http://wiki.ros.org/rosbuild)
: ROS Groovy 이전 version에 적용된 build system 


 roscore (http://wiki.ros.org/roscore)
: ROS master를 구동하는 명령어
: roscore는 같은 네트워크에서 하나만 구동 됨. 
- ROS를 구동하면 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재된 URI 주소와 포트를 사용

 

 rosrun (http://wiki.ros.org/rosbash#rosrun)
: ROS의 기본 실행 명령어
: package에서 하나의 node를 실행하는데 사용
- 노드가 사용하는 URI 주소와 포트는 현재 노드가 실행 중인 컴퓨터에 저장된 ROS_HOSTNAME 환경 변수 값을 URI 주소로 사용

 

 roslaunch (http://wiki.ros.org/roslaunch)
: 여러 node를 실행하는데 사용. 명령어를 통해 하나 그 이상의 정해진 노드를 실행
: node를 실행할 때, package의 parameter나 node name 변경, node name space 설정, ROS_ROOT 및 ROS_PACKAGE_PATH 설정, 
환경변수 변경 등 node 실행에 특화된 ROS 명령어
: roslaunch는 *.launch 파일을 사용하여 실행 node에 대한 설정을 해주며
→ XML(Extensible Markup Language)에 기반, XML 태그 형태의 다양한 옵션을 제공

 

 bag (http://wiki.ros.org/Bags)
: ROS에서 주고받는 메시지의 데이터를 저장하는 파일 포맷을 bag 라고 하며 확장자로 *.bag 사용
: ROS에서는 이 bag를 이용하여 메시지를 저장하고 필요할 때 이를 재생하여 이전 상황을 그대로 재현

 

 repository 
: 공개된 package가 저장된 URL 주소. 
: svn, hg, git 등의 소스 관리 시스템을 이용하여 이슈, 개발, 내려 받기 등을 관리
: 제공되는 ROS 패키지의 많은 수가 github에 각 소스 코드의 repository로 사용됨

 

 graph
: node, topic, publisher, subscriber 관계는 graph를 통해 시각적으로 나타냄
: 실행은 rqt_graph package의 rqt_graph node를 실행
- 실행 명령에는 rqt_graph과 rosrun rqt_graph

 

 name
: node, topic, parameter, service는 모두 name을 지님
: name을 마스터에 등록하고 각 node의 topic, parameter, service를 사용할 때 이름을 기반으로 검색, 메시지를 전송

 

 client library (http://wiki.ros.org/Client%20Libraries)
: ROS는 사용되는 언어의 의존성을 낮추기 위해 다양한 언어 지원
: roscpp, rospy, roslisp, rosjava, roslua, roscs, roseus, PhaROS, rosR 등

 

 URI(Uniform Resource Identifier)
: 통합 자원 식별자. 인터넷에 있는 자원을 나타내는 유일한 주소. 인터넷 프로토콜에서 식별자

 

 MD5(Message Digest algorithm5)
: 128bit 암호화 Hash function(임의의 길이를 갖는 임의의 data를 고정 길이 data로 mapping)
: 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사

 

 RPC(Remote Procedure Call)
: 멀리 떨어져(Remote) 있는 컴퓨터상의 프로그램이 다른 컴퓨터 내에 있는 서브 프로그램(Procedure)을 불러내는(Call) 것을 의미

 

 XML(Extensible Markup Language)
: 태그 등을 이용하여 데이터의 구조를 명기하는 언어. ROS에서는 *.launch, *.urdf, package.xml 사용

 

 XMLRPC(eXtensible Markup Language - Remote Procedure Call)
: RPC 프로토콜의 일종
: 인코딩 형식에서는 XML을 채택
전송 방식에서는 접속 상태를 유지하지 않고 & 점검하지 않는 요청과 응답 방식의 HTTP 프로토콜을 사용

 

 TCP(Transmission Control Protocol)
: 전송 제어 프로토콜. TCP/IP라 부름.

 

 이는 인터넷 프로토콜 계층의 시각에서 보면 IP(Internet Protocol)를 기반으로 전송 제어 프로토콜인 TCP를 사용하여
데이터의 전달을 보증하고 보낸 순서대로 송수신
: 메시지 및 서비스에서 사용되는 TCP/IP 기반의 메시지 방식을 TCPROS

 

 CMakeLists.txt (http://wiki.ros.org/catkin/CMakeLists.txt)
: ROS 빌드 시스템 catkin은 기본적으로 CMake 이용  package 폴더에 CMakeLists.txt 파일에 빌드 환경 기재

 

 package.xml
: 패키지의 정보를 담은 XML 파일. 패키지의 이름, 저작자, 라이선스 등을 기술

 

3-4. ROS Message 통신
: 최소 단위 실행 프로그램 node는 또 다른 node와 message를 통해 데이터를 주고받음  node 간의 메시지 통신
- topic : 단방향 메시지 송수신 방식
- service : 양방향 메시지 request/response 방식
- action : 양방향 메시지 goal/feedback/result 방식
- node 안에서 사용되는
parameter는 외부에서 변경 가능