ROS2 프로젝트용 devcontainer

11944 단어

요약



이 기사에서는 ROS2 프로젝트를 위한 로컬 개발 환경을 만드는 방법을 공유하고자 합니다. ROS2 프레임워크와 같은 최근의 코드 개발은 매우 복잡해지고 OSS 패키지에 크게 의존하게 되었습니다. VS Code devcontainer를 사용하면 로컬 개발 환경을 훨씬 쉽게 만들 수 있습니다.

목차


  • Overview
  • devcontainer.json
  • Dockerfile

  • Directory structure
  • How to run the docker container development environment
  • Where is the project directory?
  • Experiment 1
  • Experiment 2
  • Experiment 3


  • 개요

    devcontainer is one of Visual Studio Code Remote Development features that helps create local develop environment. Personally I love Windows OS and Visual Studio when developing .NET C# applications, but when in development with some other languages like Python, Typescript etc., VS Code devcontainer is really powerful. Here is my personal opinion of whe it is so useful.

  • Independent of your machine's operating system: According to statistica.com, Windows has around 75 percent of the global market share of operating system in 2022. Combined with WSL(Windows Subsystem for Linux) technology, VS Code devcontainer enables you to run Linux development environment in your Windows machine.

  • Package verion combinations: In general, you want to divide development environments depending on projects. For example, you can use pyenv , virtualenv , conda or whatever virtual environment you prefer for Python. However, when you want to combine the Python environment with other framework, for example ROS2, it is going to be more complex. VS Code devcontainer solves this problem by creating a just in time docker container for each development environment.

  • No need to install all dependencies from scratch: To create your just in time development environment, you do not need to install all dependencies from scratch. You can utilize publicly available images from the well-known container registry. For example, I am using ros:foxy-ros-base-focal image for my ROS2 developenvironment - Dockerfile
  • 디버거: Visual Studio Code는 다양한 언어에 대한 디버거를 지원합니다. 이 예제의 경우 - devcontainer.json 로컬 시스템에서 Python 디버거를 실행할 수 있는 ms-python VS Code 확장을 사용합니다.
  • VS Code 지원 및 확장: VS Code에는 지원 기능이 내장되어 있으며 다양한 언어에 대한 많은 확장이 있습니다. devcontainer의 도커 컨테이너 개발 환경에서도 이러한 지원을 사용할 수 있습니다.

  • .devcontainer/devcontainer.json

    The sample devcontainer.json은 아래와 같습니다.

  • dockerfile: Dockerfile 디렉터리 아래 devcontainer.json와 같은 폴더에 있는 .devcontainer를 가리킵니다.

  • workspaceFolder: .devcontainer 디렉토리가 존재하는 도커 컨테이너의 디렉토리입니다.

  • 확장: docker 포함 개발 환경에서 사용하려는 VS Code 확장입니다.

  • {
      "name": "ROS devcontainer",
      "dockerFile": "Dockerfile",
      "workspaceFolder": "/workspaces/EdgeIntegrationTest/src/apps/FileGenerator",
      "settings": {},
      "extensions": [
            "ms-python.python"
        ]
    }
    


    .devcontainer/Dockerfile

    The sample Dockerfile 아래의 .devcontainer 디렉토리는 아래와 같습니다.
  • FROM ros:foxy-ros-base-focal : 이 샘플에서는 해당 ros 이미지를 기본 이미지로 사용합니다. ros:foxy-ros-core-focal 을 기반으로 하며 ubuntu:focal 을 기반으로 하며 ubuntu:20.04 와 동일합니다.
  • COPY requirements.txt ./ : requirements.txt/app에 복사하여 docker 컨테이너가 실행pip install하여 필요한 Python 종속성을 설정할 수 있도록 합니다.
  • RUN echo 'source /opt/ros/foxy/setup.bash' >> /root/.bashrc: ROS2 문서Configuring environment에 따르면 ROS2 명령에 액세스하도록 도커 컨테이너를 설정하려면 도커 컨테이너에서 설정 파일을 가져와야 합니다/opt/ros/foxy/setup.bash. 매번 소스 명령을 실행하지 않도록 쉘 시작 스크립트에 소스 명령을 추가합니다.

  • FROM ros:foxy-ros-base-focal
    
    SHELL ["/bin/bash", "-c"]
    
    WORKDIR /app
    
    COPY requirements.txt ./
    RUN apt update && apt install -y \
        python3-pip \
        python3-colcon-common-extensions
    RUN pip install -r requirements.txt
    
    RUN echo 'source /opt/ros/foxy/setup.bash' >> /root/.bashrc
    


    도커 컨테이너에서 setup.bash 파일의 위치

    /opt
    └── ros
        └── foxy
            ├── _local_setup_util.py
            ├── bin
            ├── cmake
            ├── include
            ├── lib
            ├── local_setup.bash
            ├── local_setup.sh
            ├── local_setup.zsh
            ├── opt
            ├── setup.bash
            ├── setup.sh
            ├── setup.zsh
            ├── share
            ├── src
            └── tools
    


    디렉토리 구조

    도커 컨테이너 개발 환경을 실행하는 방법

    The step to open the development environment is like below.

    1. Go to your terminal and change your directory to where .devcontainer folder exists.
    2. Run code . in your terminal, and you will see VS Code is coming up.
    3. Go to Open a Remote Window and select Reopen in Container , and you will see VS Code is reopened with the one running in the docker container.

    프로젝트 디렉토리는 어디에 있습니까?

    In this sample - .devcontainer 도커 컨테이너 VS 코드가 열려 있으면 도커 컨테이너의 디렉터리가 /workspaces/EdgeIntegrationTest/src/apps/FileGenerator 인 것을 볼 수 있습니다. 로컬 컴퓨터 디렉터리의 FileGenerator에서 devcontainer를 열었습니다. 그러나 도커 컨테이너는 로컬 컴퓨터의 EdgeIntegrationTest 디렉토리를 도커 컨테이너의 /workspaces로 복사했습니다.

    EdgeIntegrationTest
    └── src
        └── apps
            └── FileGenerator
                  ├── .devcontainer
                  |   ├── Dockerfile
                  |   ├── devcontainer.json
                  |   └── requirements.txt
                  ├── Dockerfile
                  ├── main.py
                  └── requirements.txt
    


    devcontainer.json에서 "workspaceFolder": "/workspaces/EdgeIntegrationTest/src/apps/FileGenerator"를 명확하게 표현했기 때문입니까? 아니요. workspaceFolder에서 devcontainer.json"workspaceFolder": "/workspaces/FileGenerator"로 변경하면 EdgeIntegrationTest 디렉토리가 도커 컨테이너의 /workspaces 아래에 복사되고 아래 오류가 표시됩니다.



    VS Code 원격 개발 확장 프로그램이 사용자.git가 있는 현재 디렉터리 위에 하나Reopen in Container가 있는 디렉터리를 복사하는 것 같습니다. 나는 아래 세 가지 실험을 시도했다.

    실험 1

    Reopen in Container at FileGenerator in your local machine

    C:.
    └── FileGenerator
        ├── .devcontainer
        |   ├── Dockerfile
        |   ├── devcontainer.json
        |   └── requirements.txt
        ├── Dockerfile
        ├── main.py
        └── requirements.txt
    
    

    Your directory in the docker container

    root@xxxxxxx:/workspaces/FileGenerator# 
    

    실험 2

    Reopen in Container at FileGenerator in your local machine

    C:.
    └── ProjectFolder1
        ├── .git
        └── FileGenerator
            ├── .devcontainer
            |   ├── Dockerfile
            |   ├── devcontainer.json
            |   └── requirements.txt
            ├── Dockerfile
            ├── main.py
            └── requirements.txt
    
    

    Your directory in the docker container

    root@xxxxxxx:/workspaces/ProjectFolder1/FileGenerator# 
    

    실험 3

    Reopen in Container at FileGenerator in your local machine

    C:.
    └── ProjectFolder2
        ├── .git
        └── ProjectFolder1
            ├── .git
            └── FileGenerator
                ├── .devcontainer
                |   ├── Dockerfile
                |   ├── devcontainer.json
                |   └── requirements.txt
                ├── Dockerfile
                ├── main.py
                └── requirements.txt
    
    

    Your directory in the docker container

    root@xxxxxxx:/workspaces/ProjectFolder1/FileGenerator# 
    

    좋은 웹페이지 즐겨찾기