ROS2 혼자공부하는 로봇SW 직접 만들고 코딩하자 : 로봇OS를 위한 필독서

ROS2 혼자공부하는 로봇SW 직접 만들고 코딩하자 : 로봇OS를 위한 필독서

$26.40
저자

민형기

10년이훨씬넘는기간동안로봇과제어공학,딥러닝및데이터사이언스를다루는블로그(pinkwink.kr)를운영하고있다.국립창원대학교제어계측공학과에서제어공학을전공하고공학박사학위를받았다.엔티렉스로봇연구소소장,미래컴퍼니수술로봇연구소책임연구원등을역임했고,국가직무능력표준(NCS)중에서로봇인공지능/기계하드웨어학습모듈개발에참여했다.저자는국내최초로식약청인증을받은수술용로봇의제어담당,국내최대규모의전자제품,로봇관련온라인쇼핑몰을운영하던회사의연구소장등을역임하며다양한로봇과로봇관련제품을경험하고직접개발했다.또한,딥러닝과데이터사이언스관련해서다양한프로젝트를수행하고이를교육에접목시키고있다.공부하려는분들이로봇이나딥러닝이라는분야에보다쉽게접근할수있는방법을항상고민하고있다.최근에는데이터과학과머신러닝,로봇을주제로다양한연구및강연활동을하고있으며,저서로『파이썬으로데이터주무르기』,『생각대로블록코딩1,2』등이있다.

목차

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

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

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

ROS2기본명령익히기
1.이장의목적
2.Turtlesim설치와실행
3.다시강조하는setup.bash환경
4.ROSNode
5.ROSService
5.1Service의개념
5.2ros2servicelist
5.3ros2servicetype
5.4servicedefinition
5.5MobileRobot소개
5.6서비스를호출하는방법servicecall
5.7namespace
5.8spawn
6.ROSTopic
6.1Topic의개념
6.2ros2topiclist
6.3ros2topictype
6.4ros2topicinfo
6.5토픽을사용하기위해메시지타입확인하기
6.6간단하게터미널에서토픽구독해보기
6.7주행명령토픽발행해보기
6.8토픽의흐름을보여주는rqt_graph
7.ROSAction
7.1노드turtle_teleop_key실행
7.2ros2actionlist
7.3ros2actionsend_goal
8.마무리

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

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

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

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

메시지정의만들고토픽과서비스에서다루기
1.이장의목적
2.메시지정의
2.1메시지정의를위한별도의패키지만들기
2.2메시지정의msgdefinition만들기
2.3새로정의된msg를포함한패키지빌드하기
3.두개의토픽을구독하고하나의토픽을발행하자
3.1turtlesim이발행하는pose토픽구동부분부터시작하자
3.2새로정의한CmdAndPoseVel을사용해보자
3.3cmd_vel토픽도구독해보기
3.4두개의토픽을구독한결과를발행해보자
4.서비스정의Servicedefinition내가한번만들어보자
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.2feedback을액션서버에추가해보기
4.ROS2MultiThread기초
5.지정한거리만큼이동하는액션서버만들기
5.1전체코드
5.2main:멀티스레드적용
5.3TurtleSub_Action:pose토픽구독
5.4DistTurtleServer:사용자가지정한거리만큼이동
6.액션서버간단히사용해보기
7.마무리

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

디버그와관찰을위한여러도구들
1.이장의목적
2.로그
2.1간단히rqt_console을이용해서로그확인하기
2.2로그메시지직접만들기
3.rqt
3.1rqt_graph
3.2rqt_plot
3.3topicmonitor
3.4topicpublisher
4.rosbag
5.ROSLAUNCH
5.1roslaunch기본
5.2parameter지정하기
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버전이나오겠지만,그기본은바뀌지않으므로크게신경쓰지않아도됩니다.