3장 ROS 구조 및 빌드 시스템

1. ROS 용어

  • 패키지 : ROS 소프트웨어의 기본 단위. 패키지는 노드, 라이브러리, 환경설정 파일들을 통합하는 최소의 빌드 단위이며, 배포 단위이다.

  • 패키지 매니페스트 : 패키지의 작성자, 라이선스, 의존성, 컨피그레이션 플레그 등을 포함하는 패키지 정보

  • 메타 패키지 : 이전에는 스택으로 불리웠지만, 특수한 목적을 위한 패키지 그룹을 지칭한다. 대표적인 예로 네비게이션 스택을 예로 들 수 있다.

  • 메시지 : 한 ROS 프로세서에서 다른 ROS 프로세서로 정보를 전달하는 한 형태

image.png
  • 서비스 : 프로세스간의 요청/응답 상호작용

  • Service, Service Server, Service Client

image.png
  • Node : 최소 단위의 실행 가능한 프로세서를 가리키는 용어로써 하나의 실행 가능한 프로그램으로 생각하면 된다. ROS에서는 최소한의 실행 단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다.

  • Package : 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은것. 또한, 패키지의 묶음을 메타패키지라 하여 따로 분리 한다.

  • Message : 메시지를 통해 노드 간의 데이터를 주고 받게 된다. 메시지는 integer, floating point, boolean와 같은 변수 형태이다. 또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.

  • Publisher, Subscriber, Topic

  • Action, Action Server, Action Client

image.png

2. ROS 통신 방식

image.png

image.png

3. TF(Transform)

  • 각조인트(joint)들의 상대좌표 변환

  • 트리(tree) 형태로 조인트들 간의 관계도를 표시함

image.png

4. ROS 관련 명령어

명령어

중요도

명령어풀이

세부설명

roscd

★★★

ros+cd(changes directory)

지정한 ROS 패키지의 디렉터리로 이동

rosls

★☆☆

ros+ls(lists files)

ROS 패키지의 파일목록 확인

rosed

★☆☆

ros+ed(editor)

ROS 패키지의 파일편집

roscp

★☆☆

ros+cp(copies files)

ROS 패키지의 파일복사

rospd

☆☆☆

ros+pushd

ROS 디렉터리 인덱스에 디렉터리 추가

rosd

☆☆☆

ros+directory

ROS 디렉터리 인덱스 확인

명령어

중요도

명령어풀이

세부설명

roscore

★★★

ros+core

-master(ROS 네임서비스) -rosout(로그기록) -parameter server(파라미터관리)

rosrun

★★★

ros+run

노드실행

roslaunch

★★★

ros+launch

노드를 여러개 실행 및 실행 옵션 설정

rosclean

★★☆

ros+clean

ROS 로그 파일을 검사하거나 삭제

명령어

중요도

명령어풀이

세부설명

rostopic

★★★

ros+topic

ROS 토픽 정보 확인

rosservice

★★★

ros+service

ROS 서비스 정보 확인

rosnode

★★★

ros+node

ROS 노드 정보 확인

rosparam

★★★

ros+param(parameter)

ROS 파라미터 정보 확인, 수정

rosbag

★★★

ros+bag

ROS 메시지 기록, 재생

rosmsg

★★☆

ros+msg

ROS 메시지 정보 확인

rossrv

★★☆

ros+srv

ROS 서비스 정보 확인

rosversion

★☆☆

ros+version

ROS 패키지 및 배포 릴리즈 버전 정보 확인

roswtf

☆☆☆

ros+wtf

ROS 시스템 검사

명령어

중요도

세부설명

catkin_create_pkg

★★★

패키지 자동 생성

catkin_make

★★★

캐킨 빌드시스템에 기반을 둔 빌드

catkin_eclipse

★★☆

캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용 할 수 있게 변경

catkin_prepare_release

★★☆

릴리즈 할때 사용되는 로그정리 및 버전 태깅

catkin_generate_changelog

★★☆

릴리즈 할때 CHANGELOG.rst 파일 생성 또는 업데이트

catkin_init_workspace

★★☆

캐킨 빌드 시스템의 작업폴더 초기화

catkin_find

★☆☆

캐킨 검색

명령어

중요도

명령어풀이

세부설명

rospack

★★★

ros+pack(age)

ROS 패키지와 관련된 정보 보기

rosinstall

★★☆

ros+install

ROS 추가 패키지 설치

rosdep

★★☆

ros+dep(endencies)

해당패키지의 의존성 파일 설치

roslocate

☆☆☆

ros+locate

ROS 패키지 정보 관련 명령어

roscreate-pkg

☆☆☆

ros+create-pkg

ROS 패키지 자동생성(구rosbuild 시스템에서사용)

rosmake

☆☆☆

ros+make

ROS 패키지를 빌드(구rosbuild 시스템에서사용)

5. 빌드 시스템

Column 1

Column 2

Quantity

Unit

angle

radian

frequency

hertz

force

newton

power

watt

voltage

volt

length

meter

mess

kilogram

time

second

current

ampere

temperature

celsius

대상

명명규칙

예제

패키지

under_scored

Ex) first_ros_package

토픽, 서비스

under_scored

Ex) raw_image

파일

under_scored

Ex) turtlebot3_fake.cpp

네임스페이스

under_scored

Ex) ros_awesome_package

변수

under_scored

Ex) string table_name;

타입

CamelCased

Ex) typedefint32_t propertiesNumber;

클래스

CamelCased

Ex) classUrlTable

구조체

CamelCased

Ex) structUrlTableProperties

열거형

CamelCased

Ex) enumChoiceNumber

함수

camelCased

Ex) addTableEntry();

메소드

camelCased

Ex) void setNumEntries(int32_t num_entries)

상수

ALL_CAPITALS

Ex) const uint8_t DAYS_IN_A_WEEK = 7;

SI(Systeme Internationale) 단위 사용

image.png

5.1 Topic / Publisher / Subscriber 실습

1) 패키지 생성

2) 패키지 설정 파일(package.xml) 수정

3) 빌드 설정 파일(CMakeLists.txt) 수정

4) 메시지 파일 작성

5) 퍼블리셔 노드 작성

6) 서브 스크라이버 노드 작성

7) ROS 노드 빌드

•ros_tutorials_topic 패키지의 소스 코드 파일: ~/catkin_ws/src/ros_tutorials_topic/src

•ros_tutorials_topic패키지의 메시지 파일: ~/catkin_ws/src/ros_tutorials_topic/msg

•빌드된 결과물은 /catkin_ws의 /build와/devel폴더에 각각 생성

•/build 폴더에는 캐킨 빌드에서 사용된 설정 내용이 저장

•/devel/lib/ros_tutorials_topic폴더에는 실행 파일이 저장

•/devel/include/ros_tutorials_topic폴더에는 메시지 파일로 부터 자동 생성된 메시지 헤더 파일이 저장

image.png

5.2 git을 활용하여 예제 활용하기

5.3 roslaunch

•roslaunch는 하나 이상의 정해진 노드를 실행 시킬수 있다.

•roslaunch는‘*.launch’라는 파일을 사용하여 실행노드를 설정하는데 이는XML 기반이며, 태그별 옵션을 제공한다.

•실행 명령어는"roslaunch [패키지명] [roslaunch파일]”이다.

image.png

Last updated

Was this helpful?