Tutorial/Control UR Robot with Docker and ROS

1. Theory of Linux / ROS / Docker

페트론 2022. 1. 15. 19:36

목차

    01. How to Control UR Robot?

    이번 튜토리얼의 목표는 UR 로봇의 제어. UR Robot을 제어하기 위한 다양한 방법들이 존재.

     

    UR Script

    Universal Robot 본사에서 제공하는 약속된 변수, 함수들을 이용하여 로봇을 제어.

    로봇의 제어기에 프로그램을 설치한 후, TCP/IP 통신을 통해 접근이 가능.

    작업 패턴 및 인터페이스가 단순한 경우 활용이 용이.

     

    아래 공식 문서 참고.

    scriptmanual_en_1.3.pdf
    0.35MB

    UR - ROS

    UR ROS Driver를 이용하여 로봇을 제어. ROS 제공하는 로봇 제어 및 디버깅을 위한 다양한 도구들을 활용할 수 있다는 장점을 지님.

    • 컨트롤러를 이용한 조작 테스트.
    • Moveit과 같은 패키지를 이용한 정기구학, 역기구학 제어.
    • Rviz를 이용한 로봇 Display.
    • ROS와 호환되는 다양한 센서군과의 통합 용이.

    GitHub - UniversalRobots/Universal_Robots_ROS_Driver: Universal Robots ROS driver supporting CB3 and e-Series

     

    GitHub - UniversalRobots/Universal_Robots_ROS_Driver: Universal Robots ROS driver supporting CB3 and e-Series

    Universal Robots ROS driver supporting CB3 and e-Series - GitHub - UniversalRobots/Universal_Robots_ROS_Driver: Universal Robots ROS driver supporting CB3 and e-Series

    github.com

     

    02. What is Linux?

    • Operating System
      • 운영체제(OS, Operating System)은 사용자가 프로그램을 통해 입출력 장치를 편리하게 다룰 수 있도록 해주는 중간 역할을 함.
    • Kernal
      • 컴퓨터의 한정된 자원을 효율적으로 사용할 수 있도록 하는 역할.
      • 운영체제에서 없어선 안될 중요한 존재로써 프로세스와 메모리 관리, 하드웨어 입출력 등을 전반적으로 관리함.
    • Linux
      • 소스코드가 오픈되어있는 대표적인 오픈 소프트웨어.
      • 컴퓨터 역사상 가장 많은 사람이 참여한 오픈소스 프로젝트.
      • Kernal의 일종인 Linux Kernal을 사용하는 운영체제를 가리킴.

     

    Windows vs Linux

    높은 보안성, 방대한 오픈소스, 높은 접근성과 신속한 운영관리 등의 이점으로 인해 로봇 어플리케이션 소프트웨어 시장의 리눅스 점유율은 점차 증가하고 있음.

     

    Ubuntu

    Ubuntu는 Linux Kernal을 기반으로 한 Linux 배포판 가운데 하나.

    Ubuntu는 배포판을 수정하거나 수정한 것을 재배포 할 수 있는 자유 소프트웨어로써 지금까지 수많은 변형 배포판들이 나왔음.

    Ubuntu의 기본적인 철학은 "전 세계의 사람 누구나 어렵지 않게 리눅스를 사용하자"라는 표어에서 알 수 있듯이, 기본적으로 세계의 다양한 언어를 지원하고 높은 사양의 컴퓨터를 요구하지 않음.

    이번 튜토리얼에서는 Ubuntu 환경에서 ROS, Docker, UR Robot 등의 실습을 진행함.

     

    03. What is ROS?

    ROS는 로봇 소프트웨어를 작성하기 위한 프레임워크로써, 각양각색의 로봇 플랫폼에서 로봇 행동을 만들어 내는 작업을 단순화시키는 목적의 도구, 라이브러리, 그리고 규약들을 모은 것.

    신뢰성 있는 범용 로봇 소프트웨어를 만드는 것은 매우 어려운 일이며, 하나의 개인 혹은 기관에서 밑바닥부터 완전한 시스템을 만들 수는 없음. ROS는 밑바닥부터 협력적인 로봇 소프트웨어 개발의 장려를 목적으로 함.

    ROS Framwork

    프레임 워크란 어떠한 목적을 달성하기 위해 복잡하게 얽혀 있는 문제를 해결하기 위한 구조를 의미함.

    ROS는 로봇 구동 및 협업을 위해 통신환경/도구/기능/생태계를 제공하는 프레임워크.

    노드간에 메시지 교환 방법으로 복잡한 프로그램을 잘게 나눠 공동 개발이 가능함.
    명령어 도구(Terminal), 시각화 도구(Rviz), GUI 도구 (RQT), 3차원 시뮬레이터 (Gazebo) 등 로봇 어플리케이션 개발에 활용할 수 있는 각종 유용한 도구들을 제공함.
    로보틱스에서 많이 사용되는 모델링(Modeling), 센싱(Sensing), 인식(Perception), 주행(Navigation), 조작(Manipulation) 기능을 지원함.
    세계를 대상으로 로보틱스 소프트웨어 공동 개발이 가능한 생태계 생성이 가능함. 로보틱스 분야의 발전에 기여함.

    Meta Operating System

    Meta - Operating System은 어플리케이션 분산 컴퓨팅 자원간의 가상화 레이어로 분산 컴퓨팅 자원을 활용하여, 스케쥴링 및 로드, 감시, 에러 처리 등을 실행하는 시스템이라고 볼 수 있음.

    ROS는 다수의 이기종 하드웨어간의 데이터 송수신, 스케쥴링, 에러 처리 등 로봇 응용 소프트웨어 개발을 위한 필수 기능들을 라이브러리 형태로 제공하는 Meta Operating System.

    Basic of ROS

    Master

    노드와 노드 사이의 연결 및 메시지 통신을 위한 네임 서버. 마스터가 없으면 ROS노드 간에 통신을 할 수 없음.

    Node

    최소 단위의 실행 가능한 프로세서를 가리키는 용어로써 하나의 실행 가능한 프로그램. 각 노드는 메시지 통신으로 데이터를 주고 받음.

    Package

    하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것.

    Massage

    메시지를 통해 노드간의 데이터를 주고받을 수 있음. 메시지는 integer, floating, point, boolean 과 같은 변수형태이며 원하는 형태의 메시지를 Customizing하는 것도 가능함.

     

    Features of ROS

    Communication Infra

    • 메시지 파싱 기능
      • 로봇 개발을 위해서는 제어를 위한 통신 프로토콜 설계가 기본.
      • ROS에서는 통신 시스템을 제공하여 다양한 하드웨어 및 개발환경에서도 통신이 가능하도록 함.
      • 이를 통해 코드 재사용을 촉진하는 노드들 간의 메시지 전달 인터페이스를 구성할 수 있음.
    • 메시지의 기록 및 재생
      • 노드 간에 송/수신되는 데이터인 메시지를 저장하고 필요시에 재사용 가능.
      • 저장된 메시지를 기반으로 반복적인 실험이 가능, 알고리즘 개발에 유용하게 활용할 수 있음.
    • 메시지 사용으로 인한 다양한 프로그래밍 언어 사용 가능
      • 노드 간의 데이터 교환을 위해 메시지를 사용하기 때문에 각 노드는 서로 다른 언어로 작성이 가능함. (ex. ROS-Python ↔ ROS-C++ 간의 통신 가능.)
    • 분산 매개 변수 시스템
      • 시스템에서 사용되는 변수를 글로벌 키 값으로 작성하여 공유 및 수정이 실시간으로 반영됨.

    Various Capabilities

    • 로봇에 대한 표준 메시지 정의
      • 각종 센서의 표준 메시지를 정의하여 모듈화하고 협업 작업을 유도하여 효율성을 향상시킴.
    • 로봇 기하학 라이브러리
      • 로봇 제어에 있어서 좌표계 시스템은 중요한 이슈이며, ROS에서는 로봇, 센서 등의 상대적 좌표를 트리화 시키는 TF(TransForm)를 제공함.
    • 로봇 기술 언어
      • 로봇의 물리적 특성을 설명하는 XML 문서 기술. (모델링, 무게 정보 등을 이용하여 Visualization, Simulation 등의 작업에 활용이 가능함.)
    • 진단 시스템
      • 로봇의 상태를 한 눈에 파악할 수 있는 진단 시스템 제공. 로봇 개발 과정에 있어서 디버깅 도구로 활용이 가능함.
    • 센싱/인식
      • 센서 드라이버, 센싱/인식 레벨의 라이브러리 제공. 원하는 센싱/인식 시스템을 빠르고 간편하게 설치가 가능.
    • 주행(Navigation)
      • 로봇의 위치/자세 추정 패키지를 이용하여 지도 내의 자기 위치 추정이 가능함. 지도 작성에 필요한 SLAM, 작성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리를 제공함.
    • 조작(Manipulation)
      • 로봇 암에 사용되는 정기구학(FK, Forward Kinematics), 역기구학(IK, Inverse Kinematics)을 지원하는 다양한 매니퓰레이션 라이브러리를 제공함.

    Various Tools

    [명령어 도구, Terminal] GUI 없이 ROS에서 제공되는 명령어로만 로봇 Access 및 거의 모든 ROS 기능 소화 가능.
    [시각화 도구, Rviz] 강력한 3D 시각화 도구 제공. 레이저, 카메라 등의 센서 데이터를 시각화할 수 있음. 로봇 외형과 계획된 동작을 표현할 수 있음.
    [GUI 도구, RQT] 그래픽 인터페이스 개발을 위한 QT 기반 프레임워크 제공. 노드와 그들 사이의 연결 정보 표시 (rqt_graph). 인코더, 전압, 또는 시간이 지남에 따라 변화하는 숫자를 플로팅 (rqt_plot). 데이터를 메시지 형태로 기록하고 재생 (rqt_bag). 이 외에 다양한 기능들이 존재하며, 목적에 따라 GUI 개발 또한 가능.
    [Simulation 도구, Gazebo] 물리 엔진을 탑재하여 로봇, 센서, 환경 모델 등을 지원하는 3차원 시뮬레이터로써, ROS와 높은 호환성을 지님.

    Key-Concept of ROS

    ROS TERM

    Message of ROS

    04. What is Docker?

    도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 도구.

    Why Docker?

    개인이 개발한 소프트웨어는 여러 패키지와 라이브러리에 의존성을 갖는 경우가 많음.

    소프트웨어의 복잡도가 증가할수록 이러한 의존성은 매우 높아지며, 이를 관리하는 것은 전문적인 기관이 아닌 개인에게는 쉽지 않은 일임.

    문서화가 잘 이루어졌다고 하더라도, 시간이 흘러 패키지 및 라이브러리의 업데이트에 따른 미세한 변화에도 오래 전 개발한 소프트웨어가 작동하지 않는 경우가 많음.

    또한 이러한 이유로 인해 개발 환경의 변화가 생기거나 개발 디바이스가 변경되는 경우, 기존의 개발 환경을 재현하는 것은 쉽지 않음.

    Virtual Machine vs Docker Container

    도커와 비슷한 개념으로 가상머신이 존재하지만, 둘은 엄연히 다른 차이를 지님.

    Virtual Machine

    • 하나의 Host OS에서 추가적으로 Guest OS(Virtual Machine)를 생성.
    • 각 Guest OS에서는 특정 목적을 위한 패키지 및 라이브러리 등을 설치 및 빌드.
    • 이 후, 각각의 응용 프로그램을 실행하게 됨.
    • 각각의 Guest OS에서 응용 프로그램을 동작시키기 때문에 프로세스 점유율이 높고 패키지 및 라이브러리 관리가 어려움.

    Docker Container

    • 하나의 Host OS에서 Container만을 구동하는 구조.
    • 각각의 Container들은 응용프로그램을 위해 필요한 패키지 및 라이브러리만을 지님.
    • 쓸데없는 메모리 낭비를 줄일 수 있으며, 유지보수가 수월함.
    • 해당 컨테이너만을 가져와 구동하면 되기 때문에, 작업환경에 구애받지 않음.

    Feature of Docker

    • 운영체제(OS, Operating System)에 구애받지 않고 개발이 가능.
    • 소프트웨어 유지보수에 강점을 지님.
    • 따라서 재사용성, 재생산성이 높음.

    Practice Environment

    도커는 Windows / Mac / Ubuntu 등 모든 OS에서 활용이 가능하다는 강점을 갖지만, CLI(명령어를 이용한 개발 시스템)을 중점적으로 사용하기 때문에 GUI 활용에 한계가 존재.

    Ubuntu를 Host OS로 활용하는 것이 도커 시스템을 활용하기 유연하므로, 해당 튜토리얼의 실습은 Ubuntu 환경 내에서 진행함.

    • 개인 노트북을 활용하는 경우, 듀얼부팅(Windows & Ubuntu 동시 설치) 혹은 순정(Ubuntu 단독)으로 설치를 수행.

    도커 컨테이너의 ROS 버전은 다양하게 적용 가능하나, 튜토리얼의 목표인 UR 로봇 제어를 위해 최적화된 ROS Melodic 버전을 주로 사용.

    Docker, Dockerhub, Github 아이디 생성을 권장함.

    반응형