3장 ROS 구조 및 빌드 시스템
1. ROS 용어
패키지 : ROS 소프트웨어의 기본 단위. 패키지는 노드, 라이브러리, 환경설정 파일들을 통합하는 최소의 빌드 단위이며, 배포 단위이다.
패키지 매니페스트 : 패키지의 작성자, 라이선스, 의존성, 컨피그레이션 플레그 등을 포함하는 패키지 정보
메타 패키지 : 이전에는 스택으로 불리웠지만, 특수한 목적을 위한 패키지 그룹을 지칭한다. 대표적인 예로 네비게이션 스택을 예로 들 수 있다.
메시지 : 한 ROS 프로세서에서 다른 ROS 프로세서로 정보를 전달하는 한 형태
서비스 : 프로세스간의 요청/응답 상호작용
Service, Service Server, Service Client
Node : 최소 단위의 실행 가능한 프로세서를 가리키는 용어로써 하나의 실행 가능한 프로그램으로 생각하면 된다. ROS에서는 최소한의 실행 단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다.
Package : 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은것. 또한, 패키지의 묶음을 메타패키지라 하여 따로 분리 한다.
Message : 메시지를 통해 노드 간의 데이터를 주고 받게 된다. 메시지는 integer, floating point, boolean와 같은 변수 형태이다. 또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.
Publisher, Subscriber, Topic
Action, Action Server, Action Client
2. ROS 통신 방식
3. TF(Transform)
각조인트(joint)들의 상대좌표 변환
트리(tree) 형태로 조인트들 간의 관계도를 표시함
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) 단위 사용
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폴더에는 메시지 파일로 부터 자동 생성된 메시지 헤더 파일이 저장
5.2 git을 활용하여 예제 활용하기
5.3 roslaunch
•roslaunch는 하나 이상의 정해진 노드를 실행 시킬수 있다.
•roslaunch는‘*.launch’라는 파일을 사용하여 실행노드를 설정하는데 이는XML 기반이며, 태그별 옵션을 제공한다.
•실행 명령어는"roslaunch [패키지명] [roslaunch파일]”이다.
Last updated