본문 바로가기

IT/ROS

[ROS] 3. ROS Melodic 설치

반응형

☞ 메인보드 : Jetson Nano Developer Kit

운영 체제 : Ubuntu 18.04 - JetPack 4.3

☞ ROS 버전 : Melodic

 

 

 

 

<이전 포스트>

 

2. Jetson Nano 보드에 Ubuntu 18.04 설치 및 환경설정

메인보드 : Jetson Nano Deverloper Kit 이미지 파일 버전 : JetPack 4.3 <이전 포스트> 1. 이미지 삽입, 포맷 그리고 백업 # 이미지 삽입 1) Rufus 다운로드 https://rufus.ie/ 2) Rufus 사용방법 장치 : 컴퓨터..

95mkr.tistory.com

 

 

 

 

 

 


목차

설치하기에 앞서,,,

1. ROS 설치를 위해 저장소 등록과 인증키 다운로드

2. ROS Melodic 설치

3. 의존성 빌드 패키지 다운로드

4. ROS 환경설정

 

 

 


 

 

 

 

★ 설치하기에 앞서,,,

 

☞ 이 글은 리눅스를 처음 보는 사람을 대상으로 작성하였다.

 

글을 올릴 때는 항상 독자를 생각하면서 작성했다. 내게 있어 독자는 로봇 동아리 후배이고 이는 블로그를 만든 동기 이기도 했다. 그러나 안타깝게도 우리 동아리 후배들은 공부를 지지리 하지 않았다. 대신 삽질해서 정리해놓았는데 결국은 혼자만의 난리 브루스가 되어 버렸다. 이 삽질이 無로 돌아가지 않게 리눅스를 처음 다뤄보는 사람에게 도움이 되었으면 한다. 부디...

 

 

 

☞ ROS(Robot Operating System)를 사용하는 이유?

 

  ◎ 패키지, 라이브러리 등 인터페이스 역할 (징검다리 플랫폼)

 

  ◎ 방대한 자료와 이용자 수 + 커뮤니티

 

  ◎ 오픈 소스

 

 

손이 많이 가는 분야는 참 많으나 로봇 분야는 진입장벽이 높은 분야라고 생각하며 ROS 또한 타 소프트웨어와는 규모가 다르기 때문에 오랜 시간 공부해야 능숙하게 이용할 수 있다고 생각한다. 이런 체계적이고 컨셉 잡힌 시스템을 무료로 사용할 수 있다는 것만으로도 로봇을 공부하는 학생에게는 큰 도움이 된다.

 

 

 

☞ 필요한 물건과 정보

 

준비물 

◎ 젯슨 나노 보드 + 32GB 이상 SD카드

[수정 : 16GB -> 32GB : 16GB는 운영체제 용량때문에 다양한 소프트웨어를 설치하기에는 부족했다.]

 

◎ 모니터 + HDMI 케이블

 

 

 

※ 주의사항

◎ 대소문자 구별

 

◎ 기호 무시 X (EX. 점, 띄어쓰기, 슬래시, 백슬래시)

 

 

 

※  기본 명령어

◎ sudo(Super User do) : 관리자 권한 실행

 

◎ cd(Change Directory) : 해당 경로로 이동

 

◎ mkdir(Make Directory) : 현재 경로에 폴더 생성

 

◎ touch : 현재 경로에 파일 생성

 

◎ ls : 현재 경로에 있는 파일을 출력 [ls –l : 리스트 형태로 출력, 세부 정보 확인이 가능]

 

◎ pwd(Print Working Directory) : 현재 경로 출력

 

◎ --help, man : 명령어 도움말 (예시 → cd --help , man cd)

  ♣ 여기에 있는 명령어 중에 가장 많이 사용하는 명령어이다. 처음 보는 명령어가 있거나 그 명령어의 옵션에 어떤 기능이 있는지 알아볼 때 사용하기 바란다. ♣

 

◎ clean : 터미널 창 내용 정리

 

◎ Tab key(키보드) : 자동 완성

  ♣ Tab key는 명령어가 아니라 키보드의 자판을 얘기한다. 리눅스 터미널 창을 이용할 때 자동 완성 기능을 갖고 있다. 멍청하게 전부 입력하지 말고 Tab을 애용하자. ♣

 

 

 

※  편집기

◎ nano (설치 방법 :  터미널 > sudo apt install nano) 

 

◎ vim (탑재)

 

◎ gedit (탑재)

 

♣ 편집기는 파일의 내용을 수정할 때 사용한다. 다양한 확장자를 마주치게 될 것이니 본인에게 가장 편한 편집기를 골라서 사용하자. ♣

 

 

 

※  터미널 실행하는 단축키

 

단축키 : Ctrl + Alt + T

 

 

 

 


① ROS 설치를 위해 저장소 등록과 인증키 다운로드

 

유명한 리눅스 배포판에는 레드햇 계열의 리눅스와 슬렉웨어 계열의 리눅스, 데비안 계열의 리눅스가 있는데, 이렇게 다양한 리눅스 배포판 중에서 Jetson에 탑재할 OS는 데비안 계열의 우분투(Ubuntu)이다.

 

◎ 유닉스는 소프트웨어 개발용 운영체제인데 이 유닉스를 기반으로 한 시스템이 리눅스이다.

 

◎ 커널은 쉘(터미널)로 부터 사용자에게 명령을 입력받아 하드웨어를 제어한다. [쉘은 인간과 컴퓨터 사이의 통역사 역할을 한다.]

 

데비안 계열 리눅스의 장점은 패키지 관리가 쉽다는 점이다. (사실 레드햇 계열의 리눅스도 상당히 친절하다.)  무튼 패키지를 설치할 때 '의존성'의 문제가 많이 발생하는데, 다운로드하려는 링크의 저장소에서 미리 컴파일된 목록을 확인하고 부족한 부분을 함께 다운로드해주는 능동적인 도구가 있다. 

 

◎ 의존성은 햄버거로 생각하면 이해하기 쉽다. 기본적으로 햄버거에 빵, 야채, 고기가 들어간다고 하자. 손님이 점원에게 햄버거를 주문하면 점원은 빵, 야채, 고기로 햄버거를 만들어 손님에게 줘야 한다. 근데 손님이 받은 햄버거에는 야채 없이 빵과 고기뿐이었다. 


햄버거라는 단어를 완성할 수 있는 필수 조건은 빵, 야채, 고기인데 이 중 하나가 빠지면 햄버거라고 할 수 없다.

 


위와 같은 경우에 햄버거는 빵, 야채, 고기에 의존성(dependency)이 있다고 한다.

 

 

우분투에는 패키지 관리 도구로 apt(Advanced Packaging Tool)라는 패키지가 내장되어있고, 대부분의 설치는 apt를 통해 이루어질 것이다.

 

터미널 실행(Ctrl+Alt+T)

 

sudo apt update

 

'~ package can be upgraded'라는 문구가 뜨면,

 

sudo apt upgrade

 

 

 

 

사진처럼 use 'sudo apt autoremove' to remove them이라는 문구가 보이면,

 

sudo apt autoremove

 

유저가 http://packages.ros.org에 접근할 수 있도록 source.list.d에 저장소(Repository)를 추가하자.

 

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu ${lsb_release -sc} main" > /etc/apt/sources.list.d/ros-latest.list'

# Ubuntu 18.04
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu bionic main" > /etc/apt/sources.list.d/ros-latest.list'
# Ubuntu 20.04
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'

 

 

터미널에 입력 비포 애프터

 

 

sh은 쉘 스크립트를 의미한다. sh -c는 sh를 인터프리터(해석기)로 호출하고 다음에 나올 것들을 인터프리터의 프로그램대로 실행한다는 의미이며, echo는 뒤에 나오는 환경변수나 문자열을 출력하는 명령어이다. deb은 데비안 패키지 형식임을 의미한다.

 

${lsb_release -sc}에서 리눅스의 bash에서 $은 일반 유저임을 의미한다.(#은 root 유저)

lsb_release는 리눅스 표준 기반(Linux Standard Base)을 따르고 있는 리눅스 배포판인지 식별하는 도구이고 -sc는 short & code name으로 다른 정보를 뺀 code name 만 출력할 때 씀(모든 정보 표시를 원하면 lsb_release -a)

[만약에 bad substitution이란 치환 오류가 발생하면 ${lsb_release}를 bionic으로 변경해서 타이핑할 것]

 

위 입력이 끝나고 확인으로

 

 

 

 

을 입력하면 결과로 위와 같이 "deb http://packages.ros.org/ros/ubuntu bionic main"이 출력된다. [cat은 파일의 내용을 출력, 병합할 때 쓰는 명령어이다.]

 

아까 ${lsb_release -sc}라고 쓴 부분이 bionic으로 바뀌어서 출력되었음을 확인할 수 있다. [우분투 18.04의 코드네임이 bionic 임을 알 수 있다.]

 

실제로 입력한 저장소 http://packages.ros.org/ros/ubuntu를 검색하면,

 

 

이런 홈페이지를 발견할 수 있다.

위 저장소에서 패키지를 다운로드하려면 인증키가 필요하다.

 

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

 

 

 

 

위와 같은 메시지가 출력되면 제대로 인증키를 얻어온 것이다.

 

 

 

 


② ROS Melodic 설치

 

먼저 업데이트

 

sudo apt update

 

ROS Melodic 버전을 설치할 때는 기본 데스크톱 버전과 풀 버전이 있다. 데스크톱 풀 버전은 Gazebo나 Rviz와 같은 ROS 소프트웨어 도구를 함께 설치해준다.

 

# 기본 버전
sudo apt install ros-melodic-desktop
# 풀 버전
sudo apt install ros-melodic-desktop-full

 

 

제법 오랜 시간이 흐른 후에 설치를 완료하면

 

sudo apt-get install python-pip
sudo pip install -U rosdep
sudo rosdep init

// 우분투에서는 pip 대신 아래의 명령으로 설치할 것을 권장
sudo apt install python-rosdep

// 위에 안되는 경우
sudo apt install python3-rosdep

 

rosdep 초기화(init)를 해줘야 한다.

rosdep은 뒤에 적어준 패키지의 의존성 파일을 찾아서 설치해주는 명령어이다.(위치 : /etc/ros/rosdep/sources.list.d)

[wiki.ros.org/rosdep에서는 권한 문제가 생기므로 sudo와 rosdep update를 함께 실행하지 말라고 했다.]

 

 

 

 

 

위 문구가 나오면 시키는 대로 써서 업데이트하자.

 

rosdep update
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

 

 

환경설정 파일(setup.bash)을 등록하고 이것도 입력 echo는 해당 환경변수나 문자열을 출력하는 명령어이다. 뒤에 나오는 " "의 안에 있는 것은 문자열인데 이를 ~/.bashrc 파일에 적어 넣게 한다.~/.bashrc 파일은 경로가 home에 있어서 '~'이 붙고, 숨김(hidden) 파일이어서 '.'이 붙는다. [즉, 지금 home 경로에 있다면 ~/을 붙이지 않아도 괜찮다는 의미이다.]

 

source는 업데이트(재설정)를 해주는 명령어이다. 위와 같이 입력하면. .bashrc 파일의 환경변수를 업데이트한다.

 

새 터미널을 열 때 로드되는 .bashrc에 업데이트하는 source [bash 파일]을 입력하면 매번 터미널을 열 때마다 입력할 필요가 없다. [터미널이 열릴 때마다 .bashrc의 내용을 확인하고 오기 때문이다.]

 

위 내용이 제대로 입력되었는지 확인하고 싶으면,

 

 

sudo [편집기] ~/.bashrc

 

 

 

 

[나는 nano나 gedit 편집기를 사용했다. 위 사진은 nano이며, 내용을 수정하고 저장하려면 Ctrl+x  +  y(yes) 입력하자]

 

 

 

 


③ 의존성 빌드 패키지 다운로드

 

ros-melodic-desktop 설치했으면

 

sudo apt-get install cmake python-catkin-pkg python-empy python-nose python-setuptools libgtest-dev python-rosinstall build-essential git python-rosinstall-generator python-wstool

 

ros-melodic-desktop-full 설치했으면

 

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool

 

설치 후 새 터미널 창에 순서대로 입력

 

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make

 

mkdir(Make Directory) 디렉터리 생성을 하는데 home(~)에는 catkin_ws 폴더가 없다. 이때 mkdir -p 옵션과 함께 사용하면 중간 디렉터리도 함께 생성해준다. 작업공간 초기화를 위해 catkin_init_workspace를 입력하고, cd(Change Directory) 새로 만든 디렉터리에 이동한 뒤에 catkin_make를 실행하자. (~/catkin_ws 디렉터리에 src 폴더가 없으면 catkin_make 실행 X)

 

catkin_make(cmake + make)는 소스 코드로 만들어진 패키지를 설치할 때 사용하는 명령어인데 예전에는 rosbuild라는 명령어를 사용했다고 한다.

 

[패키지를 설치하는 과정에서 cmake 빌드 스크립트인 CMakeLists.txt에 컴파일 언어, 라이브러리 경로, 빌드 타입을 적어서 cmake 하고

Makefile에 해당 파일과 의존성, 명령어 등을 입력하여 실행 파일을 만드는 configuring - make - make install 과정을 거치는데 catkin_make를 사용하면 이를 쉽게 한 번에 실행하는 것과 같다고 함]

[ros wiki - catkin_make > http://wiki.ros.org/ko/ROS/Tutorials/BuildingPackages]

 

 

catkin_make를 완료하면,

 

 

 

 

완료됐다는 메시지가 출력된다.

 

 

 

 

그리고 catkin_ws 폴더에 src 폴더 이외에 build와 devel 폴더가 생성 build 폴더에는 오브젝트 파일(바이너리 파일)이 있고, devel 폴더에는 빌드 이전의 파일이 있다.

 

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

 

아까처럼 ~/.bashrc 파일에 입력하고 source 명령어로 업데이트 해준다.

 

 

 


④ ROS 환경설정

 

위에서 등록해놓은 setup.bash 파일 이외에도 네트워크와 단축 명령어를 등록할 것

 

sudo [편집기] ~/.bashrc

 

 

 

 

(출처 : ROS 로봇프로그래밍(개정증보판) 72P 저자 : 표윤석 외 3인 )

 

이런식으로 .bashrc 파일 맨 뒤를 채워줄건데, ROS_HOSTNAME = IP address는 ifconfig 명령어로 알 수 있다!

export ROS_HOSTNAME=localhost 로 입력해주면 다음에 다시 ifconfig로 확인할 필요가 없다.

 

 

 

 

랜선(이더넷)을 사용하고 있어서 eth0 칸의 IP 주소를 사용하였다.

 

export는 bash(쉘 프로그램)의 명령어이다. bash 프로그램을 만들 때 쓰는 간단한 옵션을 골라보았다.

 

 

◎ export : 쉘 변수를 환경 변수로 변경

 

◎ alias - unalias : 단축 명령어 설정 과 삭제 

 

◎ declare : 환경 변수 타입 설정

 

◎ set과 unset : 쉘 변수 설정 관리

 

 

 

위 항목 이외에도 다양한 명령어가 존재하는데 아래 링크에서 bash에 대한 자세한 설명이 있으니 참고바란다.

 

 

How to Pass Arguments to a Bash Script

How to write 'while' loops in a bash shell, used when a script has to perform a slightly different function depending on the values of input parameters.

www.lifewire.com

 

 

source ~/.bashrc

 

alias 명령어로 설정한 cw(='cd ~/catkin_ws')를 터미널 창에 입력해보면!

 

 

 

 

디렉토리가 home 에서 ~/catkin_ws으로 이동하는 것을 볼 수 있다. 본인이 자주 사용하거나 명령어가 너무 길어서 줄여 쓰고 싶은게 있다면 .bashrc 파일에 alias 명령어를 이용하여 직접 작성해면 좋겠다.[저는 clear를 c로 바꾸었습니다.^ㅡ^]

 

 

 

 

 

반응형