본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2023 ROS 스터디] 조영상 #1주차 - ROS설치

반응형

*강의 출처 : 로보티즈(표윤석님)

스터디 내용 중 혹시 틀리거나 잘못된 부분이 있을 때 정말 가감 없이 지적해주시면 부족한 제가 성장하는데 큰 도움이 될 것 같습니다. 감사합니다!

강의를 통해 굉장히 많은 이야기들을 들었지만 주된 핵심내용은 사실 얼마 되지 않았다.

우선 Chapter 1의 내용을 요약해 보자.

Chapter 1


해당 Chapter의 내용을 한 문장으로 요약하자면 '앞으로 우리가 해야 할 (개인용) 로봇 개발의 방향성'이라고 할 수 있다.

미래에 대중화될 로봇을 개발하기 위한 참고서로 '개인용 컴퓨터(PC)'와 '개인용 휴대전화(PP)'를 예시로 들었다.

PC와 PP가 개발된 과정처럼, 로봇 개발 역시 현재 같은 길을 걷고 있고, 앞으로도 PC와 PP의 발자취를 따라갈 것이다.라는 것이다.

강의에서는 '역사는 반복된다'라고 했는데 적절한 비유인 듯하다.

그렇다면 여기서 말하는 대중화 제품인 PC와 PP의 발자취는 무엇일까?

바로 부품들이 독자적으로 개발되는 것이 아닌 모듈의 형태로 각각 개별적으로 개발되고 이들을 조합하여 최고의 상품을 완성시키는 개발 방식이다.

여기서 말하는 부품이라고 하는 것은 하드웨어뿐만 아니라 소프트웨어의 개념도 관통하게 된다.

하드웨어 모듈 + 운영체제 + 앱(서비스) + 유저

와 같은 식으로 분업화할 수 있다.

결론적으로 이러한 분업의 방식을 로봇개발에 그대로 대입할 수 있을 것이고 우리는 로봇 운영체제에 해당하는 ROS에 대해서 배울 것이다. (엄밀히 보자면 ROS는 미들웨어이다.)

Chapter 2


Chapter 1 마지막 부분에서 우리가 배울 ROS는 엄밀히 말해 우리가 흔히 알고 있는 Windows, Linux, Mac OS와 같은 운영체제가 아니라 미들웨어라고 했다.

이번 Chapter에서는 우리가 익숙하게 알고 있는 PC, PP와 조금 다른 점이기 때문에 미들웨어라고 불리는 메타 운영체제에 대해 좀 더 자세히 알아볼 필요가 있다.

로봇 개발에서 메타 운영체제가 쓰이는 이유는 스마트폰이나 PC처럼 범용적인 기능을 갖고 있는 것이 아니라 필요에 따라 기능과 용도가 매우 다양하기 때문이다.

ROS의 특징


1. 오픈소스 기반

로봇운영체제는 여러 국가와 회사에서 많이 개발되었지만(NAO qi, opros 등등..) 그들 중 하나인 ROS는 오픈소스기반이다.

2. 이기종 디바이스 간의 통신 지원

예를 들어 우분투 기반으로 만들어진 로봇과 안드로이드 기반으로 만들어진 로봇이 각각 ROS로 개발되었다면 이들 간의 통신이 자유롭게 이루어질 수 있다는 것이다.

3. Unbuntu, Linux, Windows, Mac OS 등의 운영체제 위의 Layer에서 동작한다.

다만 ROS1.0 ver의 경우, Windows, Fedora, Android와 같은 운영체제 위에서는 '부분적으로' 작동된다.(제한사항이 있다.)

4. 여러 가지 프로그래밍 언어 및 기능 제공

로봇 개발에 필요한 여러 라이브러리를 비롯하여 시뮬레이션(Gazebo), 시각화 툴(Rviz) 등을 제공한다.

예를 들어 로봇개발에 필요한 것들은 다음과 같다.

URDF : 로봇의 물리적인 특성을 xml형태의 파일로 저장한다.
로봇 기하학 라이브러리 : 관절로봇에 대한 상대좌표 변환 제공(TF)
이외에도 센싱/인식, 내비게이션, 매니퓰레이션 관련 라이브러리들을 제공한다.


5. 통신 인프라

노드 간의 데이터 통신을 제공한다. (메시지 전달 인터페이스, 메시지 파싱 기능)

6. 분산 매개변수 시스템

시스템에서 사용되는 변수를 글로벌 키값으로 작성하여 고유 및 수정하여 실시간으로 반영할 수 있다.

앞으로 ROS를 실제로 활용하면서 위에서 간단하게 언급했던 특징들을 직접 경험하게 될 것이기 때문에 우선 용어들에 익숙해져야겠다.

ROS 버전 선택

2010년도부터 알파벳 순서로 네이밍 되어서 새로운 버전들이 출시되고 있는데

Ububtu와 그 위에 설치하게 될 ROS는 5년 지원이 약속된 LTS 버전을 설치하는 것이 좋다.

우리는 Ubuntu 18.04와 ROS melodic을 사용할 것이다.

Chapter 3

ROS 개발환경 구축

1줄 설치도 가능하지만 ros.org 사이트에 들어가서 각각의 라인의 운영체제에 알맞은 설치법이 있다.

일단 우분투를 설치하고 업데이트, 설정하는 것부터 시작해서 우분투 위에 설치하게 되는 모든 것들이 각각 한번에 쉽게 설치 되는 경우가 별로 없었는데 실수할법한 사항들이나 해결했던 방법들을 간단하게 적어보았습니다.

(프로젝트를 하면서 우리 프로젝트 내에서 자주 발생되는 에러들을 따로 정리해두는 것도 나쁘지 않을 것 같다는 생각을 아주 잠깐 해보았었습니다...)

1. sudo apt update 명령과 sudo apt upgrade

명령어를 해석해 보자.

sudo : Superuser do - 관리자 권한으로 명령한다.(때문에 우분투 계정의 비번을 요구함(보안이나 실수 방지))

apt라는 것은 패키지 관리자이다.(배포판마다 서로 다른 패키지 관리자를 사용하는데 Ubuntu의 경우에는 apt이다.)
*Mac OS에도 community-driven 패키지 관리자 Homebrew 존재

sudo apt update : 패키지 저장소 인덱스 갱신
sudo apt upgrade : 패키지 일괄 업그레이드

2. 우분투 재부팅

이 방법이 왜 통하는지는 모르겠지만 우분투의 경우에는 터미널을 껐다 켜거나 우분투 자체를 reboot(터미널에 이렇게 명령하면 간지 나게 재부팅된다.) 시켰을 때 문제가 해결되는 경우가 더러 있었다.

터미널을 껐다가 켜는 경우는 source ~/.bashrc 같은 명령어를 사용하는 대신에 시행하기도 한다.(참고로 bashrc는 배쉬 알씨라고 발음한다.)

하지만 껐다가 켜도 안 되는 경우가 굉장히 많은 우분투는 나의 구글링 실력과 인내심을 길러주는 좋은 운영체제라고 생각한다.


3. ros.org 홈페이지에서 명령어들을 긁어올 때 한 줄씩 긁어와야 한다.

처음에 하기 쉬운 실수가 상자 안에 있는 명령어를 하나의 명령으로 보고 통째로 복사 붙여 넣기 하는 경우가 있는데, 이게 처음에 리눅스 명령어를 잘 모르면 헷갈릴 수 있는 부분이다.

예를 들어 다음의 상자는 두줄이지만 통째로 긁어오는 것이 맞지만


다음의 상자는 한 줄씩 복붙 해야 한다.


이외에도 아주 예측할 수 없는 수많은 오류들이 기다리고 있을 것 같다. 한번은 리눅스 시간과 컴퓨터 하드웨어의 시간이 동기가 되지 않는 오류를 만난적이 있었다. 구글링에서 나온 방법이 안통해서 컴퓨터를 껏다가 10분뒤에 켜니까 안돼서 다음날 켜니까 됐던 기이한 현상이 있었다.

표윤석 님의 강의에서 설명한 대로 ROS를 설치하고 이를 확인하기 위해 roscore 명령을 실행해 보았다.

리눅스에 명령어를 치는 일은 별거 아니지만 항상 간지 나는 것 같다.(해커처럼 영어들이 쫙 스크롤된다...)

다 이해하지는 못하지만 눈에 익는 단어 'SUMMARY'라고 쓰여있는 부분이 눈에 들어온다.

아마 저 잡다한 내용들을 한마디로 요약한 부분이라고 생각된다. melodic버전이 잘 설치된듯하다.
또 해당 노드를 마스터라고 칭하고 주소까지 나와있었다.

이대로 ros를 사용해도 되지만 좀 더 편리하게 ros를 사용하기 위해 환경설정을 해준다.

gedit라는 편집기( 우리가 흔히 알고 있는 vscode 비슷한 것이다.)를 사용하여. bashrc 파일을 연다.

위의 그림에서 첫 줄을 보면 우리가 맨 처음 ros.org에서 ros를 설치할 때 environment 설정에서 적었던 명령어의 일부분이 적혀있는 것을 확인할 수 있는데 setup이라는 단어에서 알 수 있듯이 터미널이 실행될 때마다 세팅되는 명령이라고 생각하면 된다.

그 아래로 나오는 alias라는 명령어는 매번 타이핑하기 귀찮은 명령어를 간략하게 두 글자로 명령할 수 있도록 '단축어'를 만들어주는 기능을 해준다.

그 아래에 보이는 export 부분은 아까 roscore를 실행했었을 때 summary에서 보였던 부분이다.

ros를 대표하는 캐릭터는 로고에서도 확인할 수 있듯이 거북이인데 우리가 프로그래밍 언어를 처음 배울 때 hello world를
출력해 보는 것처럼 ros에서는 거북이를 띄워보는 것으로 배움을 시작한다.

Hello turtle!

이번 예제를 시작으로 앞으로 여러 개의 노드들을 실행해야 하는 경우가 많을 것이기에 이를 간편하게 할 수 있는 터미널 에뮬레이터를 설치하였다. 그건 바로 tilix라는 것이다.

tilix 단축어 설명은 다음의 유튜브 링크의 더보기란에서 확인할 수 있다.
https://www.youtube.com/watch?v=oaZMfAsaX4o

tilix

원래 터미널을 실행시키는 단축키를 tilix실행 단축키로 변환했다.

또한 tilix에서 새로운 터미널을 실행시킬 때 사용하는 명령어 중 Ctrl + Alt + D (아래면에 새로운 터미널 생성)라는 것이 있는데 이 명령이 기존 우분투에서 '모든 창 숨기기' 단축키와 같기 때문에 이 단축키도 변경해 주었다.


tilix의 단축키는 기본적으로 Ctrl + Alt + '알파벳'을 기본 포맷으로 하는데 맨뒤에 들어가는 알파벳은

영단어의 첫 글자라고 생각하면 외우기 쉽다.

예를 들어 Ctrl + Alt + R에서의 R은 Right 즉, 오른쪽에 터미널 생성이고
Ctrl + Alt + D에서의 D은 Down 즉, 아래쪽에 터미널 생성이다.

이제 다른 노드를 실행시켜서 거북이를 띄워보자.

노드 하나를 실행시키는 것은 rosrun이라는 명령어로 하고 그다음에는 패키지, 그다음에 노드이름을 적는다.

근데 ROS강의들을 보면 실력 있는 개발자처럼 명령어들을 굉장히 빠르게 친다. 처음에 이거 다 외우고 있는 줄 알았는데 꼭 그런 것만은 아니었다. (물론 익숙해지면서 외워지는 것도 있을 것이다.)

tab기능을 활용한 것인데 명령어(패키지 이름, 파일 경로 등등)의 단어 일부를 타이핑하고 tab을 한번 누르면 자동완성 된다.

그런데 애초에 어떤 하위 명령어가 있는지 모를 땐 tab을 두 번 누르면 관련 하위 명령들에 대한 목록을 보여준다.



워낙 터틀 어쩌고 하는 비슷한 단어들이 많아서 헷갈릴 때 탭을 두 번 쳐서 텔레오프 키를 실행한다.(사실 텔레오프키도 하이픈, 언더바 같은 거 어디에 끼워야 하는지 외우고 다닐 수가 없다.)

명령어에서 확인할 수 있듯이 teleop key 터미널을 한번 클릭하고 키보드를 움직이면 거북이가 발자취를 남기면서 이동한다.

손기술로 다각형을 만들어보고자 했지만 똥손이라 실패했다.

파이썬에서 거북이를 코드로 움직였던 예제가 있었던 것 같다. 이처럼 ROS의 거북이도 내가 원하는 경로를 움직일 수 있도록 코딩시킬 수 있을 듯하다.


추가적으로 노드 간의 관계를 직관적으로 알 수 있는 rqt_graph도 실행시켜 보았다.


거북이를 띄우는 것에 성공했고 강의에서는 cm명령을 해보라고 해서 해봤다. 초반에 설명했듯이 cm은 alias 단축어 설정 명령으로 bashrc파일에서는 '캐킨워크스페이스로 가서 캐킨메이크 하는 것'으로 설정했었다.

소스파일이 없어서 그런지 1초도 안 돼서 바로 완료됐다.

ROS는 이제 시작했지만 아직 부족한 것이 너무 많고 앞으로 스스로 공부도 하고 동아리 선배님들께도 많이 배워야 할 것 같다.

참고 사이트 소개

유튜브 강의로 들었던 표윤석 님이 운영하는 ROS관련 네이버 카페가 있는데 많이 유용할 것이라고 생각된다.

오로카 카페 :
https://cafe.naver.com/openrt

오픈소스 소프트웨어 & 하드웨어: 로... : 네이버 카페

오픈소스 소프트웨어/하드웨어로 만드는 로봇 기술 공유 카페 (ROS,ARM,AVR,mbed,라즈베리파이,아두이노)

cafe.naver.com


고려대학교에서도 ROS관련 동아리가 있다.

https://kasimov.korea.ac.kr/dokuwiki/doku.php/kasimov/intro

KAsimov 2022 Roadmap - KAsimov Wiki

KAsimov는 Korea University의 K와 로봇 3원칙으로 유명한 Issac Asimov의 합성어로, 문학자와 같이 로봇을 꿈꾸고 공학자와 같이 개발하며 사람으로서의 윤리를 생각하는 고려대학교 기계공학부 소모임

kasimov.korea.ac.kr


개인 블로그에는 약간 장황하게 강의내용을 필기한 내용이 있습니다.

조영상 개인 블로그 : https://jomedia.tistory.com/

반응형