최종수정일: 02-Jun-23

❑ ROS-Gazebo 시작하기

◼ 시스템 환경 구성

리눅스 환경 구성 방법

ROS와 Gazebo 모두 윈도우와 리눅스 어느 운영체제에서도 설치 가능하다. 그러나 각 프로그램이 리눅스 환경에서 개발되었다는 것을 고려할 때 리눅스 환경에 설치하는 것이 여러모로 자연스럽고 불필요한 오류를 회피할 수 있다. 따라서 ROS-Gazebo 프레임워크를 설치하기 위해서는 리눅스 환경이 필요하다.

✱1 WSL(Windows Subsystem for Linux)

  • 윈도우에서 네이티브로 리눅스 실행파일을 실행하기 위한 호환성 하위 계층 - 윈도우에서 리눅스를 사용하기 위한 가상화 도구 - 듀얼부팅 설정 불필요. 가상머신화 불필요. 빠른 속도 장점
  • 2016년에 WSL처음 등장 2019년에 WSL2 등장. Microsoft 재정기반으로 진행되고 있어서 개발속도가 매우 빠름 - 예를들어 Ubuntu에서 X.org (그래픽 표현 시스템)을 차세대 Wayland로 21.04 버전에서 변환했고 22.04 (2022년 4월) 부터 배포했는데, WSL은 2020부터 이미 Wayland 기반으로 개발됨

옵션 1. 윈도우 WSL 가상화

리눅스 환경을 구성하는 방법은 리눅스를 부팅 운영체제로써 사용하는 네이티브 방식과 윈도우 운영체제 PC에서 가상환경으로 구성하는 방법이 있다. 일반적으로 가상환경은 성능저하를 야기하나, 2016년에 등장한 윈도우 정식 WSL 가상환경을 활용하면 성능저하 없이✱2 리눅스 환경을 구성할 수 있다. 이렇게 구성할 경우 전체적인 구동 시스템은 아래 그림과 같이 구성된다.

%% GRAPH TYPE %% graph LR; %% Colors %% classDef blue fill:#2374f7,stroke:#000,stroke-width:2px,color:#fff classDef pink fill:#eb3dd6,stroke:#000,stroke-width:2px,color:#fff classDef orange fill:#fc822b,stroke:#000,stroke-width:2px,color:#fff classDef red fill:#ed2633,stroke:#000,stroke-width:2px,color:#fff classDef green fill:#16b522,stroke:#000,stroke-width:2px,color:#fff %% CONTENTS %% oid1("Base OS (윈도우)"):::blue--가상화--oWSL:::green; WSL--oid1("리눅스 OS (Ubuntu)"):::orange; id1("리눅스(Ubuntu)"):::orange--구동-.-ROS; id1("리눅스(Ubuntu)"):::orange--구동-.-Gazebo;

✱2 파일의 읽기쓰기 성능에 제한이 있으나 계산속도에서는 네이티브와 차이가 거의 없다.

윈도우 WSL 환경 준비

  • 윈도우 11
    • 윈도우 11부터는 WSL을 설치하기 위한 환경이 이미 구성되어 있음
  • 윈도우 10
    • 버전 2004 (빌드 19041) 이상
    • 이전 버전의 경우 수동 설치
WSL2 설치

윈도우 시작버튼을 오른쪽 클릭해 Windows PowerShell(관리자)더보기 실행을 클릭, 윈도우 터미널을 관리자 모드로 실행하고 다음 명령어를 입력한 다음 컴퓨터를 다시 시작한다. 이때 WSL의 설치와 함께 리눅스 운영체제 중 하나인 Ubuntu의 22.04 버전을 함께 설치하며, 설치과정에서 Ubuntu에서 사용할 비밀번호를 설정하게 된다.

wsl --install Ubuntu-22.04
  • 실행이 안될 땐 아래의 명령어로 실행해 봅시다.
    wsl --install -d Ubuntu-22.04
    

재시작 후, 다시 Windows PowerShell(관리자)에서 다음 명령어를 입력해 Ubuntu 22.04를 실행하는 WSL의 버전을 2로 설정한다.

wsl --set-version Ubuntu-22.04 2

※ 여기 오류가 나와요!

(필요 시) 외장그래픽 드라이버 설정

외장그래픽을 사용하면 Gazebo 시뮬레이터의 렌더링 속도 (FPS) 가 크게 향상시킬 수 있다. WSL은 Intel, AMD, NVIDIA 그래픽 드라이버를 공식 지원하고 있다. 먼저 위의 WSL2 설치를 통해 우분투를 설치했다면 윈도우 시작버튼을 누르고 Ubuntu를 검색해 실행시킨다. (Ubuntu로 실행해야 한다!!)

우분투를 실행하고, 위 과정에서 이름과 password를 입력하라는 문구가 나오지 않았다면, 이 단계에서 이름과 password 를 설정하라고 뜰 것이다. 원하는 이름과 password를 입력하면 된다. (password를 입력 할 때 입력이 안되는 것 처럼 보일 수 있다. 입력이 안되는 것이 아니라 보안 안전 등의 이유로 눈으로만 보이지 않고, 입력 되고 있는 것이니 당황하지 말고 원하는 password를 입력 후 엔터를 누르면 된다.)

아래 명령어를 실행 해, 현재 그래픽 화면 구성 상태를 확인한다.

sudo apt update
sudo apt install -y x11-apps
xeyes

xeyes를 실행하면 두 눈이 보이는 창이 뜨고 마우스를 따라 갈 것이다. 이제 외장그래픽 GPU가속을 확인해보자.

sudo apt-get install -y mesa-utils
glxgears

맞물려가는 기어가 보일 것이다. 잘 보인다면 이미 설정이 잘 되어있는것이며 아니라면, 아래 링크를 통해 외장 그래픽 드라이버를 설치한다.

설치 완료 후, 재부팅하고 다시 우분투에서 아래 명령어를 입력해본다.

glxinfo | grep OpenGL

그러면 다음과 유사한 메세지가 뜰 것이다.

OpenGL vendor string: Microsoft Corporation
OpenGL renderer string: D3D12 (NVIDIA GeForce GTX 1660 Ti)

만약, 에러가 발생한다면,

sudo add-apt-repository ppa:kisak/kisak-mesa && sudo apt-get update && sudo apt dist-upgrade

옵션 2. 네이티브 리눅스 환경

네이티브 리눅스 환경구성은 PC에서 리눅스 운영체제를 Base OS로 구동하는 것을 의미한다. 옵션 1의 WSL을 이용하는 방법보다 구동환경이 단순하나 윈도우와 리눅스를 동시에 구동할 수 없어 다시 매번 재부팅을 해야하는 큰 제약을 가지고 있다. 다른 용도로 사용하지 않으며 고정된 서버 컴퓨터의 경우 유용할 수 있으나, 리눅스 컴퓨터의 원격제어는 항상 매끄럽지 못해 문제가 발생할 경우 접근이 어려워지는 경우가 빈번히 발생하곤 한다.

리눅스 네이티브 설치 (feat. Ubuntu)

  • Ubuntu 설치 필요 하드웨어 확인
    • ** 최소 8GB, 권장 12GB 이상 USB 드라이브 **, 25GB 이상 빈 하드웨어 용량
  • Ubuntu 이미지 다운로드 : 22.04.1 Desktop버전 다운로드 링크
  • 부팅가능 USB 드라이브 구성
    • 무설치 부팅 USB 만들기 프로그램 Rufus 다온루드 : 3.21 포터블 버전 다운로드 링크
    • 실행해 다운받은 Ubuntu 이미지와 USB 드라이브를 선택해 Ubuntu 설치 USB 드라이브 구성
  • Ubuntu 설치 USB 드라이브로 부팅
    • 재시작 시, F12키 (시스템이 따라 다름, F9키 또는 F2키 가능성 있음)를 눌러 USB 부팅을 선택하고, 설치 안내에 따라 Ubuntu 설치
    • ** 이때 Drive 구성에서, 기존의 윈도우 환경을 삭제하지 않도록 주의한다 **
  • 설치 완료 후, 재시작하고 Ubuntu로 부팅
%% GRAPH TYPE %% graph LR; %% Colors %% classDef blue fill:#2374f7,stroke:#000,stroke-width:2px,color:#fff classDef pink fill:#eb3dd6,stroke:#000,stroke-width:2px,color:#fff classDef orange fill:#fc822b,stroke:#000,stroke-width:2px,color:#fff classDef red fill:#ed2633,stroke:#000,stroke-width:2px,color:#fff classDef green fill:#16b522,stroke:#000,stroke-width:2px,color:#fff %% CONTENTS %% oid1("Base OS (리눅스 Ubuntu)"):::blue--구동-.-ROS; oid1("Base OS (리눅스 Ubuntu)"):::blue--구동-.-Gazebo;

◼ ROS-Gazebo 설치

ROS-Gazebo 설치방법

리눅스 (Ubuntu) 환경에서 ROS와 Gazebo를 구동하는 방법은 직접 설치와 Docker구성이 있다.

✱3 Docker에 대한 설명과 기초학습은 Docker 학습에 있다.

%% GRAPH TYPE %% graph LR; %% Colors %% classDef blue fill:#2374f7,stroke:#000,stroke-width:2px,color:#fff classDef pink fill:#eb3dd6,stroke:#000,stroke-width:2px,color:#fff classDef orange fill:#fc822b,stroke:#000,stroke-width:2px,color:#fff classDef red fill:#ed2633,stroke:#000,stroke-width:2px,color:#fff classDef green fill:#16b522,stroke:#000,stroke-width:2px,color:#fff %% CONTENTS %% id1("리눅스 OS (Ubuntu)"):::orange--직접구동-.-ROS; id1("리눅스 OS (Ubuntu)"):::orange--직접구동-.-Gazebo;
%% GRAPH TYPE %% graph LR; %% Colors %% classDef blue fill:#2374f7,stroke:#000,stroke-width:2px,color:#fff classDef pink fill:#eb3dd6,stroke:#000,stroke-width:2px,color:#fff classDef orange fill:#fc822b,stroke:#000,stroke-width:2px,color:#fff classDef red fill:#ed2633,stroke:#000,stroke-width:2px,color:#fff classDef green fill:#16b522,stroke:#000,stroke-width:2px,color:#fff %% CONTENTS %% oid1("리눅스 OS (Ubuntu)"):::orange--oid1("Docker"):::blue; id1("Docker"):::blue-.-ROS; id1("Docker"):::blue-.-Gazebo;

옵션 1. Ubuntu에 직접설치

ROS 설치

Ubuntu 22.04 (별칭 Ubuntu Jammy)의 경우 ROS 2 Humble Hawksbill의 Debian Packages (아이폰의 AppStore의 App과 유사한 개념)가 있다.

UTF-8 지원 로컬 설정

ROS를 정상적으로 구동하기 위해서는 시스템의 로컬이 UTF-8을 지원하는 것으로 설정되어야 한다. 종종 로컬이 ‘POSTIX’로 되어 있을 수 있으므로 UTF-8을 지원하는 것으로 설정되어 있는지 확인한다. 터미널에서 locale 명령어를 실행 했을 때, UTF-8이 섞인 출력값을 얻는다면 잘 설정되어 있는 것이다. 그렇지 않다거나 또는 잘 모르겠다면 다음 명령어를 순서대로 실행한다.

locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings

소스코드 설정

Ubuntu는 apt(AppStore와 유사한 개념, 프로그램을 설치하는 프로그램)을 이용해 프로그램을 설치하고, apt는 Repository라고 하는 프로그램 서버에 접근해 프로그램을 찾아 다운받는다.

ROS를 설치하기 위해 ROS2의 Repository를 시스템에 추가한다. 이때, 먼저 Ubuntu Universe repositoy를 활성화한다.

sudo apt install software-properties-common
sudo add-apt-repository universe

그리고 먼저 apt가 ROS2 Repository에 접근하기 위한 ROS 2 GPG key를 apt에 등록한다.

sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

그리고 ROS2의 Repository를 apt의 소스리스트에 등록한다. 아래 명령어를 입력 시 화면상 변화는 없다. 당황하지 말자.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

ROS 2 패키지 설치

apt의 Repository 캐시를 업데이트해 최신 프로그램 목록을 불러온다.

sudo apt update

ROS 2 패키지는 Ubuntu 시스템과 함께 자주 업데이트 된다. 항상 최신 Ubuntu 위에 ROS가 설치될 수 있도록 먼저 Ubuntu를 업데이트 한다.

sudo apt upgrade

ROS Desktop버전(추천)을 설치한다. 여기에는 ROS, RViz, 데모, 튜토리얼이 포함되어 있다.

sudo apt install ros-humble-desktop

ROS Base버전(깡통버전)을 설치한다. 여기에는 통신라이브러리, 메시지 패키지, 터미널 프로그램 등이 포함되어 있으며 GUI 프로그램들은 포함되어 있지 않다.

sudo apt install ros-humble-ros-base

개발자 툴들 설치한다. 여기에는 ROS 패키지를 빌드하기 위한 컴파일러와 유틸리티 등이 포함되어 있다.

sudo apt install ros-dev-tools

설치 후 환경설정

ROS 환경설정 스크립트를 실행한다. 이로써 ROS 프로그램을 어디서든 실행 가능하게 된다.

source /opt/ros/humble/setup.bash

ROS 설치 테스트

위에서 ros-humble-desktop (Desktop버전)을 설치했다면 아래 예시를 실행해 볼 수 있다.

터미널 창에서 C++로 작성된 talker 프로그램을 구동한다. talker 프로그램은 메시지(Hello World)를 Publish한다.

source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker

새로운 터미널 창에서 Python으로 작성된 listener 프로그램을 구동한다. listener 프로그램은 talker의 메시지를 수신하고 I heard라고 대답하며 들은 메시지를 프린트한다.

source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener

ROS를 어디서든 실행 가능하도록 설정

위의 ROS 설치 테스트에서 매번 새로운 터미널 창에서 source /opt/ros/humble/setup.bash를 실행해 ROS 환경을 설정해 주어야 한다. 이러한 번거로움을 회피하기 위해 새로운 터미널 창이 열릴때 매번 실행되는 ~/.bashrc 파일에 추가한다.

echo "" >> ~/.bashrc
echo "# ROS Set-up Script" >> ~/.bashrc
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

Gazebo Fortress 설치

현재 Gazebo 최신 LTS(장기지원 버전)은 2021년 출시한 Gazebo Fortress로 2026년 9월까지 지원될 예정이다. 목적에 따라 두가지 설치방법이 있다.

  • ROS/Gazebo 설치방법
    • 바이너리 설치 : 바이너리(실행파일)로 설치해 제공되는 패키지들의 구동 (추가 개발/다운로드 패키지도 구동 가능)
    • 소스코드 설치 : 제공되는 패키지 코드를 수정하기 위한 설치방법

바이너리 설치방법

Fortress의 바이너리는 osrfoundation의 repository에 등록되어 제공되고 있으며, ignition-fortress 패키지를 설치하면 된다.

먼저 repository를 업데이트 하고 바이너리 설치에 필요한 패키지들을 설치한다.

sudo apt-get update
sudo apt-get install lsb-release wget gnupg

그리고 Gazebo Fortress를 설치한다.

sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install ignition-fortress ros-humble-ros-ign
  • 그래픽카드 설정
    • 먼저 아래 glxgears 프로그램을 구동해 세개의 기어가 돌아가는 화면이 잘 나오는지 확인한다. 만약 문제가 있다면 다음의 방법을 적용해 본다.

    • 내장그래픽을 사용할 경우, 아래 코드를 실행할 필요가 있다.
      export LIBGL_ALWAYS_SOFTWARE=1
      echo "" >> ~/.bashrc
      echo "# Software GPU acceleration" >> ~/.bashrc
      echo "export LIBGL_ALWAYS_SOFTWARE=1" >> ~/.bashrc
      
    • 그래픽카드 설정이 잘 되었는지 확인하려면 glxgears 프로그램을 구동해 세 개의 기어가 돌아가는 화면이 잘 나오는지 확인한다.

      # glxgears 가 포함된 패키지 설치
      sudo apt install -y mesa-utils
      # glxgears 실행
      glxgears
      
    • 외장그래픽에서 glxgears 가 올바로 실행되지 않는다면, 다음 패키지를 설치해 본다.

      # WSL 특화 mesa 패키지 설치
      sudo add-apt-repository ppa:kisak/kisak-mesa
      sudo apt-get update && sudo apt dist-upgrade
      # 외장 GPU가 올바로 설정되었는지 아래 명령어를 입력해 출력값에 외장 GPU이름이 잡히는지 확인
      glxinfo | grep OpenGL
      # glxgears 실행
      glxgears
      

위 명령어를 통해 필요한 모든 라이브러리와 실행파일들이 설치되며 ign gazebo로 Gazebo를 실행할 수 있다. 설치가 완료되었으면 튜토리얼 예제를 실행해 본다.

소스코드 설치방법

소스코드를 다운받아 설치하면 Gazebo를 컴파일하기 위한 개발환경이 같이 구성되므로 새로운 물리엔진이나 센서 등을 개발하고 구성해 함께 구동하거나 기존 코드를 수정할 수 있다.

제일 간단한 설치방법은 vcstool을 사용하는 방법이며 모든 필요 개발자 라이브러리들과 Gazebo를 오류없이 설치하는데 colcon을 사용하는 것이 좋다. 몇몇 툴들은 Python 3.5 이상의 환경을 필요로 한다.

Ubuntu 기본 개발자 툴 설치

Ubuntu에서 기본적으로 제공하는 개발자 툴들을 설치한다.

sudo apt install python3-pip wget lsb-release gnupg curl git
vcstool과 colcon 설치

Python의 패키지 매니저인 pip을 이용해 vcstoolcolcon을 설치한다.

# Local 계정의 pip 설치경로를 PATH에 추가
export PATH=$PATH:$HOME/.local/bin/
echo "" >> ~/.bashrc
echo "# Path settings for local pip installations" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/.local/bin/" >> ~/.bashrc
# vcstool 설치
pip install vcstool
# colcon 설치
pip install -U colcon-common-extensions

소스코드 다운로드

먼저 vcstoolcolcon을 이용해 소스코드를 다운로드하고 컴파일 할 개발자 workspace 공간을 만든다. workspace 대신 다른 이름을 사용할 수 있다.

# 로컬계정 home 폴더에 workspace/src 폴더 생성
mkdir -p ~/workspace/src
cd ~/workspace/src

Gazebo Fortress를 설치하기 위해 필요한 파일은 collection-fortress.yaml 파일 안에 모두 정리되어 있다. 이 파일을 workspace 공간에 다운받는다.

wget https://raw.githubusercontent.com/ignition-tooling/gazebodistro/master/collection-fortress.yaml

이제 vcstool을 이용해 yaml파일 안에 적혀있는 모든 소스코드들을 다운받는다.

vcs import < collection-fortress.yaml

인터넷 속도에 따라 다운로드에 시간이 많이 소요될 수 있습니다.

필요 라이브러리 설치

다운받은 소스코드를 다운받고 컴파일하기 전에 필요한 라이브러리들을 먼저 설치한다. apt의 repository 목록에 osrfoundation의 repository를 추가한다.

sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update

그리고 아래 명령어를 이용해 모든 필요 라이브러리들을 설치한다.

sudo apt -y install \
  $(sort -u $(find . -iname 'packages-'`lsb_release -cs`'.apt' -o -iname 'packages.apt' | grep -v '/\.git/') | sed '/ignition\|sdf/d' | tr '\n' ' ')

Gazebo 라이브러리 컴파일

이제 colcon을 이용해 Gazebo 라이브러리들을 컴파일한다. 먼저 workspace 폴더로 이동한다.

cd ~/workspace

colcon을 이용한 컴파일 명령에는 다음과 같은 옵션이 있다.

  • 일반 컴파일

    colcon build --merge-install
    
  • 고속 컴파일
    • 컴파일 테스트를 스킵해 컴파일 속도 증가
    colcon build --cmake-args -DBUILD_TESTING=OFF --merge-install
    
  • 디버깅 컴파일
    • 컴파일 속도는 느려지나 문제 발생 시 디버깅 가능
    • GDB를 이용해 컴파일 중 문제 확인 가능
    colcon build --cmake-args -DBUILD_TESTING=OFF --merge-install
    
  • 특정 라이브러리 패키지만 컴파일
    • 개발한 라이브러리 또는 문제가 된 특정 패키지만 컴파일
    • 명령어 마지막의 PACKAGE_NAME에 원하는 패키지 이름을 대입
    • 연관된 종속 라이브러리들을 함께 컴파일 하는 경우

      colcon build --merge-install --packages-up-to PACKAGE_NAME
      
    • 종속 라이브러리들은 무시하고 해당 패키지만 컴파일 하는 경우

      colcon build --packages-select PACKAGE_NAME
      

Workspace 활성화

모든 컴파일된 실행 가능한 프로그램들은 ~/workspace/install 폴더 안에 저장된다. 해당 프로그램들을 올바르게 실행하려면 다음의 명령어를 통해 해당 workspace를 활성화한다.

source ~/workspace/install/setup.bash

위 명령어는 새로운 터미널 창에서 매번 입력해 활성화 해야 한다. 여러개의 workspace를 이용할 경우가 아니라면, 위 명령어를 ~/.bashrc에 등록해 새로운 터미널 창이 실행 될 때 자동으로 활성화되도록 한다.

echo "" >> ~/.bashrc
echo "# Automatic set-up of the Gazebo in ~/workspace" >> ~/.bashrc
echo "source ~/workspace/install/setup.bash" >> ~/.bashrc

이제 ign gazebo로 Gazebo를 실행할 수 있다. 설치가 완료되었으면 튜토리얼 예제를 실행해 본다.

튜토리얼 예제 실행

Gazebo를 설치한 후 아래 명령어를 이용해 3D 로봇 시뮬레이터를 실행하고 함께 설치된 shapes.sdf 환경을 불러온다.

ign gazebo shapes.sdf

위 명령어를 통해 Gazebo가 구동되는 서버(Gazebo Server)와 Gazebo 화면(Gazebo GUI) 창을 실행하며 5개의 단순한 3차원 물체들이 놓여진 환경을 볼 수 있다.

실행 시 Gazebo 내부 메시지 들을 확인하려면 -v 4 명령어를 추가해 실행시킨다. 이때 숫자 -v 이후의 숫자는 출력할 메시지 범위를 나타내며, 순서대로 에러(error), 주의(warning), 정보(informational), 디버깅(debugging) 메시지를 의미하고 1부터 4까지 선택 가능하다.

ign gazebo shapes.sdf -v 4

또, GUI 창 없이 headless 모드(Gazebo Server만 실행)로 실행하려면 -s 명령어를 사용한다.

ign gazebo -s -v 4 shapes.sdf

옵션 2. Docker로 설치

Docker를 이용하면 아주 간단히 설치할 수 있다. 그러나 설치하는 ROS와 Gazebo의 버전의 선택이 제한된다.

Docker에 대한 설명과 기초학습은 Docker 학습에 있다.

Docker설치

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

제일 마지막 명령어로 hello-world 가 보인다면 Docker설치 성공이다. 이제 아래 명령어로 ROS와 Gazebo가 설치된 이미지를 실행할 수 있다. 이때 명령어를 실행하는 폴더를 마운트하므로 명령어를 실행시키는 위치에 주의해야 한다.

docker run --privileged --mac-address 00:15:5d:47:9c:d9 -v "/tmp/.X11-unix:/tmp/.X11-unix" -e DISPLAY=${DISPLAY} -it --rm -v $PWD:/home/user/workdir -w /home/user/workdir woensugchoi
/ros-gazebo:generic_x86_64 "/bin/bash"

Mac OS에 설치

Mac OS에 설치방법 미완성!! Mac OS에 설치방법 미완성!!

  • Faster Ubuntu VM with ARM64 (need to test GUI performance)
    • multipass
      • https://medium.com/@paulrobu/how-to-run-ubuntu-22-04-vms-on-apple-m1-arm-based-systems-for-free-c8283fb38309
    • lima
      • https://github.com/lima-vm/lima
    • Various Liinux VM comparisons including lima
      • https://levelup.gitconnected.com/running-amd64-linux-on-apple-m1-with-qemu-utm-64d67cccd6f8
  • Virtual install on Mac OS VM
    • https://github.com/insidegui/VirtualBuddy
    • https://gazebosim.org/docs/garden

Mac OS에 설치방법 미완성!! Mac OS에 설치방법 미완성!!

ARM64 Ubuntu Lima 구동

Mac OS X는 리눅스 환경과 유사하나 애플의 전용 애플 실리콘 (M1 칩 이후) 적용 이후 기존의 인텔 기반 컴퓨터들(X86_64 아키텍쳐)과 다른 CPU 아키텍쳐가 되었다. 이는 라즈베리 파이나 안드로이드와 유사한 ARM64 아키텍쳐을 이용하여 전력비를 극대화하는 방법에 해당한다.

Lima는 현재도 활발히 개발되고 있는 패키지로 윈도우의 WSL과 매우 유사한 개발환경을 제공한다. 아직 Wayland를 이용한 직접적 GUI구동은 제공되지 않으나, 이부분은 원격데크트톱 접속으로 해결할 수 있다.

  • Lima를 이용해 Ubuntu 22.04 설치

    # Install brew package manger
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    # Install Lima with brew
    brew install lima
    # Set Virtual Machine ubuntu 22.04 (ARM64 Arch)
    limactl start --name=ubuntu-22.04 https://raw.githubusercontent.com/lima-vm/lima/master/examples/ubuntu-lts.yaml
    # Set X86_64 Virtual Machine with Rosetta2
    limactl start --name=ubuntu-x86_64 https://raw.githubusercontent.com/lima-vm/lima/master/examples/experimental/vz.yaml
    
  • Run Lima and set password

    # Find out default username
    whoami
    limactl shell ubuntu-22.04
    sudo passwd $(whoami)
    # Add user to sudo and GUI group
    sudo usermod -a -G sudo $(whoami)
    sudo usermod -a -G adm $(whoami)
    
  • Install GUI Desktop and XRDP

    sudo apt update && sudo apt -y upgrade
    # Keep current ssh config when asked
    sudo apt install -y ubuntu-desktop xrdp
    sudo systemctl start xrdp
    # Now collect with RDP client to localhost
    
  • 원격 데스크탑 어플로 localhost 아이피주소에 접속. 이때 사용자명은 Mac OS 터미널의 사용자명과 같고 (Lima 내에서 whoami 명령어를 통해서도 확인 가능하다) 비밀번호는 앞서 설정한 값과 같다. 접속 시 Administrator의 비밀번호를 묻는데 취소로 무시해주면 된다.

  • 관련해 추가 연구가 필요한 내용

    • Wayland ported Owl : https://github.com/lima-vm/lima/issues/2
    • WSLg와 같이 Wayland를 직접 이용하는 방법으로 lima의 Issue 번호 2번으로 초기부터 논의되어왔으나 아직 만들어지지 않음

ARM64 Ubuntu Docker 구동

Mac OS X는 리눅스 환경과 유사하나 애플의 전용 애플 실리콘 (M1 칩 이후) 적용 이후 기존의 인텔 기반 컴퓨터들(X86_64 아키텍쳐)과 다른 CPU 아키텍쳐가 되었다. 이는 라즈베리 파이나 안드로이드와 유사한 ARM64 아키텍쳐을 이용하여 전력비를 극대화하는 방법에 해당한다.

따라서 Mac OS에 설치하기 위해서는, ROS, Gazebo 모두 소스코드로부터 컴파일 해야하나 맥에 대한 지원이 항상 뒤쳐지고 있어 만약 최신 버전의 OS (보통 모두 최신버전을 사용한다)를 사용하고 있다면 설치가 매우 복잡해진다. 따라서, Docker를 이용해 ARM64 아키텍쳐의 Ubuntu를 구동시킨 후 이 Ubuntu 위에 소스코드로부터 컴파일 할 필요가 있다. (동일한 아키텍쳐로 구동한다면 Mac에서 Ubuntu를 구동하더라도 성능손실이 미미하다. Docker에 대한 설명과 기초학습은 Docker 학습에 있다.) Docker의 경우 컴파일을 수행한 시스템 환경을 저장해 Docker Hub를 통해 공유할 수 있어 직접 컴파일 하지 않아도 된다.

Docker 설치

# Rosetta 업데이트 (Docker공식 설치매뉴얼에서 업데이트 하는게 안전하다고 함)
softwareupdate --install-rosetta
# Docker 다운로드 & 설치
# 만약 curl 로 다운로드가 안되면 https://docs.docker.com/desktop/install/mac-install/ 에서 다운로드
cd ~/Downloads
curl https://desktop.docker.com/mac/main/arm64/Docker.dmg\?utm_source\=docker\&utm_medium\=webreferral\&utm_campaign\=docs-driven-download-mac-arm64 -o Docker.dmg 
sudo hdiutil attach Docker.dmg
sudo /Volumes/Docker/Docker.app/Contents/MacOS/install --accept-license
sudo hdiutil detach /Volumes/Docker

어플리케이션에서 Docker를 한번 실행한다. (이때, Docker 백그라운드 서비스 실행을 위해 비밀번호를 한번 요구한다)

ROS-Gazebo가 설치된 Docker이미지 실행

아래 명령어로 ROS와 Gazebo가 이미 설치된 이미지를 구동시킬 수 있다. 이때 명령어를 실행하는 폴더를 마운트하므로 명령어를 실행시키는 위치에 주의해야 한다.

docker run --rm -it -v ~/.Xauthority:/root/.Xauthority \
-e DISPLAY=docker.for.mac.host.internal:0 \
--volume $PWD:/home/user/workdir -w /home/user/workdir \
woensugchoi/ros-gazebo:apple_arm64

X86_64 Ubuntu Podman 구동

필요에 따라 X86_64 아키텍쳐 기반의 구동이 필수적일 수 있다. 대부분의 소스코드들이 공개되어 있으므로 소스코드부터 컴파일 하면 되지만, 무엇인가 문제가 생겼을 때 아키텍쳐가 다르면 디버깅이 매우 어려워질 수 있다. 그러므로 X86_64 아키텍쳐를 구동하기 위해 Podman을 이용한 에뮬레이팅을 수행하면 성능에 손해는 보나 개발에 유리할 수 있다. Docker자체에서도 애플의 에뮬레이터인 Rosetta2 엔진 이용한 에뮬레이션을 지원한다. Podman이 사용하는 QEMU 엔진과의 성능의 비교는 추가적인 연구가 필요하다.

# 먼저 DISPLAY 브릿지 실행
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

# --- 새로운 터미널에서
# 모든 그래픽 브릿징 허용
xhost +
# XQuartz에 3D 소프트웨어가속 허용
defaults read org.xquartz.X11 enable_iglx
# 터미널에서 ROS Gazebo가 설치된 이미지 실행
podman run --interactive --rm --device /dev/snd --device /dev/input --device /dev/dri --tty --volume /tmp/.X11-unix:/tmp/.X11-unix:ro --security-opt label=type:container_runtime_t --volume /etc/localtime:/etc/localtime:ro -e DISPLAY=$(hostname):0 --privileged \
--volume $PWD:/home/user/workdir -w /home/user/workdir \
woensugchoi/ros-gazebo:apple_x86_64

질문 & 오류

  • wsl set 2 명령어가 오류가 나와요. 보통 Windows 에 가상화(혹은 Hyper-V)기능이 활성화 되어 있지 않아서 오류가 발생하기도 헀다. 제목을 눌러 링크에 들어가 해결방법을 천천히 따라해보자.

results matching ""

    No results matching ""