ROS 로보틱스 프로그래밍 3/e [자율주행 로봇 및 7-DOF 로봇 팔 개발]
- 원서명Mastering ROS for Robotics Programming: Best practices and troubleshooting solutions when working with ROS (ISBN 9781801071024)
- 지은이렌틴 조셉(Lentin Joseph), 조나단 카카체(Jonathan Cacace)
- 옮긴이배진호
- ISBN : 9791161756738
- 50,000원
- 2022년 08월 29일 펴냄
- 페이퍼백 | 716쪽 | 188*235mm
- 시리즈 : 오픈소스 프로그래밍
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/ros-robotics-3e
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
ROS(Robot Operating System)는 복잡한 로봇 프로그래밍을 위한 소프트웨어 프레임워크다. ROS는 스크래치(scratch)로 코드를 작성하지 않고도 복잡한 로봇을 개발할 수 있게 해서 효율적으로 개발 시간을 줄여준다. 이 책은 실용 예제와 핵심 컨셉의 쉬운 해설로 ROS 로보틱스 프로젝트에 적용할 수 있는 고급 기술을 완벽히 다루고 있다.
개발자가 ROS 프로그래밍을 위한 필수적인 기초 개념을 잡을 수 있도록 도움을 주며, 실제 개발할 때뿐만 아니라 시뮬레이션에서도 로봇을 개발하는 방법을 알 수 있다. 또한 내비게이션과 매니퓰레이션과 같은 고급 기술을 적용하는 방법을 이해하고, ROS 컨트롤러와 플러그인을 개발하는 방법을 배운다. 드론 및 산업용 로봇 애플리케이션을 위한 ROS를 살펴보고 마지막으로 ROS의 효율적인 활용을 위한 응용 사례를 다룬다. 이 책을 읽고 나면 개발자들은 맞춤형 로봇과 다양한 ROS 애플리케이션을 개발할 수 있을 것이다.
이 책에서 다루는 내용
◆ 7-DOF 로봇 팔과 차동 구동 로봇 모델 생성
◆ 가제보(Gazebo), 코펠리아심(CoppeliaSim), 위봇(Webots) 로봇 시뮬레이션 활용
◆ SLAM과 AMCL 패키지를 활용한 차동 구동 로봇의 자율주행 구현
◆ ROS를 활용한 드론 시뮬레이션과 상호작용
◆ ROS pluginlib, nodelets, Gazebo 플러그인 개발
◆ 아두이노 같은 I/O 보드, 로봇 센서, 고급 액추에이터와 인터페이스
이 책의 대상 독자
이 책은 ROS의 기능을 최대한 활용하고자 하는 열정적인 로봇 개발자나 연구원을 대상으로 한다. 이미 일반적인 로봇공학 애플리케이션에 익숙하거나 ROS 세계에서 고급 방식으로 개발하는 방법을 배우고 로봇을 모델링, 구축, 제어하는 방법을 배우려는 사용자에게 적합하다. 내용을 쉽게 이해하고 싶다면 GNU/리눅스, C++ 프로그래밍에 대한 기본 지식이 필요하다.
이 책의 구성
1장, ‘ROS 소개’에서는 ROS의 핵심 기본 개념을 이해한다.
2장, ‘ROS 기초 프로그래밍’에서는 ROS 패키지 개발 방법을 설명한다.
3장, ‘ROS 3D 모델링’에서는 두 종류의 로봇 설계를 설명한다. 하나는 7 자유도(7-DOF, Degree Of Freedom) 매니퓰레이터(manipulator)고 다른 하나는 차동 구동 로봇(differential drive robot)이다.
4장, ‘ROS와 가제보를 활용한 로봇 시뮬레이션’에서는 가제보에서 로봇 조인트(joint)를 제어하는 데 도움이 되는 7 자유도 매니퓰레이터, 차동 구동 로봇, ROS 컨트롤러의 시뮬레이션을 설명한다.
5장, ‘ROS, 코펠리아심, 위봇을 활용한 로봇 시뮬레이션’에서는 코펠리아심(CoppeliaSim) 및 위봇(Webots) 시뮬레이터를 소개하고, 다양한 타입의 로봇을 시뮬레이션하고 제어하는 방법을 소개한다.
6장, ‘ROS MoveIt!과 내비게이션 스택 활용’에서는 ROS MoveIt!과 내비게이션 스택을 사용해 매니퓰레이팅 및 자율주행과 같이 즉시 활용할 수 있는 기능을 다룬다.
7장, ‘ROS MoveIt!의 고급 기능’에서는 충돌 회피, 3D 센서를 이용한 주변 환경 인지 기능과 물체 잡기 및 선별해 특정 위치에 두기와 같은 ROS MoveIt! 기능을 설명한다. 그런 다음 MoveIt!과 로봇 매니퓰레이터 하드웨어를 인터페이스하는 방법을 살펴본다.
8장, ‘ROS 드론’에서는 쿼드콥터의 사례를 고려해 ROS로 드론을 시뮬레이션하고 제어하는 방법을 설명한다.
9장, ‘ROS와 I/O 보드, 센서, 액추에이터 인터페이스’에서는 센서 및 액츄에이터와 같은 하드웨어 구성 요소를 ROS와 인터페이스하는 방법을 설명한다. 아두이노(Arduino) 또는 라즈베리파이(Raspberry Pi)와 같은 I/O 보드를 사용하는 센서와 ROS의 인터페이스를 살펴본다.
10장, ‘ROS와 OpenCV, PCL을 활용한 비전 센서 프로그래밍’에서는 다양한 비전 센서를 ROS와 인터페이스하고 OpenCV(Open Source Computer Vision) 및 PCL(Point Cloud Library)과 같은 라이브러리를 사용해 프로그래밍하는 방법을 설명한다.
11장, ‘ROS에서 차동 구동 로봇 하드웨어 구축과 인터페이스’에서는 차동 구동으로 설정된 자율주행 모바일 로봇 하드웨어와 ROS 사이의 인터페이스 방법을 알려준다.
12장, ‘pluginlib, nodelet, Gazebo 플러그인 활용’에서는 pluginlib, nodelet, Gazebo 플러그인과 같은 ROS의 고급 개념을 보여준다. 각 개념의 기능과 적용을 살펴보고 동작을 확인하기 위한 예제를 실행한다.
13장, ‘ROS 컨트롤러와 시각화 플러그인’에서는 기본 ROS 컨트롤러를 개발하고 실행하는 방법을 보여주고, RViz용 플러그인을 만드는 방법도 살펴본다.
14장, ‘매트랩과 시뮬링크에서 ROS 활용’에서는 매트랩(MATLAB) 및 시뮬링크(Simulink)를 ROS와 연결하는 방법을 설명한다.
15장, ‘산업용 로봇을 위한 ROS’에서는 ROS-Industrial 패키지를 이해하고 설치하는 데 도움이 되는 내용 소개한다. 산업용 로봇의 MoveIt! IKFast 플러그인을 개발하는 방법을 알아본다.
16장, ‘ROS에서 문제 해결 및 모범 사례’에서는 비주얼 스튜디오 코드(Visual Studio Code) IDE에서 ROS 개발 환경을 설정하는 방법, ROS 최적 실행, ROS 실행 중 발생하는 문제에 대한 해결 방법을 설명한다.
상세 이미지
목차
목차
- 1부. ROS 프로그래밍 핵심
- 1장. ROS 소개
- 기술적 요구 사항
- ROS를 사용해야 하는 이유
- ROS 파일시스템 레벨 이해
- ROS 패키지
- ROS 메타패키지
- ROS 메시지
- ROS 서비스
- ROS 연산 그래프 레벨 이해
- ROS 노드
- ROS 메시지
- ROS 토픽
- ROS 서비스
- ROS 백 파일
- ROS 마스터
- ROS 파라미터 사용
- ROS 커뮤니티 레벨
- ROS 시작을 위한 준비
- ROS 배포판
- ROS 마스터 및 ROS 파라미터 서버 실행
- 요약
- 질문
- 2장. ROS 기초 프로그래밍
- 기술적 요구 사항
- ROS 패키지 생성
- ROS 토픽 활용
- ROS 노드 생성
- 노드 빌드
- 사용자 정의 .msg와 .srv 파일 추가
- ROS 서비스 활용
- ROS actionlib 활용
- ROS 액션 서버와 클라이언트의 빌드
- 런치 파일 작성
- 토픽, 서비스, actionlib의 응용
- 요약
- 질문
- 2부. ROS 로봇 시뮬레이션
- 3장. ROS 3D 모델링
- 기술적 요구 사항
- 로봇 모델링을 위한 ROS 패키지
- URDF를 사용한 로봇 모델링 이해
- 로봇 디스크립션을 위한 ROS 패키지의 생성
- 최초의 URDF 모델 생성
- URDF 파일 분석
- RViz에서 로봇 3D 모델의 시각화
- 팬 조인트와 틸트 조인트의 상호작용
- 물리적인 특징과 충돌 특성을 URDF 모델에 추가
- xacro를 활용한 로봇 모델링의 이해
- 속성의 사용
- 수학 연산자 활용
- 매크로 활용
- xacro에서 URDF로의 변환
- 7-DOF 로봇 매니퓰레이터 로봇 디스크립션 생성
- 로봇 팔 사양
- 7-DOF 로봇 팔의 xacro 모델 상세 설명
- 상수 사용
- 매크로의 사용
- 다른 xacro 파일 포함
- 링크에서 메시 사용
- 로봇 집게를 사용한 작업
- RViz에서 7-DOF 로봇 팔 시각화
- 차동 구동 모바일 로봇 모델 생성
- 요약
- 질문
- 4장. ROS와 가제보를 활용한 로봇 시뮬레이션
- 기술적 요구 사항
- 가제보 및 ROS를 활용한 로봇 팔 시뮬레이션
- 가제보에서 로봇 팔 시뮬레이션 모델 생성
- 가제보 로봇 모델에 색과 질감 추가
- 모델을 구동하기 위한 transmission 태그 추가
- gazeboroscontrol 플러그인 추가
- 가제보에 3D 비전 센서 추가
- Xtion Pro와 로봇 팔 시뮬레이션
- 3D 센서 데이터 시각화
- 가제보에서 ROS 컨트롤러를 활용한 로봇 조인트 동작
- ros_control 패키지 이해
- 다양한 타입의 ROS 컨트롤러와 하드웨어 인터페이스
- ROS 컨트롤러가 가제보와 상호작용하는 방법
- 조인트 상태 컨트롤러와 조인트 위치 컨트롤러의 로봇 팔에 대한 인터페이싱
- 가제보로 ROS 컨트롤러 실행
- 로봇 조인트의 구동
- 가제보에서 차동 구동 로봇 시뮬레이션
- 가제보에 레이저 스캐너 추가
- 가제보에서 모바일 로봇 이동
- 런치 파일에 jointstatepublisher 추가
- ROS teleop 노드 추가
- 요약
- 질문
- 5장. ROS, 코펠리아심, 위봇을 활용한 로봇 시뮬레이션
- 기술적 요구 사항
- ROS로 코펠리아심 설정
- RosInterface 플러그인 이해
- ROS 메시지 작업
- 코펠리아심과 ROS를 활용한 로봇 팔 시뮬레이션
- 코펠리아심 조인트 컨트롤러에 ROS 인터페이스 추가
- ROS로 위봇 설정
- 위봇 시뮬레이터 소개
- 위봇으로 모바일 로봇 시뮬레이션
- 첫 번째 컨트롤러 작성
- 위봇 및 ROS를 사용한 로봇 팔 시뮬레이션
- webots_ros를 사용해 teleop 노드 작성
- 런치 파일로 위봇 실행
- 요약
- 질문
- 6장. ROS MoveIt!과 내비게이션 스택 활용
- 기술적 요구 사항
- MoveIt! 아키텍처
- move_group 노드
- MoveIt!을 활용한 모션 플래닝
- 모션 플래닝 요청 어댑터
- MoveIt! 플래닝 씬
- MoveIt! 기구학 처리
- MoveIt! 충돌 검사
- 셋업 어시스턴트 도구를 활용한 MoveIt! 구성 패키지 생성
- 1단계: 셋업 어시스턴트 도구 시작
- 2단계: 자기 충돌 행렬 생성
- 3단계: 가상 조인트 추가
- 4단계: 플래닝 그룹 추가
- 5단계: 로봇 포즈 추가
- 6단계: 로봇 엔드 이펙터 설정
- 7단계: 패시브 조인트 추가
- 8단계: 저자 정보
- 9단계: 구성파일 작성
- RViz에서 MoveIt! 구성 패키지를 활용한 모션 플래닝
- RViz MotionPlanning 플러그인 활용
- MoveIt! 구성 패키지와 가제보의 인터페이스
- ROS 내비게이션 스택 이해
- ROS 내비게이션 하드웨어 요구 사항
- 내비게이션 패키지 작업
- 내비게이션 스택의 작동
- SLAM을 활용한 지도 생성
- gmapping을 위한 런치 파일 작성
- 차동 구동 로봇에서 SLAM 실행
- amcl 및 정적 지도를 사용해 자율주행 구현
- amcl 런치 파일 작성
- 요약
- 질문
- 7장. ROS MoveIt!의 고급 기능
- 기술적 요구 사항
- move_group C++ 인터페이스를 사용한 모션 플래닝
- MoveIt! C++ API를 활용한 임의의 모션 플래닝
- MoveIt! C++ API를 활용한 사용자 정의 모션 플래닝
- MoveIt!을 사용해 로봇 팔과의 충돌 확인
- MoveIt!과 가제보를 활용한 퍼셉션 작업
- MoveIt!으로 물체 매니퓰레이션 수행
- MoveIt!을 활용한 선택/배치 작업
- 가제보와 실제 로봇에서 선택/배치 작업
- 로봇 하드웨어 인터페이스를 위한 다이나믹셀 ROS 서보 컨트롤러의 이해
- 다이나믹셀 서보
- DYNAMIXEL-ROS 인터페이스
- 7-DOF 다이나믹셀 기반 로봇 팔과 ROS MoveIt!
- COOL 로봇 암 컨트롤러 패키지 생성
- MoveIt! COOL 로봇 팔의 구성
- 요약
- 질문
- 8장. ROS 드론
- 기술적 요구 사항
- 드론의 활용
- UAV 하드웨어
- Pixhawk 자동조종 장치
- PX4 비행 제어 스택 활용
- PX4 펌웨어 아키텍처
- PX4 SITL
- PC/자동조종 장치 통신
- mavros ROS 패키지
- ROS-PX4 애플리케이션 작성
- 궤적 스트리머 작성
- PX4에 대한 외부 위치 추정
- RotorS 시뮬레이션 프레임워크 사용
- RotorS 설치
- RotorS 패키지
- 새로운 UAV 모델 생성
- RotorS 모터 모델과 상호작용
- 요약
- 질문
- 3부. ROS 로봇 하드웨어 프로토타이핑
- 9장. ROS와 I/O 보드, 센서, 액추에이터 인터페이스
- 기술적 요구 사항
- 아두이노-ROS 인터페이스 이해
- 아두이노-ROS 인터페이스는 무엇인가?
- ROS의 rosserial 패키지 이해
- 아두이노의 ROS 노드 API 이해
- ROS-아두이노 퍼블리셔 및 서브스크라이버 예제
- 아두이노-ROS 예제: 푸시 버튼으로 LED 깜박임
- 아두이노-ROS 예제: 가속도계 ADXL 335
- 아두이노-ROS 예제: 초음파 거리 센서
- 아두이노-ROS 예제: 주행 거리 데이터 퍼블리셔
- 아두이노 이외의 보드와 ROS의 인터페이스
- ROS 설치를 위한 오드로이드-C4, 라즈베리파이 4, 젯슨 나노 설정
- 라즈베리파이 4에서 ROS를 사용해 LED 깜박임
- 라즈베리파이 4에서 ROS를 사용하는 푸시 버튼과 깜박이는 LED
- 라즈베리파이 4에서 예제 실행
- 다이나믹셀 액츄에이터와 ROS 인터페이스
- 요약
- 질문
- 10장. ROS와 OpenCV, PCL을 활용한 비전 센서 프로그래밍
- 기술적 요구 사항
- ROS - OpenCV 인터페이스 패키지 이해
- ROS: PCL 인터페이스 패키지 이해
- ROS 퍼셉션 설치
- ROS에서 USB 웹캠 인터페이스
- ROS 카메라 보정
- cv_bridge를 사용해 ROS와 OpenCV 간에 이미지 변환
- ROS와 Kinect 및 아수스 Xtion Pro 인터페이스
- 인텔 RealSense 카메라와 ROS 인터페이스
- 포인트 클라우드를 레이저 스캔 데이터로 변환
- ROS와 Hokuyo 레이저 인터페이스
- RPLIDAR 및 YDLIDAR와 ROS 인터페이스
- 포인트 클라우드 데이터 작업
- 포인트 클라우드를 퍼블리시하는 방법
- 포인트 클라우드 서브스크라이브와 처리 방법
- PCD 파일에서 포인트 클라우드 읽기와 퍼블리싱
- 요약
- 질문
- 11장. ROS에서 차동 구동 로봇 하드웨어 구축과 인터페이스
- 기술적 요구 사항
- 소프트웨어 요구 사항
- 네트워크 설정
- 하드웨어 요구 사항
- Remo 로봇 소개: DIY 자율주행 로봇
- Remo 하드웨어 구성 요소
- ROS Navigation 스택에 대한 소프트웨어 요구 사항
- 차동 구동 로봇을 위한 로우레벨 컨트롤러 및 하이레벨 ROS 컨트롤 하드웨어 인터페이스 개발
- Remo용 로우레벨 기본 컨트롤러 구현
- 차동 구동 로봇을 위한 ROS 컨트롤 하이레벨 하드웨어 인터페이스
- Remo 로봇에 대한 ROS 노드 및 토픽 개요
- 내비게이션 스택 구성과 작업
- gmapping 노드 구성과 지도 작성
- gmapping 노드 작업
- move_base 노드 구성
- AMCL 노드 구성
- AMCL 플래닝
- 시뮬레이션에서 Remo 로봇 작업
- 요약
- 질문
- 기술적 요구 사항
- 4부. ROS 고급 프로그래밍
- 12장. pluginlib, nodelet, Gazebo 플러그인 활용
- 기술적 요구 사항
- pluginlib 이해
- pluginlib을 사용해 계산기 플러그인 구현
- ROS nodelet 이해
- 샘플 nodelet 구현
- Gazebo 플러그인 이해와 생성
- 기본 월드 플러그인 생성
- 요약
- 질문
- 13장. ROS 컨트롤러와 시각화 플러그인
- 기술적 요구 사항
- ros_control 패키지 이해
- controller_interface 패키지
- ROS에서 기본 조인트 컨트롤러 작성
- 1단계: 컨트롤러 패키지 생성
- 2단계: 컨트롤러 헤더 파일 작성
- 3단계: 컨트롤러 소스 파일 작성
- 4단계: 컨트롤러 소스 파일에 대한 자세한 설명
- 5단계: 플러그인 디스크립션 파일 작성
- 6단계: package.xml 업데이트
- 7단계: CMakeLists.txt 업데이트
- 8단계: 컨트롤러 빌드
- 9단계: 컨트롤러 구성파일 작성
- 10단계: 컨트롤러의 실행 파일 작성
- 11단계: 가제보에서 7-DOF 팔과 함께 컨트롤러 실행
- RViz 도구와 플러그인 이해
- 디스플레이 패널
- RViz 툴바
- 뷰 패널
- 타임 패널
- 고정 가능한 패널
- 원격 조작을 위한 RViz 플러그인 작성
- RViz 플러그인 빌드 방법론
- 요약
- 질문
- 14장. 매트랩과 시뮬링크에서 ROS 활용
- 기술적 요구 사항
- 매트랩 시작
- ROS 툴박스와 매트랩 시작
- ROS 토픽 및 매트랩 콜백 함수로 시작
- 매트랩 및 가제보를 활용한 로봇 애플리케이션 개발
- ROS 및 시뮬링크 시작
- 시뮬링크에서 파형 신호 적분기 생성
- 시뮬링크에서 ROS 메시지 퍼블리시
- 시뮬링크에서 ROS 토픽 서브스크라이브
- 시뮬링크에서 간단한 제어 시스템 개발
- 시뮬링크 모델 구성
- 요약
- 질문
- 15장. 산업용 로봇을 위한 ROS
- 기술적 요구 사항
- ROS-Industrial 패키지 이해
- ROS-Industrial의 목표
- ROS-Industrial: 간략한 역사
- ROS-Industrial 패키지 설치
- ROS-Industrial 패키지의 블록 다이어그램
- 산업용 로봇 URDF 생성
- 산업용 로봇을 위한 MoveIt 구성 생성
- MoveIt 구성파일 업데이트
- 유니버셜 로봇 팔을 위한 ROS-Industrial 패키지 설치
- 유니버셜 로봇용 ROS 인터페이스 설치
- 유니버셜 로봇 팔의 MoveIt 구성 이해
- 실제 유니버셜 로봇 하드웨어 및 ROS-I 시작
- ABB 로봇용 MoveIt 구성
- ROS-Industrial 로봇 지원 패키지 이해
- ROS- Industrial 로봇 클라이언트 패키지
- 산업용 로봇 클라이언트 노드 설계
- ROS-Industrial 로봇 드라이버 패키지
- MoveIt IKFast 플러그인 이해
- ABB IRB 6640 로봇용 MoveIt IKFast 플러그인 생성
- MoveIt IKFast 플러그인 개발을 위한 전제 조건
- OpenRave 및 IKFast 모듈
- MoveIt IKFast
- MoveIt IKFast 패키지 설치
- 우분투 20.04에 OpenRave 설치
- OpenRave로 작업할 로봇의 COLLADA 파일 생성
- IRB 6640 로봇용 IKFast CPP 파일 작성
- MoveIt IKFast 플러그인 생성
- 요약
- 질문
- 16장. ROS에서 문제 해결 및 모범 사례
- 비주얼 스튜디오 코드에서 ROS 설정
- 비주얼 스튜디오 코드 설치/제거
- 비주얼 스튜디오 코드 시작
- 새 비주얼 스튜디오 코드 익스텐션 설치
- 비주얼 스튜디오 코드 ROS 익스텐션 시작
- ROS 작업 공간 검사와 구축
- 비주얼 스튜디오 코드를 사용해 ROS 패키지 관리
- URDF 파일 프리뷰 시각화
- ROS의 모범 사례
- ROS C++ 코딩 스타일 가이드
- ROS 패키지에 대한 최상의 코딩 방법
- ROS의 중요한 문제 해결 팁
- roswtf 활용
- 요약
- 비주얼 스튜디오 코드에서 ROS 설정
도서 오류 신고
정오표
정오표
[p.72 : 세 번째 코드]
actionlibmsgs
->
actionlib_msgs