ROS2 혼자공부하는 로봇SW 직접 만들고 코딩하자 (로봇을 공부하는 사람들의 필독서 ROS2)

ROS2 혼자공부하는 로봇SW 직접 만들고 코딩하자 (로봇을 공부하는 사람들의 필독서 ROS2)

$29.21
Description
이 책은 ROS라는 도구의 존재를 알고 공부하려는 분 중에 아직 공부를 시작하지 않았거나, 이것저것 예제를 돌려봤지만 어떤 것인지 감을 잡지 못한 분들을 대상으로 하고 있습니다. 오랫동안 강의를 해왔던 저의 경험을 바탕으로 이러한 독자들이 쉽게 이해할 수 있게 이야기를 들려주는 것처럼 이 책을 기술했습니다. 이 책이 추구하는 것은 독자들이 빠르게 ROS의 원리와 사용법을 파악해서 하고 싶은 일을 할 수 있도록 하는 것입니다.

이 책 한 권이면 다 된다고 하는 말은 아닙니다. 저자인 제가 독자분들에게 하고자 하는 말은 ‘이렇게 배우면 좀 더 쉽지 않을까요?’라는 것입니다. 수학의 한 분야라면 한 권이면 다 되는책이 중요하겠지만, 전체 인원이 가늠도 안 되는 사람들이 참여해서 다양한 패키지를 공유하는 ROS라는 생태계에 그렇게 접근할 수 있다고 생각하지 않습니다. 또한, 우리에게는 ‘표윤석’ 박사라는 매우 뛰어난 ROS 전도사가 계셔서 그분의 책과 자료를 통해 ROS2의 기본적인 동작 원리 등을 알 수 있습니다. 그래서 저는 제가 수업 때 즐겨 접근하는 방식대로 이 책을 기술했습니다.
▶ 『ROS2 혼자공부하는 로봇SW 직접 만들고 코딩하자』 북트레일러

*출판사의 사정에 따라 서비스가 변경 또는 중지될 수 있습니다.
*window7의 경우 사운드 연결이 없을시, 동영상 재생에 오류가 발생할 수 있습니다. 이어폰, 스피커 등이 연결되어 있는지 확인 하시고 재생하시기 바랍니다.
저자

민형기

민형기 박사는 10년이 훨씬 넘는 기간 동안 로봇과 제어공학, 딥러닝 및 데이터사이언스를 다루는 블로그(pinkwink.kr)를 운영하고 있습니다.
저자는 국내 최초로 식약청 인증을 받은 수술용 로봇의 제어 담당, 국내 최대 규모의 전자제품, 로봇 관련 온라인 쇼핑몰을 운영하던 회사의 연구소장 등을 역임하며 다양한 로봇과 로봇 관련 제품을 경험하고 직접 개발했습니다.
또한, 딥러닝과 데이터 사이언스 관련해서 다양한 프로젝트를 수행하고 이를 교육에 접목시키고 있습니다.
공부하려는 분들이 로봇이나 딥러닝이라는 분야에 보다 쉽게 접근할 수 있는 방법을 항상 고민하고 있습니다.

연혁
현) 주식회사 핑크랩 대표이사
현) 제로베이스 딥러닝/머신러닝 전임 강사
현) 한양대 서울캠퍼스 겸임교수
엔티렉스 연구소장
미래컴퍼니 수술로봇연구소 책임연구원
한양대 에리카 연구교수

수상경력
로봇 유공자부분 산업통상자원부 장관 표창(2019)

목차

ㆍ머리말
ㆍ이 책이 이야기하는 대상 독자
ㆍ들어가며

환경설정
1. 터미널
1.1 화면 분할이 되는 터미널의 필요성
1.2 기본 터미널 사용해보기
1.3 Terminator
1.4 Tilix
2. 편집기
2.1 Sublime Text의 설치
2.2 Sublime Text 사용해보기
3. ROS 설치
3.1 ROS Galactic 버전 설치 페이지 찾기
3.2 Set Locale
3.3 Setup Sources
3.3 Install ROS2 packages
3.4 ROS2 설치 확인하기
4. 마무리

터미널과 bashrc 그리고 리눅스 익숙해지기
1. 이 장의 목적
2. Ubuntu의 폴더 관련 기본 명령
2.1 폴더를 하나 만들어 볼가요 - mkdir
2.2 폴더를 이동해 몰가요 - cd
2.3 삭제 명령 = rm
3. bashrc
3.1 Shell 쉘
3.2 .bashrc
3.3 .bashrc에 명령 입력해 두기
4. .bashrc에서 alias 설정
4.1 alias 설정
4.2 galactic 설정을 alias로 지정하기
4.3 source ~/.bashrc도 alias로 지정하기
5. ROS2 도메일 설정
6. 마무리

ROS2 기본 명령 익히기
1. 이 장의 목적
2. Turtlesim 설치와 실행
3. 다시 강조하는 setup.bash 환경
4. ROS Node
5. ROS Service
5.1 Service의 개념
5.2 ros2 service list
5.3 ros2 service type
5.4 service definition
5.5 Mobile Robot 소개
5.6 서비스를 호출하는 방법 service call
5.7 namespace
5.8 spawn
6. ROS Topic
6.1 Topic의 개념
6.2 ros2 topic list
6.3 ros2 topic type
6.4 ros2 topic info
6.5 토픽을 사용하기 위해 메시지 타입 확인하기
6.6 간단하게 터미널에서 토픽 구독해보기
6.7 주행 명령 토픽 발행해 보기
6.8 토픽의 흐름을 보여주는 rqt_graph
7. ROS Action
7.1 노드 turtle_teleop_key 실행
7.2 ros2 action list
7.3 ros2 action send_goal
8. 마무리

Python으로 ROS2 토픽 다루기
1. 이 장의 목적
2. 설치 및 준비
3. Jupyter의 간단한 사용법 및 Python 기초
3.1 Jupyter의 기본 사용
3.2 Markdown 문서
4. Python으로 토픽 구독하기
4.1 Jupyter로 토픽을 구독하기 위한 준비
4.2 코딩에 들어가기 전에 당부의 말
4.3 구독을 위해 필요한 모듈 import
4.4 Python Import 방식
4.5 rclpy의 초기화 및 노드 생성
4.6 Subscription에서 실행할 callback 함수 작성
4.7 토픽 subscriber 만들기
4.8 Jupyter 사용해서 유의할 점
4.9 토픽을 받는 횟수 제한해보기
5. Python으로 토픽 발행하기
5.1 Jupyter로 토픽을 발행하기 위한 준비
5.2 토픽 발행을 위한 rclpy와 메시지 초기화
5.3 cmd_vel 토픽의 데이터 타입인 Twist 선언
5.4 Python으로 cmd_vel 토픽 간단히 발행해보기
5.5 ROS에서 timer를 이용해서 토픽 발행하기
6. 노드의 종류
7. 마무리

Python으로 서비스 크라이언트 다루기
1. 이 장의 목적
2. Python으로 ROS Service Client 사용하기
2.1 학습을 위한 준비와 Service Client를 위한 노드 생성
2.2 서비스를 요청하는 Service client 생성
2.3 서비스의 정의(service definition)를 Python에서 사용할 준비하기
2.4 간단히 service call을 실행해 보기
2.5 wait_for_service 사용해보기
2.6 서비스 클라이언트가 실행되는 상황 확인하기
3. 마무리

ROS2 학습을 위한 Python Class 이해하기
1. 이 장의 목적
2. 준비작업 및 그냥 sin 함수 그려보기
2.1 빈 문서 준비하기
2.2 matplotlib 사용 준비하고 import 하기
2.3 domain 준비하기
2.4 sin 함수 구하기
2.5 그래프 그려보기
2.6 함수 def로 구현해보기
3. 클래스로 sin 함수를 그려보기
3.1 일단 클래스에 변수라도 등록해보자
3.2 삼각함수를 그리는 클래스 완성하기
4. 클래스의 상속 Inherritance
5. 메서드 오버라이딩 Method Overriding
6. 클래스에서 super()의 사용
7. 마무리

패키지 만들고 토픽 다루기
1. 이 장의 목적
2. 설치 및 준비
3. 처음으로 패키지 만들기
3.1 일단 패키지를 무작정 만들어 보자
3.2 패키지 빌드 해보기, 그리고 워크스페이스 설정
4. Topic Subscriber 노드 추가
4.1 새로운 subscriber 파일 추가하기
4.2 my_subscriber.py 파일 설명
4.3 새로 추가한 노드 실행해 보기
5. Topic Publisher 노드 추가
5.1 my_publisher.py 파일 설명
5.2 워크스페이스의 빌드 정보를 지우고 싶다면
5.3 my_publisher 실행해 보기
6. 마무리

메시지 정의 만들고 토픽과 서비스에서 다루기
1. 이 장의 목적
2. 메시지 정의
2.1 메시지 정의를 위한 별도의 패키지 만들기
2.2 메시지 정의 msg definition 만들기
2.3 새로 정의된 msg를 포함한 패키지 빌드하기
3. 두 개의 토픽을 구독하고 하나의 토픽을 발행하자
3.1 turtlesim이 발행하는 pose 토픽 구동 부분부터 시작하자
3.2 새로 정의한 CmdAndPoseVel을 사용해 보자
3.3 cmd_vel 토픽도 구독해 보기
3.4 두 개의 토픽을 구독한 결과를 발행해 보자
4. 서비스 정의 Service definition 내가 한번 만들어 보자
4.1 서비스 정의 만들고 빌드하기
4.2 서비스 서버 만들어 보자
4.3 서비스 서버 코드 안에 클라이언트 코드를 만들어 보자
4.4 여러 거북이를 원 모양으로 배치하기 위한 고민
4.5 여러 거북이를 배치하는 서비스 서버 구현
4.6 여러 거북이를 등장시키자
5. 마무리

액션 익숙해지기
1. 이 장의 목적
2. 액션 정의 만들기
2.1 액션 정의를 만들기 위한 준비
2.2 액션 정의 만들기
2.3 액션 정의 빌드하기
3. 간단한 액션 서버로 개념 들여다보기
3.1 간단히 결과를 보여주는 액션 서버
3.2 feedback을 액션 서버에 추가해 보기
4. ROS2 Multi Thread 기초
5. 지정한 거리만큼 이동하는 액션 서버 만들기
5.1 전체코드
5.2 main:멀티스레드 적용
5.3 TurtleSub_Action: pose 토픽 구독
5.4 DistTurtleServer: 사용자가 지정한 거리만큼 이동
6. 액션 서버 간단히 사용해보기
7. 마무리

Parameter 다루기
1. 이 장의 목적
2. 터미널 명령으로 파라미터 사용해보기
2.1 실습환경
2.2 ros2 param list
2.3 ros2 param get
2.4 ros2 param set
2.5 ros2 param dump
2.6 ros2 param load
3. 코드로 접근하는 파라미터
3.1 일단 파라미터를 선언하자
3.2 파라미터를 코드 내에서 사용하는 방법
3.3 파라미터가 변경되는 것 눈치채기
4. 마무리

디버그와 관찰을 위한 여러 도구들
1. 이장의 목적
2. 로그
2.1 간단히 rqt_console을 이용해서 로그 확인하기
2.2 로그 메시지 직접 만들기
3.rqt
3.1 rqt_graph
3.2 rqt_plot
3.3 topic monitor
3.4 topic publisher
4. rosbag
5. ROSLAUNCH
5.1 roslaunch 기본
5.2 parameter 지정하기
6. 마무리

마치며

출판사 서평

이책한권이면다된다고하는말은아니다.저자인내가독자분들에게하고자하는말은‘이렇게배우면좀더쉽지않을까요?’라는것이다.수학의한분야라면한권이면다되는책이중요하겠지만,전체인원이가늠도안되는사람들이참여해서다양한패키지를공유하는ROS라는생태계에그렇게접근할수있다고생각하지않는다.또한,우리에게는‘표윤석’박사라는매우뛰어난ROS전도사가계셔서그분의책과자료를통해ROS2의기본적인동작원리등을알수있다.그래서내가수업때즐겨접근하는방식대로이책을기술했다.-저자의말중에서

저는아주예전부터로봇을공부하고개발도했습니다.처음에는학생으로서공부를했고,작은규모의교육용로봇부터판매가격이십몇억원이나되는복강경수술용로봇의개발까지참여했습니다.제가관심을가진분야는정말많지만,실제개발에참여하기는쉽지않았습니다.그런데어쩌다보니블록코딩을하는교육용로봇,폭발물제거용로봇,중심을잡고사람의이동을도와주는밸런싱로봇의일종인스케이트로봇,3D프린터,딥러닝을이용한다양한프로젝트까지도도전했습니다.그런제가로봇을개발하든사용하든언제나편하게기능을구현할수있도록도움을준친구가ROS(RobotOperatingSystem)입니다.물론처음부터ROS를사용한건아닙니다.제가ROS의존재를안것은2012년경이지만,실제ROS를공부하면서사용하게된것은몇년후이고,ROS를이용해서로봇SW를개발한것은또그로부터몇년후입니다.ROS를사용해본후에‘아!이좋은도구를더일찍사용했더라면,정말편했을텐데’라고후회했습니다.

최근저는다양한형태의교육과정에참여해서로봇과딥러닝을전파하고있습니다.또한훌륭한책이나자료를통해여러장소에서학생들에게잘전달하려애쓰고있습니다.그러다가로봇의기능을배우고,로봇개발을위해ROS를학습하려는분들에게뭔가도움을드리고싶단생각이들었습니다.거창한ROS의역사나ROS의철학,아키텍처에관한게아니라,어떻게하면ROS를정말잘쓸수있는지에관한이야기를하고싶었습니다.

저는ROS,블록코딩,제어이론,로보틱스,디지털필터,딥러닝등로봇을개발하는데필요하다고판단한것중에제가할수있는것은모두전달해야겠다고생각했습니다.분야별로한권의책이될지아니면좀다른형태가될지는모르겠지만하나씩이야기를꺼내서전달하려고합니다.

첫번째책은ROS2Galactic으로시작하려고합니다.
저는ROS버전이1인지2인지는중요하지않은것같습니다.어떤도구를쓰느냐보다자기에게필요한기능을빠르게찾아서어떻게적용하는가가더중요하다고생각합니다.‘완벽한정리’라든가,‘이책한권이면끝’이라는말은제책에는어울리지않습니다.저는인터넷에있는자료보다더많은내용을더깊이있게정리할수있는능력이제게있다고생각하지않습니다.저는앞에서말한것처럼독자들이빠르게도구를익힐수있는방법을고민한다는것을말하고싶습니다.

이책은우선,ROS의기본적인사용법에집중할것인데그전에Linux의사용법을간략하게다룰겁니다.ROS는Ubuntu(Linux기반의OS)에서아주잘동작하므로Ubuntu의사용법에익숙해질필요가있기때문입니다.또한URDF로로봇을기술하는방법,Gazebo에서시뮬레이션하는방법과아두이노를ROS에서이용하는방법도다음에출판될2권에서다루려고합니다.
현재ROS라는이름의유용한도구는몇년전에ROS2버전이나와서ROS1에서ROS2로넘어가고있는과도기입니다.인터넷커뮤니티에서는ROS1이냐,ROS2냐를가지고많은논쟁이있지만,제생각에는무의미한논쟁인것같습니다.왜냐하면,다다룰줄알아야하기때문입니다.
여기서는우분투20.04를기준으로ROS를이야기하려고합니다.이유는간단합니다.
ROS1과ROS2를동시에사용할수있는마지막우분투버전이20.04이기때문입니다.

이책이출판될때쯤이면우분투가버전업되어22.04가나와있을것같습니다.그러나그것도중요하지않습니다.아직도우분투16.04에서ROS1Kinetic버전으로개발하는분들도많기때문입니다.중요한것은버전이아니라사용법에대한이해입니다.분명22.04의우분투에맞춰또새로운ROS2버전이나오겠지만,그기본은바뀌지않으므로크게신경쓰지않아도됩니다.