Information/Docker & ROS

[Docker & ROS] ROS with DockStation

페트론 2022. 1. 18. 00:09

Goal of a Lecture


  • DockStation과 ROS의 특징에 대한 간단한 이론 학습.
  • DockStation을 통한 ROS 실습.

 

DockStation


DockStation은 docker-compose를 이용해 container들을 GUI 형태로 설계할 수 있는 도구.

 

소프트웨어의 복잡성이 증가할수록 텍스트 기반이 아닌 GUI 형태로 내가 설계한 시스템을 가시화(Visualize)하여 이해도를 높일 필요가 있음.

이러한 의미에서 Docker Container를 모듈형태로 가시화할 수 있는 DockStation은 유용한 도구임.

 

https://dockstation.io/

 

DockStation - Developing with Docker has never been so easy and convenient

Work with services and containers The DockStation helps to manage projects and container settings, e.g. bind a local host to a project, simple version changing, map ports, assign and reassign environment variables, change entrypoint and start command instr

dockstation.io

 

ROS


ROS의 자세한 내용은 표윤석 박사님의 "ROS 프로그래밍" 저서를 참고바람.

ROS 프로그래밍

 

ROS 로봇 프로그래밍 - 교보문고

기초 개념부터 프로그래밍 학습, 실제 로봇에 적용까지 | 이 책은 국내에 ROS를 처음 소개했던 "ROS 로봇 프로그래밍(표윤석 저, 2015)"의 개정증보판입니다. 로봇 전문가이자 ROS 에반젤리스트인 표

www.kyobobook.co.kr

 

처음 ROS를 접하고 느낀 ROS의 가장 큰 장점은 로보틱스에 필요한 소프트웨어의 각 알고리즘이 모듈화 되어서 "Node" 형태로 분리되어 있는 것이었음.

물론 "Loosely Coupled" 프로그래밍과 "Tightly Coupled" 프로그래밍은 프로그램 컨셉과 시스템의 요구사항에 따라 여러 형태를 갖겠지만, 프로그램을 적정한 선에서 모듈화 하는 것 자체가 로보틱스 소프트웨어 설계에서는 많은 숙고가 필요한 작업임.

이러한 부분에서 소요되는 시간을 ROS를 통해 많이 단축시킬 수 있었다고 느낌.

 

하지만, 이러한 ROS도 프로그램의 복잡도가 증가할수록, 그리고 텍스트기반에서 연속되는 개발로 인해 안정적인 디버깅 및 개발이 쉽지 않음.

또한 Linux OS(Ubuntu)의 특성상 계속되는 OS의 변화, OS에 의존하는 의존성 패키지, 패키지에 의존하는 프로그램이라는 악순환으로 인해 기존에 개발한 프로그램의 수명이 길게 유지되기는 더욱 어려워짐.

 

Docker는 이러한 문제를 해결할 수 있도록 도움을 줌.

Docker에 대한 장단점 및 자세한 설명은 해당 포스트에서는 다루지 않음.

 

 

Practice


1. Install DockStation

먼저 DockStation을 설치함.

(DockStation을 사용하기 위해 필요한 Docker등의 설치는 여기서 다루지 않음.)

 

2. Add new Project

새로운 프로젝트 생성을 하면 다음과 같은 화면을 볼 수 있음.

 

먼저 프로젝트 명을 정한 뒤, "SET PATH" 버튼을 눌러 "docker-compose.yml" 파일이 저장될 경로를 설정해줌.

(필자는 "ros-talker-listener"를 프로젝트 명으로 하였으니, 참고.)

(필자는 "home/[$user]/DockStation/ros-talker-listener"를 경로로 하였으니, 참고.)

 

 

이 후, "Create"을 눌러서 프로젝트를 생성할 수 있음.

 

3. Create a ROS Container

프로젝트가 생성되면 아래 사진과 같이 빈 공간이 나옴. 

그리고 중간에 여러 이미지들이 존재하는 것을 확인할 수 있음.

 

하단의 검색창에 "ros"를 검색하게 되면 "official/ros" 이미지를 찾을 수 있음.

 

이를 우측 빈 도면에 드래그하면 해당 이미지에서 어떤 버전(Tag)의 이미지를 사용할 것인지 선택할 수 있음.

우리는 "kinetic-ros-core" 버전을 선택함.

 

이를 통해 아래와 같이 "ros" 컨테이너가 생성되는 것을 확인할 수 있음.

(Service := Container)

 

4. Edit docker-compose.yml

우상단의 "EDITOR" 메뉴를 클릭하면 현재 설계된 시스템에 대한 docker-compose.yml 파일의 내용을 확인할 수 있음.

현재는 단지 컨테이너가 존재만 하는 상황이기 때문에 아무런 명령어가 추가되어있지 않음.

하기 링크를 참조하여 docker-compose.yml에 내용을 수정해줌.

http://wiki.ros.org/docker/Tutorials/Compose

 

docker/Tutorials/Compose - ROS Wiki

Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. Getting started with ROS and Docker Compose De

wiki.ros.org

version: '2'

networks:
  ros:
    driver: bridge

services:
  ros-master:
    image: ros:kinetic-ros-core
    command: stdbuf -o L roscore
    networks:
      - ros
    restart: always

  talker:
    image: ros:kinetic-ros-core
    depends_on:
      - ros-master
    environment:
      - "ROS_MASTER_URI=http://ros-master:11311"
      - "ROS_HOSTNAME=talker"
    command: stdbuf -o L rostopic pub /chatter std_msgs/String "hello" -r 1
    networks:
      - ros
    restart: always

  listener:
    image: ros:kinetic-ros-core
    depends_on:
      - ros-master
    environment:
      - "ROS_MASTER_URI=http://ros-master:11311"
      - "ROS_HOSTNAME=listener"
    command: stdbuf -o L rostopic echo /chatter
    networks:
      - ros
    restart: always

 

"Save" 한 뒤, 우상단의 "SCHEME" 메뉴를 선택하면 컨테이너들이 생성된 것을 확인할 수 있음.

이 때, 화살표는 "depends_on"을 이용하여 추가한 의존성이 됨.

  • ros-master: roscore를 통해 ros master를 구동시키는 컨테이너
  • talker: "hello"라는 토픽 메시지를 발행(Publish)하는 컨테이너
  • listener: "hello"라는 토픽 메시지를 구독(Subscribe)하는 컨테이너

5. Run Containers

상단의 "Start" 버튼을 클릭해 컨테이너들을 구동시킴.

하기와 같이 각 컨테이너들에 녹색 불이 점등되고, "running" 상태로 변함.

우상단의 "General" 버튼을 클릭해 각 컨테이너의 로그를 확인할 수 있음.

ros-master
talker
listener

 

이 외에 다양한 활용 방안은 차후에 진행예정.

반응형