본 포스팅은 “ROS 로봇 프로그래밍” - (루비페이퍼, 표윤석.조한철.정려운.임태훈 지음)과 http://wiki.ros.org/ROS을 바탕으로 공부한 내용을 정리한 것입니다.
- ROS
- 파티션 분리 후 ubuntu linux 설치
- ROS 설치
- NTP (Network Time Protocol) 설정
- Installation
- Environment setup
- Dependencies for building packages
- Initialize rosdep
- 확인
1. ROS
로보틱스 분야의 플랫폼은 크게 소프트웨어 플랫폼과 하드웨어 플랫폼으로 나뉜다.
로봇 소프트웨어 플랫폼은 로봇 응용프로그램을 개발할 때 필요한 하드웨어 추상화, 기능 구현 등을 포함한다.
그 중 대표적으로 ROS (Robot Operating System), 일본의 OpenRTM, 유럽의 OROCOS, 한국의 OPRoS 등이 있다.
ROS는 가장 많이 사용되고 있는 로봇 소프트웨어 플랫폼이다.
ROS의 5가지 특징
- 프로그램 재사용성
- 통신 기반 프로그램
- 개발 도구 지원
- 활성화된 커뮤니티
- 생태계 조성
ROS는 운영체제와 비슷한 역할인 하드웨어 추상화를 포함하며, 전통적인 운영체제가 아니기에 이기종 하드웨어에서 사용할 수 있는 특징이 있다.
ROS는 Robot Operating System, Meta-Operation System으로
애플리케이션과 분산 컴퓨팅 자원 간의 가상화 레이어로 분산 컴퓨팅 자원을 활용하여
스케줄링 및 로드, 감시, 에러 처리 등을 실행하는 시스템이다.
미들웨어 (Middleware) 또는 소프트웨어 프레임워크 (Software framework)으로 볼 수 있다.
ROS의 목적은 “로보틱스 소프트웨어 개발을 전 세계 레벨에서 공동 작업이 가능하도록 하는 환경을 구축하는 것!”
ROS의 5가지 특징
- 분산 프로세스
- 패키지 단위 관리
- 공개 리포지토리
- API 형태
- 복수의 프로그래밍 언어 지원
ROS의 구성요소는 클라이언트 라이브러리, 하드웨어 인터페이스, 커뮤니케이션, 로보틱스 애플리케이션 프레임워크, 로보틱스 애플리케이션, 시뮬레이션, 소프트웨어 개발 툴 등.
ROS 서포트 기간은 기본적으로 2년에 한 번씩 릴리즈 되는 ubuntu LTS(Long Term Support) 버전에 맞추어 나오는 ROS 버전들은 LTS 서비스가 종료되는 시점인 5년간 지원한다.
2. 파티션 분리 후 ubuntu linux 설치
[jimnong 블로그] 파티션 분리 후 우분투 리눅스 듀얼부팅 설치방법에 설명이 자세히 잘 되어있다.
이를 참고하여 설치해보자.
우분투 한글 설정방법 https://webnautes.tistory.com/1199
ros noetic (최신버젼) 설치 https://pinkwink.kr/1319
본인은 20.04.2.0 LTS 버전으로 설치하였다. Ubunutu 20.04.2.0 LTS
3. ROS 설치
본인은 ros noetic으로 설치하였다.
공식 ros noetic 설치 문서와
“ROS 로봇 프로그래밍” - (루비페이퍼, 표윤석.조한철.정려운.임태훈 지음)를 따라가며 설치해보자.
NTP (Network Time Protocol) 설정
서로 다른 pc 간 통신을 위함. (개인 pc - Turtlebot 등)
1
2
$ sudo apt-get install -y chrony ntpdate
$ sudo ntpdate -q ntp.ubuntu.com
Installation
setup sources.list
1
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
set up keys ROS 저장소로부터 패키지 설치 위한 공개키 추가.
ROS 버전마다 상이함. http://wiki.ros.org 참고
noetic 버전은 다음과 같다. sudo apt-key adv --keyserver 'hktp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
noetic 버전은 다음과 같다.
1
2
$ sudo apt install curl # if you haven't already installed curl
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
installation ROS 설치 이전 모든 ubuntu 패키지 업데이트
1
$ sudo apt-get update && sudo apt-get upgrade -y
이후 셋 중 하나를 설치하자. 본인은 desktop-full 버전으로 설치하였다.
Desktop-Full install (recommended)
1
$ sudo apt install ros-noetic-desktop-full
Desktop install
1
$ sudo apt install ros-noetic-desktop
ROS-Base (Bare Bones), no GUI tools
1
$ sudo apt install ros-noetic-ros-base
추후에 추가 패키지를 설치할 때는
sudo apt install ros-noetic-PCKAGE
의 형태로 패키지를 직접 설치. 사용 가능한 패키지 검색은apt search ros-noetic
Dependencies for building packages
- rosinstall은 ros 관련 패키지 인스톨 프로그램
1
$ sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
Initialize rosdep
- rosdep은 ros의 핵심 컴포넌트, 컴파일 시 의존성 패키지 설치에 도움을 주는 편의 기능.
1 2 3
$ sudo apt install python3-rosdep $ sudo rosdep init $ rosdep update
Environment setup
- 환경설정 파일 불러오기, 작업 폴더 생성 및 초기화
1
2
3
4
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ source /opt/ros/noetic/setup.bash # noetic 부분에 ros 버전에 맞게 기입
$ catkin_init_workspace
- bashrc 수정
~/. bashrc
에 추가할 내용
1
2
3
4
5
6
7
8
9
10
11
12
# Set ROS Noetic
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash
# Set Ros Network
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
# Set ROS alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
Network 설정시 마스터 PC 따로 존재, 로봇은 호스트 PC 사용할경우에 다음을 구분하여 입력할경우 서로 통신 가능.
Network 설정시 ifconfig 등을 이용하여 본인 ip 입력
1 2 3 # Set ROS Network export ROS_HOSTNAME=localhost export ROS_MASTER_URI=http://{ROS_HOSTNAME}:11311bashrc의 ros network 설정 시, 다른 기기와의 통신을 위해서는 ip를 구분해서 작성. 하나의 pc에서만 패키지 구동하는 경우에는 위의 설정으로 가능. 본인 ip 확인 위해서는 ip addr, ifconfig 활용 가능 참고 블로그
ifconfig
sudo apt-get install net-tools
ip addr
ip addr
여기 뭔가 잘안된다. 나중에 다시 확인.
4. 확인
catkin은 ros 전용 빌드 시스템. test 해보자면
1
2
$ cd ~/catkin_ws/ # catkin_ws로 폴더이동, bashrc 설정을 따라왔으면 cw로 가능
$ catkin_make # catkin make 명령어, bashrc 설정을 따라왔으면 cm으로 가능
빌드가 성공하면 ls
명령어로 build와 devel 폴더가 생성되는 것을 확인 (catkin make 성공)
1
$ roscore #ros 실행 명령어, 종료는 ctrl+c
5. 추가 내용
ros 구동은 기본적으로 터미널 창에서 이루어진다. 따라서 여러개의 터미널 창의 사용은 필수적.
이에 나는 다중 터미널 창을 추천한다. 내가 사용하는 것은 terminator
1
$ sudo apt-get install terminator
Terminator 주요 단축키
단축키 설명 | 사용법 |
---|---|
터미네이터 실행 | ctrl + alt + t |
터미네이터 종료 | ctrl + shift + q |
수평 분할 | ctrl + shift + o |
수직 분할 | ctrl + shift + e |
분할 창 이동 | ctrl + shift + p |
분할 창 이동 (반대 방향) | ctrl + shift + m |
분할 창 종료 | ctrl + shift + w |
분할 창 확대 | ctrl + shift + x |
ROS 동작 테스트
roscore 실행
ros 실행 명령어
1
$ roscore
turtlesim 패키지의 turtlesim_node
예제 turtlesim 실행
1
$ rosrun turtlesim turtlesim_node
turtlesim 패키지의 turtle_teleop_key 실행
키보드로 조종할 수 있는 node
1
$ rosrun turtlesim turtle_teleop_key
rqt_graph 패키지의 rgq_graph 실행
topic과 node 간 message 송수신을 확인하는 rqt_graph 실행
1
$ rqt_graph
참고
ros 공식 wiki
“ROS 로봇 프로그래밍” - (루비페이퍼, 표윤석.조한철.정려운.임태훈 지음)