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

78
로봇 운영체제 ROS 개론 2016. 04. 14 Yoonseok Pyo Open Source Team 1

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

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

로봇 운영체제 ROS 개론

2016. 04. 14

Yoonseok Pyo

Open Source Team

1

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

Index

I. 로봇 소프트웨어 플랫폼의 필요성

II. 로봇 운영체제 ROS 소개

III. 로봇 운영체제 ROS 개념

IV. 로봇 운영체제 ROS 특징과 활용

2

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

Index

I. 로봇 소프트웨어 플랫폼의 필요성

II. 로봇 운영체제 ROS 소개

III. 로봇 운영체제 ROS 개념

IV. 로봇 운영체제 ROS 특징과 활용

3

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

4

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

로봇 소프트웨어 플랫폼이 가져올 미래 하드웨어 플랫폼과의 소프트웨어 플랫폼간의 인터페이스 확립

모듈형 하드웨어 플랫폼 확산

하드웨어에 대한 지식이 없어도 응용 프로그램 작성 가능 (있다면 더 좋고 )

더 많은 소프트웨어 인력들이 로보틱스 분야로 진입, 로봇 제품에 참여 가능

유저에게 제공할 서비스에 집중

서비스 제공으로 유저계층 형성 및 피드백

로봇 개발이 급속도로 발전 할 수 있는 계기

5

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

주요 로봇 운영체제

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 sourceOpen source

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

Index

I. 로봇 소프트웨어 플랫폼의 필요성

II. 로봇 운영체제 ROS 소개

III. 로봇 운영체제 ROS 개념

IV. 로봇 운영체제 ROS 특징과 활용

7

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

ROS의 진정한 목적

8

로보틱스 소프트웨어 개발을 전세계 레벨에서공동 작업 가능하도록 환경을 구축하는 것!

http://imgfave.com/

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

소프트웨어 프레임워크

로봇 소프트웨어를 개발하기 위한 소프트웨어 프레임워크

개발 도구, 라이브러리, 드라이버, 다양한 로봇 소프트웨어 공개 패키지 제공

하드웨어 플랫폼의 하드웨어 추상화

이 기종 하드웨어에서 사용 가능한 메시지 기능

로보틱스 생태계 생성!

9http://www.ros.org/about-ros/

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

메타운영체제(Meta-Operating System)

10

iOS

디바이스 드라이버, 라이브러리, 디버그 도구, 메시지 통신구동 도구, 컴파일 도구, 인스톨러, 패키지 생성 및 릴리즈

메타 운영체제

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

현재의 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

개발자, 유저

로봇, 센서 회사

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

Index

I. 로봇 소프트웨어 플랫폼의 필요성

II. 로봇 운영체제 ROS 소개

III. 로봇 운영체제 ROS 개념

IV. 로봇 운영체제 ROS 특징과 활용

12

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

ROS 용어

Node

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

Package

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

Message

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

13

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

ROS 용어

14

Topic, Publisher, Subscriber

http://www.dreamstime.com/illustration/people-talk-listen-tin-can-phone-communication.html

퍼블리셔 서브스크라이버

TopicPublisher Subscriber

Topic

엔코더 SLAM(위치정보 X, Y, θ)

Publisher

Subscriber

Topic

거리센서

로봇A

(장애물 X, Y)Subscriber

로봇B하나의 Topic 에 대해

복수의 퍼블리셔, 복수의 서브스크라이버도 가능함

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

ROS 용어

15

Service, Service server, Service client

http://www.dreamstime.com/illustration/people-talk-listen-tin-can-phone-communication.html

서버 클라이언트

서비스 응답

서버 클라이언트

서비스 요청

어이~ 서버!지금 몇 시야?

지금 몇 시냐고?알아볼게~지금 12:00시야!

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

ROS 개념 정리

• turtlesim 패키지

roscore

rosrun turtlesim turtlesim_node

rosrun turtlesim turtle_teleop_key

rosrun rqt_graph rqt_graph

16

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

ROS 개념 정리

• 예제! turtlesim

17

roscore

http://192.168.4.100:50051turtlesim_node 노드

정보 구독

http://192.168.4.100:45704turtle_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노드 정보 관리

← ↑↓ →

①②

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

Index

I. 로봇 소프트웨어 플랫폼의 필요성

II. 로봇 운영체제 ROS 소개

III. 로봇 운영체제 ROS 개념

IV. 로봇 운영체제 ROS 특징과 활용

18

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

Index

I. 로봇 소프트웨어 플랫폼의 필요성

II. 로봇 운영체제 ROS 소개

III. 로봇 운영체제 ROS 개념

IV. 로봇 운영체제 ROS 특징과 활용

→ 통신 인프라 / 로봇 관련 기능 / 다양한 개발 도구

→ 활용 예제

19

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

특징 1) 통신 인프라 노드 간 통신을 제공

통상적 미들웨어로 지칭되는 메시지 전달 인터페이스

메시지 파싱 기능• 로봇 개발 시에 빈번히 사용되는 통신 시스템 제공• 캡슐화 및 코드 재사용을 촉진하는 노드들 간의 메시지 전달 인터페이스

메시지의 기록 및 재생• 노드 간 송/수신되는 데이터인 메시지를 저장하고 필요시에 재사용 가능

• 저장된 메시지를 기반으로 반복적인 실험 가능, 알고리즘 개발에 용이함• 개발 노력을 절감, 시스템의 유연성과 모듈화를 촉진하는 강력한 디자인 패턴

원격 프로시저 호출• 노드 간의 동기식 요청/응답 상호 작용 가능

분산 매개 변수 시스템• 시스템에서 사용되는 변수를 글로벌 키를 작성하여 공유, 수정하여 실시간으로 반영

20

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

특징 2) 로봇 관련 다양한 기능 로봇에 대한 표준 메시지 정의

카메라, IMU, 레이저 등의 센서 / 오도메트리, 경로 및 지도 등의 내비게이션 데이터 등의 표준 메시지를 정의하여모듈화, 협업 작업을 유도, 효율성 향상

로봇 기하학 라이브러리 로봇, 센서 등의 상대적 좌표를 트리화 시키는 TF 제공

로봇 기술 언어 로봇의 물리적 특성을 설명하는 XML 문서 기술

진단 시스템 로봇의 상태를 한눈에 파악할 수 있는 진단 시스템 제공

센싱/인식 센서 드라이버, 센싱/인식 레벨의 라이브러리 제공

내비게이션 로봇에서 많이 사용되는 로봇의 포즈(위치/자세) 추정, 지도내의 자기 위치 추정 및 지도 작성에 필요한 SLAM, 작

성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리를 제공

매니퓰레이션 로봇 암에 사용되는 IK, FK 는 물론 응용단의 Pick and Place 를 지원하는 다양한 Manipulation 라이브러리 제공,

GUI 형태의 매니퓰레이션 Tools 제공(MoveIt!)

21

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

특징 3) 다양한 개발 도구 로봇 개발에 필요한 다양한 개발 도구를 제공

로봇 개발의 효율성 향상

Command-Line Tools• GUI 없이 ROS에서 제공되는 명령어로만 로봇 억세스 및 거의 모든 ROS 기능 소화

RViz• 강력한 3D 시각화툴 제공

• 레이저, 카메라 등의 센서 데이터를 시각화

• 로봇 외형과 계획된 동작을 표현

RQT• 그래픽 인터페이스 개발을 위한 Qt 기반 프레임 워크 제공

• 노드와 그들 사이의 연결 정보 표시(rqt_graph)

• 인코더, 전압, 또는 시간이 지남에 따라 변화하는 숫자를 플로팅(rqt_plot)• 데이터를 메시지 형태로 기록하고 재생(rqt_bag)

22http://www.ros.org/core-components/

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

아래의 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

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

RViz (ROS Visualization Tool)

• ROS의 3D 시각화툴

• 센서 데이터의 시각화

• 레이저 레인지 파인더(LRF)센서의 거리 데이터

• Kinect, Xtion, RealSense 등의 Depth Camera의 포인트 클라우드 데이터

• 카메라의 영상 데이터

• IMU 센서의 관성 데이터 등..

• 로봇 외형의 표시와 계획된 동작을 표현

• URDF(Unified Robot Description Format)

• 내비게이션

• 매니퓰레이션

• 원격 제어

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

Rviz의 사용예 #1

• Kinect의 Point Cloud Data

25https://youtu.be/OqOkpZBOpxY

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

Rviz의 사용예 #2

• LRF의 거리 값

26https://youtu.be/qtoAJ1wzB6s

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

Rviz의 사용예 #3

• LEGO Mindstorm 의 초음파 센서

27https://youtu.be/6afrMnEmXFI

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

Rviz의 사용예 #4

• IMU센서의 관성 값

28https://youtu.be/j5v5fKppcQo

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

Rviz의 사용예 #5

• RealSense의 Point Cloud와 Color, Depth 영상

29https://youtu.be/Jf4kgPEzY4s

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

Rviz의 사용예 #6

• 사람의 골격과 지시 방향 표시

30https://youtu.be/ath8uNv9c_Q

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

Rviz의 사용예 #7

• 로봇 및 환경 모델, 경로까지

31https://youtu.be/9lbuLAD1c_4

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

Rviz의 사용예 #8

• 지도 표시, 내비게이션, 목적지 지정

32https://youtu.be/xCRsszVAP1E

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

Rviz의 사용예 #9

• 인터렉티브 마커를 이용한 IK 목표 위치 지정 및 경로 표시

33https://youtu.be/5rMv3ZDyFwQ

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

Rviz의 사용예 #10

• 재난구조로봇의 경우 (2015 DARPA Robotics Challenge)

34https://www.youtube.com/user/DARPAtv

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

RViz를 이용하면센서 및 로봇 관련

데이터 시각화가 간단!

35

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

Rviz 실습은 다음주에…‘LRF, IMU, USB Camera,

Depth Camera, Robot Model을 Rviz를 통해 확인해보자.’

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

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

• 등의 플러그인이 존재한다. (헐 ㅡㅡ;;)

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

$ sudo apt-get install ros-indigo-rqt ros-indigo-rqt-common-plugins

$ rqt

RQT 설치 및 실행

• RQT 설치

• RQT 실행

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

RQT 플러그인 #11. 액션 (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

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

RQT 플러그인 #25. 다양한 툴 (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

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

RQT 플러그인 #38. 서비스 (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

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

RQT의 사용 예시

42http://www.ros.org/core-components/

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

RQT를 이용하면1. GUI 형태로 ROS 이용 가능2. GUI Tool 제작이 간단!

43

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

44

RQT 실습은 다음주에…rqt_image_view

rqt_graphrqt_plotrqt_bag

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

ROS 활용의 예시

OpenCV, PCL, Machine Learning, Sensing, IoT 등 로봇 이외에도 범용적으로 사용 가능한 소프트웨어 프레임워크를 가지고 있음

rosbag 는 모든 데이터에 대해서 녹음이 가능하여, 언제든지 재 실험이 가능하다.

재실험 없이 기존 데이터를 기반으로 한 알고리즘 개발에 용이

45http://www.ros.org/core-components/

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

ROS 활용의 예시

• 3차원 모델링, 시뮬레이션, 플래닝

46

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

ROS 활용의 예시

센서 정보 취득

센서 정보 시각화

47

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

ROS 활용의 예시

내비게이션 & 매니퓰레이션

로봇 모델 기술, 시뮬레이션 부터실제 하드웨어를 기반으로 한 로봇 실험 가능

48

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

ROS 활용의 예시

• ROS 8 Year Montage

49https://vimeo.com/146183080

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

질문대환영!

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

“hello world!”

2016. 04. 14

Yoonseok Pyo

Open Source Team

51

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

Index

I. 무조건 따라하기 “hello world!”

II. ROS 파일 시스템

III. ROS 빌드 시스템

52

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

Index

I. 무조건 따라하기 “hello world!”

II. ROS 파일 시스템

III. ROS 빌드 시스템

53

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

무조건 따라하기 “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

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

무조건 따라하기 “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="[email protected]">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="[email protected]">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>

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

무조건 따라하기 “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})

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

무조건 따라하기 “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;

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

무조건 따라하기 “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;

}

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

무조건 따라하기 “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

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

무조건 따라하기 “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

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

무조건 따라하기 “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

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

Index

I. 무조건 따라하기 “hello world!”

II. ROS 파일 시스템

III. ROS 빌드 시스템

62

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

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

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

ROS 파일 시스템

1. ROS 설치 폴더(/opt/ros/indigo)• /bin 실행 가능한 바이너리 파일

• /etc ROS 및 catkin 관련 설정 파일

• /include 헤더 파일

• /lib 라이브러리 파일

• /share ROS 패키지

• env.* 환경 설정 파일

• setup.* 환경 설정 파일

64

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

ROS 파일 시스템

2. 사용자 작업 폴더(/home/oroca/catkin_ws/)• /build 빌드 관련 파일

• /devel msg, srv 헤더 파일과 사용자 패키지 라이브러리, 실행 파일

• /src 사용자 패키지 폴더

65

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

ROS 파일 시스템

3. 사용자 패키지 폴더 (/home/oroca/catkin_ws/src)• /include 헤더파일

• /launch roslaunch에 사용되는 launch 파일

• /node rospy용 스크립트

• /msg 메시지 파일

• /src 코드 소스 파일

• /srv 서비스 파일

• CMakeLists.txt 빌드 설정 파일

• package.xml 패키지 설정 파일

66

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

Index

I. 무조건 따라하기 “hello world!”

II. ROS 파일 시스템

III. ROS 빌드 시스템

67

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

ROS 빌드 시스템

• CMake(Cross Platform Make)를 이용

• 빌드 환경은 패키지 폴더의 CMakeLists.txt 파일에 기술

• ROS 개발 환경에 맞도록 Cmake의 기능을 추가하여 ROS에 특화시킨 캐킨(catkin) 빌드 시스템을 제공• 캐킨 빌드 시스템은 ROS와 관련된 빌드, 패키지 관리, 패키지 간 의존관계

등을 편리하게 사용할 수 있도록 하고 있다.

• ROS 패키지 설정 내용은 package.xml에 기재하고 있다.

68

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

패키지 설정 파일(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

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

빌드 설정 파일(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

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

빌드 설정 파일(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

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

빌드 설정 파일(CMakeLists.txt)• include_directories(${catkin_INCLUDE_DIRS})

• 인클루드 폴더를 지정

• add_library(my_first_ros_pkgsrc/${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_nodemy_first_ros_pkg_generate_messages_cpp)• 패키지를 빌드하기에 앞서 생성해야 할 메시지 헤더 파일이 있으면 빌드 전에 우선

으로 메시지를 생성하라는 설정

• target_link_libraries(my_first_ros_pkg_node ${catkin_LIBRARIES})• my_first_ros_pkg_node를 생성하기에 앞서 링크해야 하는 라이브러리와 실행 파일

을 링크해주는 옵션

72

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

ROS 로봇 프로그래밍을 위한 선수 학습 완료!

다음 주에는 퍼블리셔, 서브스크라이버,서비스 서버, 서비스 클라이언트 작성에 들어갑니다.

73

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

질문대환영!

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

국내 유일! 최초! ROS 책비 영어권 최고의 책

인세 전액 기부

여기서! 광고 하나 나가요~

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

여기서! 광고 둘 나가요~

• 오로카• www.oroca.org

• 오픈 로보틱스 지향• 풀뿌리 로봇공학의 저변 활성화• 열린 강좌, 세미나, 프로젝트 진행

• 로봇공학을 위한 열린 모임 (KOS-ROBOT)

• www.facebook.com/groups/KoreanRobotics

• 로봇공학 통합 커뮤니티 지향• 일반인과 전문가가 어울러지는 한마당• 로봇공학 소식 공유• 연구자 간의 협력

혼자 하기에 답답하시다고요?커뮤니티에서 함께 해요~

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

Yoonseok [email protected]

표윤석

www.facebook.com/yoonseok.pyo

또~ 봬요!*^^*

끝.

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

Thanks for your attention!

표윤석

78

Yoonseok [email protected]

표윤석

www.facebook.com/yoonseok.pyo