SlideShare a Scribd company logo
1 of 78
Download to read offline
로봇 운영체제 ROS 개론
2016. 04. 14
Yoonseok Pyo
Open Source Team
1
Index
I. 로봇 소프트웨어 플랫폼의 필요성
II. 로봇 운영체제 ROS 소개
III. 로봇 운영체제 ROS 개념
IV. 로봇 운영체제 ROS 특징과 활용
2
Index
I. 로봇 소프트웨어 플랫폼의 필요성
II. 로봇 운영체제 ROS 소개
III. 로봇 운영체제 ROS 개념
IV. 로봇 운영체제 ROS 특징과 활용
3
4
로봇 소프트웨어 플랫폼이 가져올 미래
 하드웨어 플랫폼과의 소프트웨어 플랫폼간의 인터페이스 확립
 모듈형 하드웨어 플랫폼 확산
 하드웨어에 대한 지식이 없어도 응용 프로그램 작성 가능 (있다면 더 좋고 )
 더 많은 소프트웨어 인력들이 로보틱스 분야로 진입, 로봇 제품에 참여 가능
 유저에게 제공할 서비스에 집중
 서비스 제공으로 유저계층 형성 및 피드백
 로봇 개발이 급속도로 발전 할 수 있는 계기
5
주요 로봇 운영체제
6http:// ros.org kr.forwallpaper.com http://www.softbank.jp/en/corp/group/sbr/ http://www.opros.or.kr/ http://www.openrtm.org/ http://schools-wikipedia.org/
Galapagos
Closed source
Open source
Index
I. 로봇 소프트웨어 플랫폼의 필요성
II. 로봇 운영체제 ROS 소개
III. 로봇 운영체제 ROS 개념
IV. 로봇 운영체제 ROS 특징과 활용
7
ROS의 진정한 목적
8
로보틱스 소프트웨어 개발을 전세계 레벨에서
공동 작업 가능하도록 환경을 구축하는 것!
http://imgfave.com/
소프트웨어 프레임워크
 로봇 소프트웨어를 개발하기 위한 소프트웨어 프레임워크
 개발 도구, 라이브러리, 드라이버, 다양한 로봇 소프트웨어 공개 패키지 제공
 하드웨어 플랫폼의 하드웨어 추상화
 이 기종 하드웨어에서 사용 가능한 메시지 기능
 로보틱스 생태계 생성!
9http://www.ros.org/about-ros/
메타운영체제(Meta-Operating System)
10
iOS
디바이스 드라이버, 라이브러리, 디버그 도구, 메시지 통신
구동 도구, 컴파일 도구, 인스톨러, 패키지 생성 및 릴리즈
메타 운영체제
현재의 ROS 생태계
11
 5,000이상의 패키지
 2,188개의 공식 패키지 제공 (July 2015)
 71,663 다운로드 (Unique IP, July 2015)
 16,043 Wiki페이지 (July 2015)
 애플리케이션 fetch beer, elevator …
 시뮬레이터 gazebo, player/stage, STDR Simulator …
 지능모듈 navigation, action, grasping …
 라이브러리 tf, PCL, OpenCV, OpenRave …
 디바이스드라이버 camera_drivers, urg_node …
 디버그 툴 rviz, rqt_graph, rosbag, rostopic …
 메시지통신 rosmaster, rosmsg, rosservice …
 실행 툴 rosrun, roslaunch …
 컴파일 툴 catkin_make, rosbuild …
 파일시스템 roscd, rosls …
 설치 툴 rosinstall …
 프로그래밍언어 C++, Python, Lisp, Java, Ruby, MATLAB등
 90종류 이상의 로봇, 80종류 이상의 센서 지원
APP
ROS
ROBOT, SENSOR
개발자, 유저
로봇, 센서 회사
Index
I. 로봇 소프트웨어 플랫폼의 필요성
II. 로봇 운영체제 ROS 소개
III. 로봇 운영체제 ROS 개념
IV. 로봇 운영체제 ROS 특징과 활용
12
ROS 용어
 Node
 최소 단위의 실행 가능한 프로세서를 가리키는 용어로써 하나의 실행 가능한 프
로그램으로 생각하면 된다. ROS 에서는 최소한의 실행단위로 프로그램을 나누
어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다.
 Package
 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것. 또한, 패키지의 묶
음을 메타패키지라 하여 따로 분리한다.
 Message
 메시지를 통해 노드간의 데이터를 주고받게 된다. 메시지는 integer, floating
point, boolean 와 같은 변수형태이다. 또한, 메시지 안에 메시지를 품고 있는 간
단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.
13
ROS 용어
14
Topic, Publisher, Subscriber
http://www.dreamstime.com/illustration/people-talk-listen-tin-can-phone-communication.html
퍼블리셔 서브스크라이버
Topic Publisher Subscriber
Topic
엔코더 SLAM(위치정보 X, Y, θ)
Publisher
Subscriber
Topic
거리센서
로봇A
(장애물 X, Y)
Subscriber
로봇B
하나의 Topic 에 대해
복수의 퍼블리셔, 복수의 서브스크라이버도 가능함
ROS 용어
15
Service, Service server, Service client
http://www.dreamstime.com/illustration/people-talk-listen-tin-can-phone-communication.html
서버 클라이언트
서비스 응답
서버 클라이언트
서비스 요청
어이~ 서버!
지금 몇 시야?
지금 몇 시냐고?
알아볼게~
지금 12:00시야!
ROS 개념 정리
• turtlesim 패키지
 roscore
 rosrun turtlesim turtlesim_node
 rosrun turtlesim turtle_teleop_key
 rosrun rqt_graph rqt_graph
16
ROS 개념 정리
• 예제! turtlesim
17
roscore
http://192.168.4.100:50051
turtlesim_node 노드
정보 구독
http://192.168.4.100:45704
turtle_teleop_key 노드
정보 발행
메시지 전송
/turtle1/cmd_vel
퍼블리셔 노드 정보:
/teleop_turtle,
/turtle1/cmd_vel,
geomety_msgs/Twist,
http://192.168.4.100:45704
퍼블리셔 노드 정보:
/teleop_turtle,
/turtle1/cmd_vel,
geomety_msgs/Twist,
http://192.168.4.100:45704
서브스크라이버 노드 정보:
/turtlesim,
/turtle1/cmd_vel,
geomety_msgs/Twist,
http://192.168.4.100:50051
마스터
http://192.168.4.100:11311
노드 정보 관리
← ↑↓ →
④
①
②
③
Index
I. 로봇 소프트웨어 플랫폼의 필요성
II. 로봇 운영체제 ROS 소개
III. 로봇 운영체제 ROS 개념
IV. 로봇 운영체제 ROS 특징과 활용
18
Index
I. 로봇 소프트웨어 플랫폼의 필요성
II. 로봇 운영체제 ROS 소개
III. 로봇 운영체제 ROS 개념
IV. 로봇 운영체제 ROS 특징과 활용
→ 통신 인프라 / 로봇 관련 기능 / 다양한 개발 도구
→ 활용 예제
19
특징 1) 통신 인프라
 노드 간 통신을 제공
 통상적 미들웨어로 지칭되는 메시지 전달 인터페이스
 메시지 파싱 기능
• 로봇 개발 시에 빈번히 사용되는 통신 시스템 제공
• 캡슐화 및 코드 재사용을 촉진하는 노드들 간의 메시지 전달 인터페이스
 메시지의 기록 및 재생
• 노드 간 송/수신되는 데이터인 메시지를 저장하고 필요시에 재사용 가능
• 저장된 메시지를 기반으로 반복적인 실험 가능, 알고리즘 개발에 용이함
• 개발 노력을 절감, 시스템의 유연성과 모듈화를 촉진하는 강력한 디자인 패턴
 원격 프로시저 호출
• 노드 간의 동기식 요청/응답 상호 작용 가능
 분산 매개 변수 시스템
• 시스템에서 사용되는 변수를 글로벌 키를 작성하여 공유, 수정하여 실시간으로 반영
20
특징 2) 로봇 관련 다양한 기능
 로봇에 대한 표준 메시지 정의
 카메라, IMU, 레이저 등의 센서 / 오도메트리, 경로 및 지도 등의 내비게이션 데이터 등의 표준 메시지를 정의하여
모듈화, 협업 작업을 유도, 효율성 향상
 로봇 기하학 라이브러리
 로봇, 센서 등의 상대적 좌표를 트리화 시키는 TF 제공
 로봇 기술 언어
 로봇의 물리적 특성을 설명하는 XML 문서 기술
 진단 시스템
 로봇의 상태를 한눈에 파악할 수 있는 진단 시스템 제공
 센싱/인식
 센서 드라이버, 센싱/인식 레벨의 라이브러리 제공
 내비게이션
 로봇에서 많이 사용되는 로봇의 포즈(위치/자세) 추정, 지도내의 자기 위치 추정 및 지도 작성에 필요한 SLAM, 작
성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리를 제공
 매니퓰레이션
 로봇 암에 사용되는 IK, FK 는 물론 응용단의 Pick and Place 를 지원하는 다양한 Manipulation 라이브러리 제공,
GUI 형태의 매니퓰레이션 Tools 제공(MoveIt!)
21
특징 3) 다양한 개발 도구
 로봇 개발에 필요한 다양한 개발 도구를 제공
 로봇 개발의 효율성 향상
 Command-Line Tools
• GUI 없이 ROS에서 제공되는 명령어로만 로봇 억세스 및 거의 모든 ROS 기능 소화
 RViz
• 강력한 3D 시각화툴 제공
• 레이저, 카메라 등의 센서 데이터를 시각화
• 로봇 외형과 계획된 동작을 표현
 RQT
• 그래픽 인터페이스 개발을 위한 Qt 기반 프레임 워크 제공
• 노드와 그들 사이의 연결 정보 표시(rqt_graph)
• 인코더, 전압, 또는 시간이 지남에 따라 변화하는 숫자를 플로팅(rqt_plot)
• 데이터를 메시지 형태로 기록하고 재생(rqt_bag)
22http://www.ros.org/core-components/
아래의 Command-Line Tools 는 ROS 강의 전반에
걸쳐서 지속적으로 사용됩니다.
rospack, roscd, rospd, rosls, rosed, roscp, rosdep,
roswf, catkin_create_pkg, wstool, catkin_make,
roscore, rosrun, roslaunch, rosnode, rostopic,
rosservice, rosparam, rosmsg, rossrv, rosbag, tf_echo
배부한 ROS Cheatsheet 를 참고해주시구요.
이 부분은 생략!
https://github.com/oroca/oroca_ros_tutorials/raw/master/ROScheatsheet_indigo_catkin.pdf
Command-Line Tools
RViz (ROS Visualization Tool)
• ROS의 3D 시각화툴
• 센서 데이터의 시각화
• 레이저 레인지 파인더(LRF)센서의 거리 데이터
• Kinect, Xtion, RealSense 등의 Depth Camera의 포인트 클라우드 데이터
• 카메라의 영상 데이터
• IMU 센서의 관성 데이터 등..
• 로봇 외형의 표시와 계획된 동작을 표현
• URDF(Unified Robot Description Format)
• 내비게이션
• 매니퓰레이션
• 원격 제어
Rviz의 사용예 #1
• Kinect의 Point Cloud Data
25
https://youtu.be/OqOkpZBOpxY
Rviz의 사용예 #2
• LRF의 거리 값
26
https://youtu.be/qtoAJ1wzB6s
Rviz의 사용예 #3
• LEGO Mindstorm 의 초음파 센서
27https://youtu.be/6afrMnEmXFI
Rviz의 사용예 #4
• IMU센서의 관성 값
28
https://youtu.be/j5v5fKppcQo
Rviz의 사용예 #5
• RealSense의 Point Cloud와 Color, Depth 영상
29https://youtu.be/Jf4kgPEzY4s
Rviz의 사용예 #6
• 사람의 골격과 지시 방향 표시
30https://youtu.be/ath8uNv9c_Q
Rviz의 사용예 #7
• 로봇 및 환경 모델, 경로까지
31https://youtu.be/9lbuLAD1c_4
Rviz의 사용예 #8
• 지도 표시, 내비게이션, 목적지 지정
32https://youtu.be/xCRsszVAP1E
Rviz의 사용예 #9
• 인터렉티브 마커를 이용한 IK 목표 위치 지정 및 경로 표시
33https://youtu.be/5rMv3ZDyFwQ
Rviz의 사용예 #10
• 재난구조로봇의 경우 (2015 DARPA Robotics Challenge)
34https://www.youtube.com/user/DARPAtv
RViz를 이용하면
센서 및 로봇 관련
데이터 시각화가 간단!
35
Rviz 실습은 다음주에…
‘LRF, IMU, USB Camera,
Depth Camera, Robot Model
을 Rviz를 통해 확인해보자.’
RQT: 플러그인 방식의 ROS의 종합 GUI 툴
• ROS Fuerte 버전부터는 rqt 라는 이름으로 기존의 rxbag, rxplot, rxgraph 등이 통폐합되어
rqt_bag, rqt_plot, rqt_graph 등을 플러그인으로 하는 ROS의 종합 GUI 툴로써 사용 가능해졌다.
• rqt는 Qt로 개발되어 있기 때문에 유저들이 자유롭게 플러그인을 개발하여 추가할 수도 있다.
• rqt의 대표적인 플러그인인 rqt_image_view, rqt_graph, rqt_plot, rqt_bag에 대해서 알아보도
록 하자.
• 참고로, 그 이외에도
• rqt_action, rqt_gui, rqt_plot, rqt_runtime_monitorrqt_bag, rqt_gui_cpp, rqt_pose_view,
rqt_rvizrqt_bag_plugins, rqt_gui_py, rqt_publisher, rqt_service_callerrqt_capabilities,
rqt_image_view, rqt_py_common, rqt_shellrqt_console, rqt_launch, rqt_py_console,
rqt_srvrqt_controller_manager, rqt_logger_level, rqt_reconfigure, rqt_tf_treerqt_dep, rqt_moveit,
rqt_robot_dashboard, rqt_toprqt_ez_publisher, rqt_msg, rqt_robot_monitor, rqt_topicrqt_graph,
rqt_nav_view, rqt_robot_steering, rqt_web
• 등의 플러그인이 존재한다. (헐 ㅡㅡ;;)
$ sudo apt-get install ros-indigo-rqt ros-indigo-rqt-common-plugins
$ rqt
RQT 설치 및 실행
• RQT 설치
• RQT 실행
RQT 플러그인 #1
1. 액션 (Action)
• Action Type Browser | Action 타입의 데이터 구조를 확인
2. 구성 (Configuration)
• Dynamic Reconfigure | 노드들에서 제공하는 설정값 변경을 위한 GUI 설정값 변경
• Launch | roslaunch 의 GUI 버전
3. 내성 (Introspection)
• Node Graph | 구동중인 노드들의 관계도 및 메시지의 흐름을 확인 가능한 그래프 뷰
• Package Graph | 노드의 의존 관계를 표시하는 그래프 뷰
• Process Monitor | 실행중인 노드들의 CPU사용률, 메모리사용륭, 스레드수 등을 확인
4. 로깅 (Logging)
• Bag | ROS 데이터 로깅
• Console | 노드들에서 발생되는 경고(Warning), 에러(Error) 등의 메시지를 확인
• Logger Level | ROS의 Debug, Info, Warn, Error, Fatal 로거 정보를 선택하여 표시
39
RQT 플러그인 #2
5. 다양한 툴 (Miscellaneous Tools)
• Python Console | 파이썬 콘솔 화면
• Shell | 쉘(shell)을 구동
• Web | 웹 브라우저를 구동
6. 로봇 (Robot)
• 사용하는 로봇에 따라 계기판(dashboard) 등의 플러그인을 이곳에 추가
7. 로봇툴 (Robot Tools)
• Controller Manager | 컨트롤러 제어에 필요한 플로그인
• Diagnostic Viewer | 로봇 디바이스 및 에러 확인
• Moveit! Monitor | 로봇 팔 계획에 사용되는 Moveit! 데이터를 확인
• Robot Steering | 로봇 조정 GUI 툴, 원격 조정에서 이 GUI 툴을 이용하여 로봇 조종
• Runtime Monitor | 실시간으로 노드들에서 발생되는 에러 및 경고를 확인
40
RQT 플러그인 #3
8. 서비스 (Services)
• Service Caller | 구동중인 서비스 서버에 접속하여 서비스를 요청
• Service Type Browser | 서비스 타입의 데이터 구조를 확인
9. 토픽 (Topics)
• Easy Message Publisher | 토픽을 GUI 환경에서 발행
• Topic Publisher | 토픽을 생성하여 발행
• Topic Type Browser | 토픽 타입의 데이터 구조 확인
• Topic Monitor | 사용자가 선택한 토픽의 정보를 확인
10. 시각화 (Visualization)
• Image View | 카메라의 영상 데이터를 확인
• Navigation Viewer | 로봇 네비게이션의 위치 및 목표지점 확인
• Plot | 2차원 데이터 플롯 GUI 플러그인, 2차원 데이터의 도식화
• Pose View | 현재 TF의 위치 및 모델의 위치 표시
• RViz | 3차원 시각화 툴인 RViz 플러그인
• TF Tree | tf 관계를 트리로 나타내는 그래프 뷰
41
RQT의 사용 예시
42http://www.ros.org/core-components/
RQT를 이용하면
1. GUI 형태로 ROS 이용 가능
2. GUI Tool 제작이 간단!
43
44
RQT 실습은 다음주에…
rqt_image_view
rqt_graph
rqt_plot
rqt_bag
ROS 활용의 예시
 OpenCV, PCL, Machine Learning, Sensing, IoT 등 로봇 이외에도 범용적으로 사용 가능한 소프
트웨어 프레임워크를 가지고 있음
 rosbag 는 모든 데이터에 대해서 녹음이 가능하여, 언제든지 재 실험이 가능하다.
 재실험 없이 기존 데이터를 기반으로 한 알고리즘 개발에 용이
45http://www.ros.org/core-components/
ROS 활용의 예시
• 3차원 모델링, 시뮬레이션, 플래닝
46
ROS 활용의 예시
 센서 정보 취득
 센서 정보 시각화
47
ROS 활용의 예시
 내비게이션 & 매니퓰레이션
 로봇 모델 기술, 시뮬레이션 부터
실제 하드웨어를 기반으로 한 로봇 실험 가능
48
ROS 활용의 예시
• ROS 8 Year Montage
49https://vimeo.com/146183080
질문
대환영!
“hello world!”
2016. 04. 14
Yoonseok Pyo
Open Source Team
51
Index
I. 무조건 따라하기 “hello world!”
II. ROS 파일 시스템
III. ROS 빌드 시스템
52
Index
I. 무조건 따라하기 “hello world!”
II. ROS 파일 시스템
III. ROS 빌드 시스템
53
무조건 따라하기 “hello world!”
• ROS판 “hello world!” 작성
• 메시지 통신 중 토픽을 이용하는 퍼블리셔 노드 작성
• 1) 패키지 생성
• 사용자가 패키지를 작성할 때 캐킨 빌드 시스템에 꼭 필요한 CMakeLists.txt
와 package.xml을 포함한 패키지 폴더를 생성한다.
54
$ catkin_create_pkg [패키지이름] [의존하는패키지1] [의존하는패키지n]
$ cd ~/catkin_ws/src
$ catkin_create_pkg my_first_ros_pkg std_msgs roscpp
$ cd ~/catkin_ws/src/my_first_ros_pkg
무조건 따라하기 “hello world!”
55
• 2) 패키지 설정 파일(package.xml) 수정
• 패키지 이름, 저작자, 라이선스, 의존성 패키지 등의 패키지 관련 정보
$ cd ~/catkin_ws/src/my_first_ros_pkg
$ gedit ./package.xml
<?xml version="1.0"?>
<package>
<name>my_first_ros_pkg</name>
<version>0.0.1</version>
<description>The my_first_ros_pkg package</description>
<maintainer email="pyo@robotis.com">Yoonseok Pyo</maintainer>
<license>BSD</license>
<url type="website">http://robotis.com</url>
<url type="repository">https://github.com/oroca/oroca_ros_tutorials.git</url>
<author email="pyo@robotis.com">Yoonseok Pyo</author>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>std_msgs</build_depend>
<build_depend>roscpp</build_depend>
<run_depend>std_msgs</run_depend>
<run_depend>roscpp</run_depend>
<export></export>
</package>
무조건 따라하기 “hello world!”
56
• 3) 빌드 설정 파일(CMakeLists.txt) 수정
• 실행 파일 생성, 의존성 패키지 우선 빌드, 링크 생성 등의 빌드 환경 정보
$ cd ~/catkin_ws/src/my_first_ros_pkg
$ gedit ./CMakeLists.txt
cmake_minimum_required(VERSION 2.8.3)
project(my_first_ros_pkg)
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS roscpp std_msgs
DEPENDS system_lib
)
include_directories(${catkin_INCLUDE_DIRS})
add_executable(hello_world_node src/hello_world_node.cpp)
add_dependencies(hello_world_node my_first_ros_pkg_generate_messages_cpp)
target_link_libraries(hello_world_node ${catkin_LIBRARIES})
무조건 따라하기 “hello world!”
57
• 4) 소스 코드 작성
$ cd ~/catkin_ws/src/my_first_ros_pkg/src
$ gedit ./hello_world_node.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "hello_world_node");
ros::NodeHandle nh;
ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("say_hello_world", 1000);
ros::Rate loop_rate(10);
int count = 0;
무조건 따라하기 “hello world!”
58
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world!" << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
무조건 따라하기 “hello world!”
59
• 5) 패키지 빌드
• 6) roscore 실행
• 7) 노드 실행
$ rospack profile
$ cd ~/catkin_ws
$ catkin_make
(혹은 다음과 같이 함께 사용하여 1라인으로 처리)
$ cd ~/catkin_ws && catkin_make
$ roscore
(이미 실행되어 있다면 생략)
$ rosrun my_first_ros_pkg hello_world_node
[INFO] [1423443540.131775283]: hello world! 0
[INFO] [1423443540.231826916]: hello world! 1
[INFO] [1423443540.331798085]: hello world! 2
[INFO] [1423443540.431796634]: hello world! 3
…
무조건 따라하기 “hello world!”
• rqt_graph
• rostopic
60
$ rosrun rqt_graph rqt_graph
$ rostopic list
/rosout
/rosout_agg
/say_hello_world
$ rostopic info /say_hello_world
Type: std_msgs/String
Publishers:
* /hello_world_node (http://localhost:51083/)
Subscribers: None
$ rostopic hz /say_hello_world
subscribed to [/say_hello_world]
average rate: 9.999 min: 0.100s max: 0.100s std dev: 0.00001s window: 10
무조건 따라하기 “hello world!”
• rqt_topic
• 송/수신 테스트
61
$ rosrun rqt_topic rqt_topic
$ rostopic echo /say_hello_world
data: hello world!109
---
data: hello world!110
---
data: hello world!111
---
…
$ rosrun rqt_graph rqt_graph
ctrl + c
Index
I. 무조건 따라하기 “hello world!”
II. ROS 파일 시스템
III. ROS 빌드 시스템
62
ROS 파일 시스템
1. ROS 설치 폴더
• /opt/ros/[버전이름]
• /opt/ros/indigo (ROS indigo 버전의 경우)
2. 사용자 작업 폴더
• ~/catkin_ws/ (‘~/’은 리눅스에서 ‘/home/사용자명'에 해당하는 폴더)
• /home/oroca/catkin_ws/
(사용자명이 oroca의 경우, 사용자 작업 폴더명을 catkin_ws라고 지정한 경우)
3. 사용자 패키지 폴더
• /home/oroca/catkin_ws/src
• 사용자 작업 폴더내의 하나의 패키지
• 0(?)개 이상의 노드로 구성됨
63
ROS 파일 시스템
1. ROS 설치 폴더(/opt/ros/indigo)
• /bin 실행 가능한 바이너리 파일
• /etc ROS 및 catkin 관련 설정 파일
• /include 헤더 파일
• /lib 라이브러리 파일
• /share ROS 패키지
• env.* 환경 설정 파일
• setup.* 환경 설정 파일
64
ROS 파일 시스템
2. 사용자 작업 폴더(/home/oroca/catkin_ws/)
• /build 빌드 관련 파일
• /devel msg, srv 헤더 파일과 사용자 패키지 라이브러리, 실행 파일
• /src 사용자 패키지 폴더
65
ROS 파일 시스템
3. 사용자 패키지 폴더 (/home/oroca/catkin_ws/src)
• /include 헤더파일
• /launch roslaunch에 사용되는 launch 파일
• /node rospy용 스크립트
• /msg 메시지 파일
• /src 코드 소스 파일
• /srv 서비스 파일
• CMakeLists.txt 빌드 설정 파일
• package.xml 패키지 설정 파일
66
Index
I. 무조건 따라하기 “hello world!”
II. ROS 파일 시스템
III. ROS 빌드 시스템
67
ROS 빌드 시스템
• CMake(Cross Platform Make)를 이용
• 빌드 환경은 패키지 폴더의 CMakeLists.txt 파일에 기술
• ROS 개발 환경에 맞도록 Cmake의 기능을 추가하여 ROS에 특화시
킨 캐킨(catkin) 빌드 시스템을 제공
• 캐킨 빌드 시스템은 ROS와 관련된 빌드, 패키지 관리, 패키지 간 의존관계
등을 편리하게 사용할 수 있도록 하고 있다.
• ROS 패키지 설정 내용은 package.xml에 기재하고 있다.
68
패키지 설정 파일(package.xml)
• <?xml> 문서 문법을 정의하는 문구로 아래의 내용은 xml 버전 1.0을 따르고 있다는 것을 알린다.
• <package> 이 구문부터 </package>까지가 ROS 패키지 설정 부분이다.
• <name> 패키지의 이름이다. 패키지를 생성할 때 입력한 패키지 이름이 사용된다. 다른 옵션도 마찬가지지만 이는 사용
자가 원할 때 언제든지 변경할 수 있다.
• <version> 패키지의 버전이다. 자유롭게 지정할 수 있다.
• <description> 패키지의 간단한 설명이다.
• <maintainer> 패키지 관리자의 연락처를 기재한다.
• <license> 라이선스를 기재한다. BSD, MIT, GPLv3, LGPLv3 등을 기재하면 된다.
• <url> 패키지를 설명하는 웹 페이지 또는 버그 관리, 저장소 등의 주소를 기재한다. 이 종류에 따라 type에 website,
bugtracker, repository를 대입하면 된다.
• <author> 패키지 개발에 참여한 개발자를 적는다. 복수의 개발자가 참여한 경우에는 바로 다음 줄에 <author> 태그를
이용하여 추가로 넣어주면 된다.
• <buildtool_depend> 빌드 시스템의 의존성을 기술한다. 캐킨 빌드 시스템을 이용하고 있으므로 catkin을 입력한다.
• <build_depend> 패키지를 빌드할 때 의존하는 패키지 이름을 적는다.
• <run_depend> 패키지를 실행할 때 의존하는 패키지 이름을 적는다.
• <test_depend> 패키지를 테스트할 때 의존하는 패키지 이름을 적는다.
• <export> ROS에서 명시하지 않은 태그명을 사용할 때 쓰인다. 일반적인 경우 쓸 일이 없다.
• <metapackage> export 태그 안에서 사용하는 공식적인 태그로 현재의 패키지가 메타 패키지이면 이를 선언한다.
69
빌드 설정 파일(CMakeLists.txt)
• cmake_minimum_required(VERSION 2.8.3)
• 운영체제에 설치된 cmake의 최소 요구 버전
• project(my_first_ros_pkg)
• 패키지의 이름 (package.xml에서 입력한 패키지 이름을 그대로 사용하자.)
• find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
• 캐킨 빌드를 할 때 요구되는 구성요소 패키지
• find_package(Boost REQUIRED COMPONENTS system)
• ROS 이외의 패키지가 요구될 때 명시하는 방법
• catkin_python_setup()
• 파이썬을 사용할 때 설정하는 옵션이다. 파이썬 설치 프로세스인 setup.py를
부르는 역할을 한다.
70
빌드 설정 파일(CMakeLists.txt)
• add_message_files(FILES Message1.msg Message2.msg)
• 노드에서 사용하는 메시지 파일을 추가하는 옵션 (msg 폴더의 .msg 파일)
• add_service_files(FILES Service1.srv Service2.srv)
• 노드에서 사용하는 서비스 파일을 추가하는 옵션 (srv 폴더의 .srv 파일)
• generate_messages(DEPENDENCIES std_msgs)
• 의존하는 메시지를 설정하는 옵션
• catkin_package(
INCLUDE_DIRS include → 해당 폴더의 헤더 파일을 사용
LIBRARIES my_first_ros_pkg → 해당 패키지의 라이브러리를 사용
CATKIN_DEPENDS roscpp std_msgs → 의존하는 ROS 패키지를 설정
DEPENDS system_lib → 의존하는 시스템 라이브러리를 설정
)
• 캐킨 빌드 옵션
71
빌드 설정 파일(CMakeLists.txt)
• include_directories(${catkin_INCLUDE_DIRS})
• 인클루드 폴더를 지정
• add_library(my_first_ros_pkg
src/${PROJECT_NAME}/my_first_ros_pkg.cpp)
• 빌드 후 생성할 라이브러리를 지정
• add_executable(my_first_ros_pkg_node src/my_first_ros_pkg_node.cpp)
• 소스 코드 파일 지정, 빌드 후 생성할 실행 파일명을 지정
• add_dependencies(my_first_ros_pkg_node
my_first_ros_pkg_generate_messages_cpp)
• 패키지를 빌드하기에 앞서 생성해야 할 메시지 헤더 파일이 있으면 빌드 전에 우선
으로 메시지를 생성하라는 설정
• target_link_libraries(my_first_ros_pkg_node ${catkin_LIBRARIES})
• my_first_ros_pkg_node를 생성하기에 앞서 링크해야 하는 라이브러리와 실행 파일
을 링크해주는 옵션
72
ROS 로봇 프로그래밍
을 위한 선수 학습 완료!
다음 주에는 퍼블리셔, 서브스크라이버,
서비스 서버, 서비스 클라이언트 작성에 들어갑니다.
73
질문
대환영!
국내 유일! 최초! ROS 책
비 영어권 최고의 책
인세 전액 기부
여기서! 광고 하나 나가요~
여기서! 광고 둘 나가요~
• 오로카
• www.oroca.org
• 오픈 로보틱스 지향
• 풀뿌리 로봇공학의 저변 활성화
• 열린 강좌, 세미나, 프로젝트 진행
• 로봇공학을 위한 열린 모임 (KOS-ROBOT)
• www.facebook.com/groups/KoreanRobotics
• 로봇공학 통합 커뮤니티 지향
• 일반인과 전문가가 어울러지는 한마당
• 로봇공학 소식 공유
• 연구자 간의 협력
혼자 하기에 답답하시다고요?
커뮤니티에서 함께 해요~
Yoonseok Pyo
pyo@robotis.com
www.robotpilot.net
표윤석
www.facebook.com/yoonseok.pyo
또~ 봬요!
*^^*
끝.
Thanks for your attention!
표윤석
78
Yoonseok Pyo
pyo@robotis.com
www.robotpilot.net
표윤석
www.facebook.com/yoonseok.pyo

More Related Content

What's hot

ROS SERIAL and OpenCR
ROS SERIAL and OpenCRROS SERIAL and OpenCR
ROS SERIAL and OpenCRYoonseok Pyo
 
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션Seongjun Kim
 
Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編OESF Education
 
The Low-Risk Path to Building Autonomous Car Architectures
The Low-Risk Path to Building Autonomous Car ArchitecturesThe Low-Risk Path to Building Autonomous Car Architectures
The Low-Risk Path to Building Autonomous Car ArchitecturesReal-Time Innovations (RTI)
 
Windows kernel basic exploit
Windows kernel basic exploitWindows kernel basic exploit
Windows kernel basic exploitKyoungseok Yang
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for LinuxYu-Hsin Hung
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
Virtualization Support in ARMv8+
Virtualization Support in ARMv8+Virtualization Support in ARMv8+
Virtualization Support in ARMv8+Aananth C N
 
micro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUsmicro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUseProsima
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System ServerOpersys inc.
 
OpenGLES Android Graphics
OpenGLES Android GraphicsOpenGLES Android Graphics
OpenGLES Android GraphicsArvind Devaraj
 

What's hot (20)

ROS SERIAL and OpenCR
ROS SERIAL and OpenCRROS SERIAL and OpenCR
ROS SERIAL and OpenCR
 
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
Gazebo, 9개의 파일로 간단히 시작하는 로봇 시뮬레이션
 
Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編Android™組込み開発基礎コース BeagleBoard編
Android™組込み開発基礎コース BeagleBoard編
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
 
The Low-Risk Path to Building Autonomous Car Architectures
The Low-Risk Path to Building Autonomous Car ArchitecturesThe Low-Risk Path to Building Autonomous Car Architectures
The Low-Risk Path to Building Autonomous Car Architectures
 
Windows kernel basic exploit
Windows kernel basic exploitWindows kernel basic exploit
Windows kernel basic exploit
 
Android
Android Android
Android
 
Clear Linux OS - Introduction
Clear Linux OS - IntroductionClear Linux OS - Introduction
Clear Linux OS - Introduction
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
FreeRTOS
FreeRTOSFreeRTOS
FreeRTOS
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for Linux
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
ROS ROV AUV
ROS ROV AUVROS ROV AUV
ROS ROV AUV
 
Virtualization Support in ARMv8+
Virtualization Support in ARMv8+Virtualization Support in ARMv8+
Virtualization Support in ARMv8+
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
micro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUsmicro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUs
 
Android 10
Android 10Android 10
Android 10
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
 
OpenGLES Android Graphics
OpenGLES Android GraphicsOpenGLES Android Graphics
OpenGLES Android Graphics
 

Viewers also liked

Open Source License
Open Source LicenseOpen Source License
Open Source LicenseYoonseok Pyo
 
4th Open Robotics Seminar
4th Open Robotics Seminar4th Open Robotics Seminar
4th Open Robotics SeminarYoonseok Pyo
 
제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션
제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션
제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션Yoonseok Pyo
 
DYNAMIXEL ROS Package
DYNAMIXEL ROS PackageDYNAMIXEL ROS Package
DYNAMIXEL ROS PackageYoonseok Pyo
 
2nd ROS Tutorial Seminar
2nd ROS Tutorial Seminar2nd ROS Tutorial Seminar
2nd ROS Tutorial SeminarYoonseok Pyo
 
2nd ROS Tutorial Seminar Section 4
2nd ROS Tutorial Seminar Section 42nd ROS Tutorial Seminar Section 4
2nd ROS Tutorial Seminar Section 4Yoonseok Pyo
 
20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_korea20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_koreaYoonseok Pyo
 
2nd ROS Tutorial Seminar Section 2
2nd ROS Tutorial Seminar Section 22nd ROS Tutorial Seminar Section 2
2nd ROS Tutorial Seminar Section 2Yoonseok Pyo
 

Viewers also liked (8)

Open Source License
Open Source LicenseOpen Source License
Open Source License
 
4th Open Robotics Seminar
4th Open Robotics Seminar4th Open Robotics Seminar
4th Open Robotics Seminar
 
제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션
제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션
제3회 오픈 로보틱스 세미나 (제9세션) : ROS를 활용한 SLAM과 내비게이션
 
DYNAMIXEL ROS Package
DYNAMIXEL ROS PackageDYNAMIXEL ROS Package
DYNAMIXEL ROS Package
 
2nd ROS Tutorial Seminar
2nd ROS Tutorial Seminar2nd ROS Tutorial Seminar
2nd ROS Tutorial Seminar
 
2nd ROS Tutorial Seminar Section 4
2nd ROS Tutorial Seminar Section 42nd ROS Tutorial Seminar Section 4
2nd ROS Tutorial Seminar Section 4
 
20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_korea20150708 ros seminar_in_busan_korea
20150708 ros seminar_in_busan_korea
 
2nd ROS Tutorial Seminar Section 2
2nd ROS Tutorial Seminar Section 22nd ROS Tutorial Seminar Section 2
2nd ROS Tutorial Seminar Section 2
 

Similar to 20160414 ROS 2차 강의 (for 아스라다 팀)

초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)Software in Life
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineeringYoungSu Son
 
모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍Suhan Park
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축rockplace
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsJuseok Kim
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장MinPa Lee
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInho Kang
 
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD StudioDevgear
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
 
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장Devgear
 
MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개MongoDB
 

Similar to 20160414 ROS 2차 강의 (for 아스라다 팀) (20)

초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineering
 
모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOps
 
피니엔진
피니엔진피니엔진
피니엔진
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
 
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
 
MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개MongoDB 신제품 및 신기능 소개
MongoDB 신제품 및 신기능 소개
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 

More from Yoonseok Pyo

제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기
제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기
제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기Yoonseok Pyo
 
제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇
제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇
제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇Yoonseok Pyo
 
공돌이에게도 전략은 필요하다
공돌이에게도 전략은 필요하다공돌이에게도 전략은 필요하다
공돌이에게도 전략은 필요하다Yoonseok Pyo
 
BLDC 모터 돌려보기
BLDC 모터 돌려보기BLDC 모터 돌려보기
BLDC 모터 돌려보기Yoonseok Pyo
 
제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론
제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론
제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론Yoonseok Pyo
 
제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)
제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)
제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)Yoonseok Pyo
 
제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)
제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)
제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)Yoonseok Pyo
 
제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)
제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)
제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)Yoonseok Pyo
 

More from Yoonseok Pyo (8)

제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기
제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기
제6회 오픈 로보틱스 세미나 4세션 공학으로 콘텐츠 만들기
 
제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇
제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇
제6회 오픈 로보틱스 세미나 1세션 임의의 어떤 로봇
 
공돌이에게도 전략은 필요하다
공돌이에게도 전략은 필요하다공돌이에게도 전략은 필요하다
공돌이에게도 전략은 필요하다
 
BLDC 모터 돌려보기
BLDC 모터 돌려보기BLDC 모터 돌려보기
BLDC 모터 돌려보기
 
제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론
제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론
제3회 오픈 로보틱스 세미나 (제7세션) : 로봇운영체제ROS 개론
 
제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)
제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)
제2회 오픈 로보틱스 세미나 (제10세션 ROS를 활용한 SLAM과 내비게이션)
 
제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)
제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)
제2회 오픈 로보틱스 세미나 (제8세션 로봇 운영체제 ROS 개론)
 
제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)
제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)
제1회 오픈 로보틱스 세미나 (제6세션:로봇 운영체제 ROS 개론)
 

20160414 ROS 2차 강의 (for 아스라다 팀)

  • 1. 로봇 운영체제 ROS 개론 2016. 04. 14 Yoonseok Pyo Open Source Team 1
  • 2. Index I. 로봇 소프트웨어 플랫폼의 필요성 II. 로봇 운영체제 ROS 소개 III. 로봇 운영체제 ROS 개념 IV. 로봇 운영체제 ROS 특징과 활용 2
  • 3. Index I. 로봇 소프트웨어 플랫폼의 필요성 II. 로봇 운영체제 ROS 소개 III. 로봇 운영체제 ROS 개념 IV. 로봇 운영체제 ROS 특징과 활용 3
  • 4. 4
  • 5. 로봇 소프트웨어 플랫폼이 가져올 미래  하드웨어 플랫폼과의 소프트웨어 플랫폼간의 인터페이스 확립  모듈형 하드웨어 플랫폼 확산  하드웨어에 대한 지식이 없어도 응용 프로그램 작성 가능 (있다면 더 좋고 )  더 많은 소프트웨어 인력들이 로보틱스 분야로 진입, 로봇 제품에 참여 가능  유저에게 제공할 서비스에 집중  서비스 제공으로 유저계층 형성 및 피드백  로봇 개발이 급속도로 발전 할 수 있는 계기 5
  • 6. 주요 로봇 운영체제 6http:// ros.org kr.forwallpaper.com http://www.softbank.jp/en/corp/group/sbr/ http://www.opros.or.kr/ http://www.openrtm.org/ http://schools-wikipedia.org/ Galapagos Closed source Open source
  • 7. Index I. 로봇 소프트웨어 플랫폼의 필요성 II. 로봇 운영체제 ROS 소개 III. 로봇 운영체제 ROS 개념 IV. 로봇 운영체제 ROS 특징과 활용 7
  • 8. ROS의 진정한 목적 8 로보틱스 소프트웨어 개발을 전세계 레벨에서 공동 작업 가능하도록 환경을 구축하는 것! http://imgfave.com/
  • 9. 소프트웨어 프레임워크  로봇 소프트웨어를 개발하기 위한 소프트웨어 프레임워크  개발 도구, 라이브러리, 드라이버, 다양한 로봇 소프트웨어 공개 패키지 제공  하드웨어 플랫폼의 하드웨어 추상화  이 기종 하드웨어에서 사용 가능한 메시지 기능  로보틱스 생태계 생성! 9http://www.ros.org/about-ros/
  • 10. 메타운영체제(Meta-Operating System) 10 iOS 디바이스 드라이버, 라이브러리, 디버그 도구, 메시지 통신 구동 도구, 컴파일 도구, 인스톨러, 패키지 생성 및 릴리즈 메타 운영체제
  • 11. 현재의 ROS 생태계 11  5,000이상의 패키지  2,188개의 공식 패키지 제공 (July 2015)  71,663 다운로드 (Unique IP, July 2015)  16,043 Wiki페이지 (July 2015)  애플리케이션 fetch beer, elevator …  시뮬레이터 gazebo, player/stage, STDR Simulator …  지능모듈 navigation, action, grasping …  라이브러리 tf, PCL, OpenCV, OpenRave …  디바이스드라이버 camera_drivers, urg_node …  디버그 툴 rviz, rqt_graph, rosbag, rostopic …  메시지통신 rosmaster, rosmsg, rosservice …  실행 툴 rosrun, roslaunch …  컴파일 툴 catkin_make, rosbuild …  파일시스템 roscd, rosls …  설치 툴 rosinstall …  프로그래밍언어 C++, Python, Lisp, Java, Ruby, MATLAB등  90종류 이상의 로봇, 80종류 이상의 센서 지원 APP ROS ROBOT, SENSOR 개발자, 유저 로봇, 센서 회사
  • 12. Index I. 로봇 소프트웨어 플랫폼의 필요성 II. 로봇 운영체제 ROS 소개 III. 로봇 운영체제 ROS 개념 IV. 로봇 운영체제 ROS 특징과 활용 12
  • 13. ROS 용어  Node  최소 단위의 실행 가능한 프로세서를 가리키는 용어로써 하나의 실행 가능한 프 로그램으로 생각하면 된다. ROS 에서는 최소한의 실행단위로 프로그램을 나누 어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다.  Package  하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것. 또한, 패키지의 묶 음을 메타패키지라 하여 따로 분리한다.  Message  메시지를 통해 노드간의 데이터를 주고받게 된다. 메시지는 integer, floating point, boolean 와 같은 변수형태이다. 또한, 메시지 안에 메시지를 품고 있는 간 단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다. 13
  • 14. ROS 용어 14 Topic, Publisher, Subscriber http://www.dreamstime.com/illustration/people-talk-listen-tin-can-phone-communication.html 퍼블리셔 서브스크라이버 Topic Publisher Subscriber Topic 엔코더 SLAM(위치정보 X, Y, θ) Publisher Subscriber Topic 거리센서 로봇A (장애물 X, Y) Subscriber 로봇B 하나의 Topic 에 대해 복수의 퍼블리셔, 복수의 서브스크라이버도 가능함
  • 15. ROS 용어 15 Service, Service server, Service client http://www.dreamstime.com/illustration/people-talk-listen-tin-can-phone-communication.html 서버 클라이언트 서비스 응답 서버 클라이언트 서비스 요청 어이~ 서버! 지금 몇 시야? 지금 몇 시냐고? 알아볼게~ 지금 12:00시야!
  • 16. ROS 개념 정리 • turtlesim 패키지  roscore  rosrun turtlesim turtlesim_node  rosrun turtlesim turtle_teleop_key  rosrun rqt_graph rqt_graph 16
  • 17. ROS 개념 정리 • 예제! turtlesim 17 roscore http://192.168.4.100:50051 turtlesim_node 노드 정보 구독 http://192.168.4.100:45704 turtle_teleop_key 노드 정보 발행 메시지 전송 /turtle1/cmd_vel 퍼블리셔 노드 정보: /teleop_turtle, /turtle1/cmd_vel, geomety_msgs/Twist, http://192.168.4.100:45704 퍼블리셔 노드 정보: /teleop_turtle, /turtle1/cmd_vel, geomety_msgs/Twist, http://192.168.4.100:45704 서브스크라이버 노드 정보: /turtlesim, /turtle1/cmd_vel, geomety_msgs/Twist, http://192.168.4.100:50051 마스터 http://192.168.4.100:11311 노드 정보 관리 ← ↑↓ → ④ ① ② ③
  • 18. Index I. 로봇 소프트웨어 플랫폼의 필요성 II. 로봇 운영체제 ROS 소개 III. 로봇 운영체제 ROS 개념 IV. 로봇 운영체제 ROS 특징과 활용 18
  • 19. Index I. 로봇 소프트웨어 플랫폼의 필요성 II. 로봇 운영체제 ROS 소개 III. 로봇 운영체제 ROS 개념 IV. 로봇 운영체제 ROS 특징과 활용 → 통신 인프라 / 로봇 관련 기능 / 다양한 개발 도구 → 활용 예제 19
  • 20. 특징 1) 통신 인프라  노드 간 통신을 제공  통상적 미들웨어로 지칭되는 메시지 전달 인터페이스  메시지 파싱 기능 • 로봇 개발 시에 빈번히 사용되는 통신 시스템 제공 • 캡슐화 및 코드 재사용을 촉진하는 노드들 간의 메시지 전달 인터페이스  메시지의 기록 및 재생 • 노드 간 송/수신되는 데이터인 메시지를 저장하고 필요시에 재사용 가능 • 저장된 메시지를 기반으로 반복적인 실험 가능, 알고리즘 개발에 용이함 • 개발 노력을 절감, 시스템의 유연성과 모듈화를 촉진하는 강력한 디자인 패턴  원격 프로시저 호출 • 노드 간의 동기식 요청/응답 상호 작용 가능  분산 매개 변수 시스템 • 시스템에서 사용되는 변수를 글로벌 키를 작성하여 공유, 수정하여 실시간으로 반영 20
  • 21. 특징 2) 로봇 관련 다양한 기능  로봇에 대한 표준 메시지 정의  카메라, IMU, 레이저 등의 센서 / 오도메트리, 경로 및 지도 등의 내비게이션 데이터 등의 표준 메시지를 정의하여 모듈화, 협업 작업을 유도, 효율성 향상  로봇 기하학 라이브러리  로봇, 센서 등의 상대적 좌표를 트리화 시키는 TF 제공  로봇 기술 언어  로봇의 물리적 특성을 설명하는 XML 문서 기술  진단 시스템  로봇의 상태를 한눈에 파악할 수 있는 진단 시스템 제공  센싱/인식  센서 드라이버, 센싱/인식 레벨의 라이브러리 제공  내비게이션  로봇에서 많이 사용되는 로봇의 포즈(위치/자세) 추정, 지도내의 자기 위치 추정 및 지도 작성에 필요한 SLAM, 작 성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리를 제공  매니퓰레이션  로봇 암에 사용되는 IK, FK 는 물론 응용단의 Pick and Place 를 지원하는 다양한 Manipulation 라이브러리 제공, GUI 형태의 매니퓰레이션 Tools 제공(MoveIt!) 21
  • 22. 특징 3) 다양한 개발 도구  로봇 개발에 필요한 다양한 개발 도구를 제공  로봇 개발의 효율성 향상  Command-Line Tools • GUI 없이 ROS에서 제공되는 명령어로만 로봇 억세스 및 거의 모든 ROS 기능 소화  RViz • 강력한 3D 시각화툴 제공 • 레이저, 카메라 등의 센서 데이터를 시각화 • 로봇 외형과 계획된 동작을 표현  RQT • 그래픽 인터페이스 개발을 위한 Qt 기반 프레임 워크 제공 • 노드와 그들 사이의 연결 정보 표시(rqt_graph) • 인코더, 전압, 또는 시간이 지남에 따라 변화하는 숫자를 플로팅(rqt_plot) • 데이터를 메시지 형태로 기록하고 재생(rqt_bag) 22http://www.ros.org/core-components/
  • 23. 아래의 Command-Line Tools 는 ROS 강의 전반에 걸쳐서 지속적으로 사용됩니다. rospack, roscd, rospd, rosls, rosed, roscp, rosdep, roswf, catkin_create_pkg, wstool, catkin_make, roscore, rosrun, roslaunch, rosnode, rostopic, rosservice, rosparam, rosmsg, rossrv, rosbag, tf_echo 배부한 ROS Cheatsheet 를 참고해주시구요. 이 부분은 생략! https://github.com/oroca/oroca_ros_tutorials/raw/master/ROScheatsheet_indigo_catkin.pdf Command-Line Tools
  • 24. RViz (ROS Visualization Tool) • ROS의 3D 시각화툴 • 센서 데이터의 시각화 • 레이저 레인지 파인더(LRF)센서의 거리 데이터 • Kinect, Xtion, RealSense 등의 Depth Camera의 포인트 클라우드 데이터 • 카메라의 영상 데이터 • IMU 센서의 관성 데이터 등.. • 로봇 외형의 표시와 계획된 동작을 표현 • URDF(Unified Robot Description Format) • 내비게이션 • 매니퓰레이션 • 원격 제어
  • 25. Rviz의 사용예 #1 • Kinect의 Point Cloud Data 25 https://youtu.be/OqOkpZBOpxY
  • 26. Rviz의 사용예 #2 • LRF의 거리 값 26 https://youtu.be/qtoAJ1wzB6s
  • 27. Rviz의 사용예 #3 • LEGO Mindstorm 의 초음파 센서 27https://youtu.be/6afrMnEmXFI
  • 28. Rviz의 사용예 #4 • IMU센서의 관성 값 28 https://youtu.be/j5v5fKppcQo
  • 29. Rviz의 사용예 #5 • RealSense의 Point Cloud와 Color, Depth 영상 29https://youtu.be/Jf4kgPEzY4s
  • 30. Rviz의 사용예 #6 • 사람의 골격과 지시 방향 표시 30https://youtu.be/ath8uNv9c_Q
  • 31. Rviz의 사용예 #7 • 로봇 및 환경 모델, 경로까지 31https://youtu.be/9lbuLAD1c_4
  • 32. Rviz의 사용예 #8 • 지도 표시, 내비게이션, 목적지 지정 32https://youtu.be/xCRsszVAP1E
  • 33. Rviz의 사용예 #9 • 인터렉티브 마커를 이용한 IK 목표 위치 지정 및 경로 표시 33https://youtu.be/5rMv3ZDyFwQ
  • 34. Rviz의 사용예 #10 • 재난구조로봇의 경우 (2015 DARPA Robotics Challenge) 34https://www.youtube.com/user/DARPAtv
  • 35. RViz를 이용하면 센서 및 로봇 관련 데이터 시각화가 간단! 35
  • 36. Rviz 실습은 다음주에… ‘LRF, IMU, USB Camera, Depth Camera, Robot Model 을 Rviz를 통해 확인해보자.’
  • 37. RQT: 플러그인 방식의 ROS의 종합 GUI 툴 • ROS Fuerte 버전부터는 rqt 라는 이름으로 기존의 rxbag, rxplot, rxgraph 등이 통폐합되어 rqt_bag, rqt_plot, rqt_graph 등을 플러그인으로 하는 ROS의 종합 GUI 툴로써 사용 가능해졌다. • rqt는 Qt로 개발되어 있기 때문에 유저들이 자유롭게 플러그인을 개발하여 추가할 수도 있다. • rqt의 대표적인 플러그인인 rqt_image_view, rqt_graph, rqt_plot, rqt_bag에 대해서 알아보도 록 하자. • 참고로, 그 이외에도 • rqt_action, rqt_gui, rqt_plot, rqt_runtime_monitorrqt_bag, rqt_gui_cpp, rqt_pose_view, rqt_rvizrqt_bag_plugins, rqt_gui_py, rqt_publisher, rqt_service_callerrqt_capabilities, rqt_image_view, rqt_py_common, rqt_shellrqt_console, rqt_launch, rqt_py_console, rqt_srvrqt_controller_manager, rqt_logger_level, rqt_reconfigure, rqt_tf_treerqt_dep, rqt_moveit, rqt_robot_dashboard, rqt_toprqt_ez_publisher, rqt_msg, rqt_robot_monitor, rqt_topicrqt_graph, rqt_nav_view, rqt_robot_steering, rqt_web • 등의 플러그인이 존재한다. (헐 ㅡㅡ;;)
  • 38. $ sudo apt-get install ros-indigo-rqt ros-indigo-rqt-common-plugins $ rqt RQT 설치 및 실행 • RQT 설치 • RQT 실행
  • 39. RQT 플러그인 #1 1. 액션 (Action) • Action Type Browser | Action 타입의 데이터 구조를 확인 2. 구성 (Configuration) • Dynamic Reconfigure | 노드들에서 제공하는 설정값 변경을 위한 GUI 설정값 변경 • Launch | roslaunch 의 GUI 버전 3. 내성 (Introspection) • Node Graph | 구동중인 노드들의 관계도 및 메시지의 흐름을 확인 가능한 그래프 뷰 • Package Graph | 노드의 의존 관계를 표시하는 그래프 뷰 • Process Monitor | 실행중인 노드들의 CPU사용률, 메모리사용륭, 스레드수 등을 확인 4. 로깅 (Logging) • Bag | ROS 데이터 로깅 • Console | 노드들에서 발생되는 경고(Warning), 에러(Error) 등의 메시지를 확인 • Logger Level | ROS의 Debug, Info, Warn, Error, Fatal 로거 정보를 선택하여 표시 39
  • 40. RQT 플러그인 #2 5. 다양한 툴 (Miscellaneous Tools) • Python Console | 파이썬 콘솔 화면 • Shell | 쉘(shell)을 구동 • Web | 웹 브라우저를 구동 6. 로봇 (Robot) • 사용하는 로봇에 따라 계기판(dashboard) 등의 플러그인을 이곳에 추가 7. 로봇툴 (Robot Tools) • Controller Manager | 컨트롤러 제어에 필요한 플로그인 • Diagnostic Viewer | 로봇 디바이스 및 에러 확인 • Moveit! Monitor | 로봇 팔 계획에 사용되는 Moveit! 데이터를 확인 • Robot Steering | 로봇 조정 GUI 툴, 원격 조정에서 이 GUI 툴을 이용하여 로봇 조종 • Runtime Monitor | 실시간으로 노드들에서 발생되는 에러 및 경고를 확인 40
  • 41. RQT 플러그인 #3 8. 서비스 (Services) • Service Caller | 구동중인 서비스 서버에 접속하여 서비스를 요청 • Service Type Browser | 서비스 타입의 데이터 구조를 확인 9. 토픽 (Topics) • Easy Message Publisher | 토픽을 GUI 환경에서 발행 • Topic Publisher | 토픽을 생성하여 발행 • Topic Type Browser | 토픽 타입의 데이터 구조 확인 • Topic Monitor | 사용자가 선택한 토픽의 정보를 확인 10. 시각화 (Visualization) • Image View | 카메라의 영상 데이터를 확인 • Navigation Viewer | 로봇 네비게이션의 위치 및 목표지점 확인 • Plot | 2차원 데이터 플롯 GUI 플러그인, 2차원 데이터의 도식화 • Pose View | 현재 TF의 위치 및 모델의 위치 표시 • RViz | 3차원 시각화 툴인 RViz 플러그인 • TF Tree | tf 관계를 트리로 나타내는 그래프 뷰 41
  • 43. RQT를 이용하면 1. GUI 형태로 ROS 이용 가능 2. GUI Tool 제작이 간단! 43
  • 45. ROS 활용의 예시  OpenCV, PCL, Machine Learning, Sensing, IoT 등 로봇 이외에도 범용적으로 사용 가능한 소프 트웨어 프레임워크를 가지고 있음  rosbag 는 모든 데이터에 대해서 녹음이 가능하여, 언제든지 재 실험이 가능하다.  재실험 없이 기존 데이터를 기반으로 한 알고리즘 개발에 용이 45http://www.ros.org/core-components/
  • 46. ROS 활용의 예시 • 3차원 모델링, 시뮬레이션, 플래닝 46
  • 47. ROS 활용의 예시  센서 정보 취득  센서 정보 시각화 47
  • 48. ROS 활용의 예시  내비게이션 & 매니퓰레이션  로봇 모델 기술, 시뮬레이션 부터 실제 하드웨어를 기반으로 한 로봇 실험 가능 48
  • 49. ROS 활용의 예시 • ROS 8 Year Montage 49https://vimeo.com/146183080
  • 51. “hello world!” 2016. 04. 14 Yoonseok Pyo Open Source Team 51
  • 52. Index I. 무조건 따라하기 “hello world!” II. ROS 파일 시스템 III. ROS 빌드 시스템 52
  • 53. Index I. 무조건 따라하기 “hello world!” II. ROS 파일 시스템 III. ROS 빌드 시스템 53
  • 54. 무조건 따라하기 “hello world!” • ROS판 “hello world!” 작성 • 메시지 통신 중 토픽을 이용하는 퍼블리셔 노드 작성 • 1) 패키지 생성 • 사용자가 패키지를 작성할 때 캐킨 빌드 시스템에 꼭 필요한 CMakeLists.txt 와 package.xml을 포함한 패키지 폴더를 생성한다. 54 $ catkin_create_pkg [패키지이름] [의존하는패키지1] [의존하는패키지n] $ cd ~/catkin_ws/src $ catkin_create_pkg my_first_ros_pkg std_msgs roscpp $ cd ~/catkin_ws/src/my_first_ros_pkg
  • 55. 무조건 따라하기 “hello world!” 55 • 2) 패키지 설정 파일(package.xml) 수정 • 패키지 이름, 저작자, 라이선스, 의존성 패키지 등의 패키지 관련 정보 $ cd ~/catkin_ws/src/my_first_ros_pkg $ gedit ./package.xml <?xml version="1.0"?> <package> <name>my_first_ros_pkg</name> <version>0.0.1</version> <description>The my_first_ros_pkg package</description> <maintainer email="pyo@robotis.com">Yoonseok Pyo</maintainer> <license>BSD</license> <url type="website">http://robotis.com</url> <url type="repository">https://github.com/oroca/oroca_ros_tutorials.git</url> <author email="pyo@robotis.com">Yoonseok Pyo</author> <buildtool_depend>catkin</buildtool_depend> <build_depend>std_msgs</build_depend> <build_depend>roscpp</build_depend> <run_depend>std_msgs</run_depend> <run_depend>roscpp</run_depend> <export></export> </package>
  • 56. 무조건 따라하기 “hello world!” 56 • 3) 빌드 설정 파일(CMakeLists.txt) 수정 • 실행 파일 생성, 의존성 패키지 우선 빌드, 링크 생성 등의 빌드 환경 정보 $ cd ~/catkin_ws/src/my_first_ros_pkg $ gedit ./CMakeLists.txt cmake_minimum_required(VERSION 2.8.3) project(my_first_ros_pkg) find_package(catkin REQUIRED COMPONENTS roscpp std_msgs) catkin_package( INCLUDE_DIRS include CATKIN_DEPENDS roscpp std_msgs DEPENDS system_lib ) include_directories(${catkin_INCLUDE_DIRS}) add_executable(hello_world_node src/hello_world_node.cpp) add_dependencies(hello_world_node my_first_ros_pkg_generate_messages_cpp) target_link_libraries(hello_world_node ${catkin_LIBRARIES})
  • 57. 무조건 따라하기 “hello world!” 57 • 4) 소스 코드 작성 $ cd ~/catkin_ws/src/my_first_ros_pkg/src $ gedit ./hello_world_node.cpp #include <ros/ros.h> #include <std_msgs/String.h> #include <sstream> int main(int argc, char **argv) { ros::init(argc, argv, "hello_world_node"); ros::NodeHandle nh; ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("say_hello_world", 1000); ros::Rate loop_rate(10); int count = 0;
  • 58. 무조건 따라하기 “hello world!” 58 while (ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "hello world!" << count; msg.data = ss.str(); ROS_INFO("%s", msg.data.c_str()); chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
  • 59. 무조건 따라하기 “hello world!” 59 • 5) 패키지 빌드 • 6) roscore 실행 • 7) 노드 실행 $ rospack profile $ cd ~/catkin_ws $ catkin_make (혹은 다음과 같이 함께 사용하여 1라인으로 처리) $ cd ~/catkin_ws && catkin_make $ roscore (이미 실행되어 있다면 생략) $ rosrun my_first_ros_pkg hello_world_node [INFO] [1423443540.131775283]: hello world! 0 [INFO] [1423443540.231826916]: hello world! 1 [INFO] [1423443540.331798085]: hello world! 2 [INFO] [1423443540.431796634]: hello world! 3 …
  • 60. 무조건 따라하기 “hello world!” • rqt_graph • rostopic 60 $ rosrun rqt_graph rqt_graph $ rostopic list /rosout /rosout_agg /say_hello_world $ rostopic info /say_hello_world Type: std_msgs/String Publishers: * /hello_world_node (http://localhost:51083/) Subscribers: None $ rostopic hz /say_hello_world subscribed to [/say_hello_world] average rate: 9.999 min: 0.100s max: 0.100s std dev: 0.00001s window: 10
  • 61. 무조건 따라하기 “hello world!” • rqt_topic • 송/수신 테스트 61 $ rosrun rqt_topic rqt_topic $ rostopic echo /say_hello_world data: hello world!109 --- data: hello world!110 --- data: hello world!111 --- … $ rosrun rqt_graph rqt_graph ctrl + c
  • 62. Index I. 무조건 따라하기 “hello world!” II. ROS 파일 시스템 III. ROS 빌드 시스템 62
  • 63. ROS 파일 시스템 1. ROS 설치 폴더 • /opt/ros/[버전이름] • /opt/ros/indigo (ROS indigo 버전의 경우) 2. 사용자 작업 폴더 • ~/catkin_ws/ (‘~/’은 리눅스에서 ‘/home/사용자명'에 해당하는 폴더) • /home/oroca/catkin_ws/ (사용자명이 oroca의 경우, 사용자 작업 폴더명을 catkin_ws라고 지정한 경우) 3. 사용자 패키지 폴더 • /home/oroca/catkin_ws/src • 사용자 작업 폴더내의 하나의 패키지 • 0(?)개 이상의 노드로 구성됨 63
  • 64. ROS 파일 시스템 1. ROS 설치 폴더(/opt/ros/indigo) • /bin 실행 가능한 바이너리 파일 • /etc ROS 및 catkin 관련 설정 파일 • /include 헤더 파일 • /lib 라이브러리 파일 • /share ROS 패키지 • env.* 환경 설정 파일 • setup.* 환경 설정 파일 64
  • 65. ROS 파일 시스템 2. 사용자 작업 폴더(/home/oroca/catkin_ws/) • /build 빌드 관련 파일 • /devel msg, srv 헤더 파일과 사용자 패키지 라이브러리, 실행 파일 • /src 사용자 패키지 폴더 65
  • 66. ROS 파일 시스템 3. 사용자 패키지 폴더 (/home/oroca/catkin_ws/src) • /include 헤더파일 • /launch roslaunch에 사용되는 launch 파일 • /node rospy용 스크립트 • /msg 메시지 파일 • /src 코드 소스 파일 • /srv 서비스 파일 • CMakeLists.txt 빌드 설정 파일 • package.xml 패키지 설정 파일 66
  • 67. Index I. 무조건 따라하기 “hello world!” II. ROS 파일 시스템 III. ROS 빌드 시스템 67
  • 68. ROS 빌드 시스템 • CMake(Cross Platform Make)를 이용 • 빌드 환경은 패키지 폴더의 CMakeLists.txt 파일에 기술 • ROS 개발 환경에 맞도록 Cmake의 기능을 추가하여 ROS에 특화시 킨 캐킨(catkin) 빌드 시스템을 제공 • 캐킨 빌드 시스템은 ROS와 관련된 빌드, 패키지 관리, 패키지 간 의존관계 등을 편리하게 사용할 수 있도록 하고 있다. • ROS 패키지 설정 내용은 package.xml에 기재하고 있다. 68
  • 69. 패키지 설정 파일(package.xml) • <?xml> 문서 문법을 정의하는 문구로 아래의 내용은 xml 버전 1.0을 따르고 있다는 것을 알린다. • <package> 이 구문부터 </package>까지가 ROS 패키지 설정 부분이다. • <name> 패키지의 이름이다. 패키지를 생성할 때 입력한 패키지 이름이 사용된다. 다른 옵션도 마찬가지지만 이는 사용 자가 원할 때 언제든지 변경할 수 있다. • <version> 패키지의 버전이다. 자유롭게 지정할 수 있다. • <description> 패키지의 간단한 설명이다. • <maintainer> 패키지 관리자의 연락처를 기재한다. • <license> 라이선스를 기재한다. BSD, MIT, GPLv3, LGPLv3 등을 기재하면 된다. • <url> 패키지를 설명하는 웹 페이지 또는 버그 관리, 저장소 등의 주소를 기재한다. 이 종류에 따라 type에 website, bugtracker, repository를 대입하면 된다. • <author> 패키지 개발에 참여한 개발자를 적는다. 복수의 개발자가 참여한 경우에는 바로 다음 줄에 <author> 태그를 이용하여 추가로 넣어주면 된다. • <buildtool_depend> 빌드 시스템의 의존성을 기술한다. 캐킨 빌드 시스템을 이용하고 있으므로 catkin을 입력한다. • <build_depend> 패키지를 빌드할 때 의존하는 패키지 이름을 적는다. • <run_depend> 패키지를 실행할 때 의존하는 패키지 이름을 적는다. • <test_depend> 패키지를 테스트할 때 의존하는 패키지 이름을 적는다. • <export> ROS에서 명시하지 않은 태그명을 사용할 때 쓰인다. 일반적인 경우 쓸 일이 없다. • <metapackage> export 태그 안에서 사용하는 공식적인 태그로 현재의 패키지가 메타 패키지이면 이를 선언한다. 69
  • 70. 빌드 설정 파일(CMakeLists.txt) • cmake_minimum_required(VERSION 2.8.3) • 운영체제에 설치된 cmake의 최소 요구 버전 • project(my_first_ros_pkg) • 패키지의 이름 (package.xml에서 입력한 패키지 이름을 그대로 사용하자.) • find_package(catkin REQUIRED COMPONENTS roscpp std_msgs) • 캐킨 빌드를 할 때 요구되는 구성요소 패키지 • find_package(Boost REQUIRED COMPONENTS system) • ROS 이외의 패키지가 요구될 때 명시하는 방법 • catkin_python_setup() • 파이썬을 사용할 때 설정하는 옵션이다. 파이썬 설치 프로세스인 setup.py를 부르는 역할을 한다. 70
  • 71. 빌드 설정 파일(CMakeLists.txt) • add_message_files(FILES Message1.msg Message2.msg) • 노드에서 사용하는 메시지 파일을 추가하는 옵션 (msg 폴더의 .msg 파일) • add_service_files(FILES Service1.srv Service2.srv) • 노드에서 사용하는 서비스 파일을 추가하는 옵션 (srv 폴더의 .srv 파일) • generate_messages(DEPENDENCIES std_msgs) • 의존하는 메시지를 설정하는 옵션 • catkin_package( INCLUDE_DIRS include → 해당 폴더의 헤더 파일을 사용 LIBRARIES my_first_ros_pkg → 해당 패키지의 라이브러리를 사용 CATKIN_DEPENDS roscpp std_msgs → 의존하는 ROS 패키지를 설정 DEPENDS system_lib → 의존하는 시스템 라이브러리를 설정 ) • 캐킨 빌드 옵션 71
  • 72. 빌드 설정 파일(CMakeLists.txt) • include_directories(${catkin_INCLUDE_DIRS}) • 인클루드 폴더를 지정 • add_library(my_first_ros_pkg src/${PROJECT_NAME}/my_first_ros_pkg.cpp) • 빌드 후 생성할 라이브러리를 지정 • add_executable(my_first_ros_pkg_node src/my_first_ros_pkg_node.cpp) • 소스 코드 파일 지정, 빌드 후 생성할 실행 파일명을 지정 • add_dependencies(my_first_ros_pkg_node my_first_ros_pkg_generate_messages_cpp) • 패키지를 빌드하기에 앞서 생성해야 할 메시지 헤더 파일이 있으면 빌드 전에 우선 으로 메시지를 생성하라는 설정 • target_link_libraries(my_first_ros_pkg_node ${catkin_LIBRARIES}) • my_first_ros_pkg_node를 생성하기에 앞서 링크해야 하는 라이브러리와 실행 파일 을 링크해주는 옵션 72
  • 73. ROS 로봇 프로그래밍 을 위한 선수 학습 완료! 다음 주에는 퍼블리셔, 서브스크라이버, 서비스 서버, 서비스 클라이언트 작성에 들어갑니다. 73
  • 75. 국내 유일! 최초! ROS 책 비 영어권 최고의 책 인세 전액 기부 여기서! 광고 하나 나가요~
  • 76. 여기서! 광고 둘 나가요~ • 오로카 • www.oroca.org • 오픈 로보틱스 지향 • 풀뿌리 로봇공학의 저변 활성화 • 열린 강좌, 세미나, 프로젝트 진행 • 로봇공학을 위한 열린 모임 (KOS-ROBOT) • www.facebook.com/groups/KoreanRobotics • 로봇공학 통합 커뮤니티 지향 • 일반인과 전문가가 어울러지는 한마당 • 로봇공학 소식 공유 • 연구자 간의 협력 혼자 하기에 답답하시다고요? 커뮤니티에서 함께 해요~
  • 78. Thanks for your attention! 표윤석 78 Yoonseok Pyo pyo@robotis.com www.robotpilot.net 표윤석 www.facebook.com/yoonseok.pyo