Knowhow/ROS2

[ROS2 Foxy Tutorial 한글 번역] 1. Configuring environment

침닦는수건 2023. 1. 31. 15:24
반응형

Introduction

ROS가 뭔지도 모르는 상태에서 ROS를 사용해야 할 일이 생겨 튜토리얼부터 보기 시작했다. 직접 구현하면서 우당탕탕 익히는 것이 더 빠른 길이지만 튜토리얼 정도는 꼼꼼히 이해한 뒤에 시작하는 것이 맞는 것 같아 1회 읽어보고 이를 한글로 번역해보면서 2회 읽어보는 방식으로 공부해보고자 한다. 그냥 옮겨적는 것이다보니 시간 소모도 그리 크지 않을 것 같다!

 

Link

https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html

 

Configuring environment — ROS 2 Documentation: Foxy documentation

Sourcing ROS 2 setup files will set several environment variables necessary for operating ROS 2. If you ever have problems finding or using your ROS 2 packages, make sure that your environment is properly setup using the following command: Check that varia

docs.ros.org

 

Background

ROS2는 shell 환경을 이용하여 여러개의 작업 공간(workspace)을 연결하는 개념으로 구성되어 있다. Workspace란 ROS 용어 중 하나인데 ROS2로 개발이 이루어지는 유저의 시스템 상 위치를 뜻한다. (폴더 같은 것이다.) ROS2에서 core workspace는 underlay라고 불리며, 후속으로 그 위에 연결되는 workspace는 overlay라고 불린다. ROS2로 개발할 때, 여러 개의 workspace를 동시에 다루게 될 것이다. 

 

여러 개의 workspace를 연결지어 개발하는 컨셉은 다른 버전의 ROS2와의 연동이나 다른 패키지들과의 연동을 쉽게 만드는 장점이 있다. 이러한 컨셉 덕분에 같은 컴퓨터 위에 여러개의 ROS2 distribution(혹은 distros, 예를 들어 Dashing이나 Eloquent)을 설치하여 사용할 수도 있고 distribution 간 스위칭도 쉽다.

 

ROS2 환경은 setup file들을 shell을 열 때마다 sourcing해주거나 shell 실행 시 마다 자동으로 sourcing 하도록 source 커맨드를 추가하기만 하면 이용 가능하다. setup file들을 sourcing하지 않을 경우, ROS2 커맨드를 사용할 수 없고 ROS2 패키지를 찾거나 사용하는 일도 불가능하다. 즉, ROS2를 사용할 수 없다. (setup file sourcing 잊지 말라는 뜻)

 

Prerequisites

튜토리얼은 시작하기 전에 ROS2 installation page의 가이드 라인을 따라 ROS2를 설치해라. (본 글에서는 ROS2 Foxy를 사용할 것이다.) 

 

이 튜토리얼에서 사용되는 커맨드들은 binary packages installation guide를 따라 설치했을 경우를 가정한다. (source로부터 직접 빌드하는 방법 말고 설치 페이지에서 권장한다는 방법으로 설치한 경우를 말하는 것이다. 우분투의 경우 Debian pacakges로 깔았으면 문제없다. source로부터 직접 빌드한 경우에도 튜토리얼을 따라갈 수 있긴 한데 setpu file의 경로가 조금 다를 것이다. "sudo apt install ros-<distro>-<package>" 같이 초보자 때 자주 사용하게 되는 설치 명령어도 사용할 수 없다. (그냥 추천 방식으로 설치하란 뜻이다.)

 

Tasks

1. source the setup files

ROS2 커맨드에 접근해서 사용하기 위해선 shell(이하 터미널)을 열 때마다 아래 커맨드를 입력해야 한다. 

# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
source /opt/ros/foxy/setup.bash

위 커맨드가 항상 통하는 것은 아닌데 만약 ROS2 설치를 권장하는 방식이 아닌 다른 방식으로 하면서 경로가 바뀌었을 때는 해당 경로로 수정해서 source를 해주면 된다. 

 

2. Add sourcing to your shell startup script

만약 터미널을 열 때마다 source 커맨드를 입력하는 것을 원하지 않을 경우, shell startup script 자체에 커맨드를 저장해두면 된다. (이렇게 하는 것이 훨씬 편하긴 하다.)

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc

만약 되돌리고 싶을 경우, shell startup script (bashrc)를 켜서 위 커맨드가 입력되어 있는 부분을 지워주면 된다. 

 

3. Check environment variables

ROS2 setpu file을 sourcing하는 작업은 ROS2 사용에 필요한 환경 변수들을 자동으로 세팅한다. 그럼에도 불구하고 ROS2 커맨드가 먹통이거나 패키지를 찾고 사용하는 과정에서 오류가 발생한다면 환경이 잘 세팅되어 있는지 확인하는 것이 좋다. 

printenv | grep -i ROS

위 커맨드를 입력하면 ROS 설치 정보가 쭉 나오는데 그 중 "ROS_DISTRO"와 "ROS_VERSION"을 확인해라. 예를 들어 지금 글에서 다루는 Foxy일 경우 다음과 같은 결과가 나올 것이다. 

ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=foxy

환경 변수들이 제대로 세팅되어 있지 않다면 ROS2 패키지 설치로 다시 돌아가서 재설치를 해라. 만약 그래도 해결이 되지 않는다면 커뮤니티의 도움을 받는 것이 좋다.

 

3.1 The "ROS_DOMAIN_ID" variable (Optional)

domain ID에 대한 세부사항이 필요하면 domain ID document를 읽고 오는 것을 추천한다. 

만약 ROS2 agents 그룹에 유일한 ID를 부여하고 싶을 경우 환경 변수에 "ROS_DOMAIN_ID"를 추가할 수 있다. 

export ROS_DOMAIN_ID=<your_domain_id>
echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc

 

3.2 The "ROS_LOCALHOST_ONLY" variable

기본적으로 ROS2 통신은 localhost에만 국한되지 않는다. "ROS_LOCALHOST_ONLY" 환경 변수는 ROS2 통신을 localhost에만 한정하는 변수로 이를 설정할 경우, 각종 topic, service, action이 local network 외부 컴퓨터에서는 보이지 않는다. 이 "ROS_LOCALHOST_ONLY" 환경 변수는 예를 들어 학교에서 실습할 때와 같이 다수의 로봇이 같은 topic을 publish하는 상황과 같이 오류가 나기 쉬운 환경에 유용하다. (평소엔 잘 안 쓴다는 소리)

export ROS_LOCALHOST_ONLY=1
echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc

 

Summary

ROS2 개발 환경은 정확하게 사전 준비가 되어야 한다. 이는 setup file을 소싱하는 것으로 할 수 있는데 매 터미널마다 직접 입력해주거나 sourcing startup script에 저장해두는 것을 잊지 말아야 한다. 

 

만약 ROS2를 설치하고 사용할 때 문제를 겪는다면 첫번째로 확인해야할 것은 환경 변수들이며 정확한 버전과 distribution이 설치되어 있는지도 확인해야 한다.

반응형