Zeta Edu Ros2 Version Logo
latest

Robot Hardware and ROS 2 Installation

  • 하드웨어 스펙
    • 로봇의 구성요소
    • 주요 부품들
    • 블럭 다이어그램
    • 요약
  • 하드웨어 체크
    • 전제조건
    • 로봇의 구성요소
    • 1 배터리 표시기, 충전포트, 전원스위치
    • 2 스피커
      • 테스트
    • 3 카메라
    • 4 라이다
    • 5 모터 혹은 IMU
    • 요약
  • 로봇 조립
    • 전제조건
    • 로봇의 하단 부분 조립
    • 로봇의 중단 부분 조립
    • 로봇의 상단 부분 조립
    • 검증
    • 요약
  • 로봇 셋업
    • 전제조건
      • 1 로봇에 우분투 22.04 OS 설치
        • 1.1 PC에서
        • 1.2 로봇에서
      • 2 로봇 WiFi 설정하기
      • 2 로봇 openssh-server 설정하기
    • 요약
    • 다음 단계
  • PC 셋업
    • 전제조건
      • 1 Ubuntu USB 메모리 스틱 만들기
      • 2 PC에 Ubuntu 설치하기
      • 4 PC에서 로봇 ssh 연결
    • 요약
    • 다음 단계
  • Ubuntu (Debian 패키지)
    • 자료
    • 로케일 설정
    • 소스 설정
    • ROS 2 패키지 설치
    • 환경 설정
      • 설정 스크립트 소싱
    • 예제 시도
      • 대화형-수신자
    • 설치 후 다음 단계
    • ROS 1 브릿지 사용
    • 추가 RMW 구현 (선택 사항)
    • 문제 해결
    • 제거
  • 로봇 조립 경연대회
    • 대회 규칙
    • 점수 배정

ROS 2 CLI Tutorial

  • 설정
    • source setup
    • source 자동화 하기
    • 환경 변수 확인
    • 도메인 아이디 설정
    • DDS 설정
    • Summary
  • 터틀심과 rqt
    • turtlesim 설치
    • turtlesim 시작
    • turtlesim 사용해보기
    • rqt 설치
    • rqt 사용
    • spawn서비스 사용해보기
    • set_pen서비스 사용하기
    • Remapping
    • turtlesim 닫기
    • 정리
  • 노드 이해하기
    • 배경
      • 1 ROS 2 그래프
      • 2 ROS 2에서의 노드
    • 사전 준비
    • 작업
      • 1 ros2 run
      • 2 ros2 node list
        • 2.1 리매핑
      • 3 ros2 node info
    • 요약
    • 다음 단계
  • 토픽 이해하기
    • 배경
    • 사전 준비
    • 작업
      • 1 설정
      • 2 rqt_graph
      • 3 ros2 topic list
      • 4 ros2 topic echo
      • 5 ros2 topic info
      • 6 ros2 interface show
      • 7 ros2 topic pub
      • 8 ros2 topic hz
      • 9 정리
    • 요약
    • 다음 단계
  • 서비스 이해하기
    • 배경
    • 필수 준비물
    • 작업
      • 1 설정
      • 2 ros2 service list
      • 3 ros2 service type
        • 3.1 ros2 service list -t
      • 4 ros2 service find
      • 5 ros2 interface show
      • 6 ros2 service call
    • 요약
    • 다음 단계
    • 관련 콘텐츠
  • 매개변수 이해하기
    • 배경
    • 필수 준비물
    • 작업
      • 1 설정
      • 2 ros2 param list
      • 3 ros2 param get
      • 4 ros2 param set
      • 5 ros2 param dump
      • 6 ros2 param load
      • 7 노드 시작 시 매개변수 파일 로드
    • 요약
    • 다음 단계
  • 액션 이해하기
    • 배경 정보
    • 전제 조건
    • 작업
      • 1 설정
      • 2 액션 사용
      • 3 ros2 node info
      • 4 ros2 action list
        • 4.1 ros2 action list -t
      • 5 ros2 action info
      • 6 ros2 interface show
      • 7 ros2 action send_goal
    • 요약
    • 다음 단계
    • 관련 콘텐츠
  • rqt_console 를 사용하여 로그 보기
    • 배경 지식
    • 전제 조건
    • 작업
      • 1 설정
      • 2 rqt_console에서 메시지
      • 3 로거 레벨
        • 3.1 기본 로거 레벨 설정
    • 요약
  • 노드 실행
    • 배경 지식
    • 전제 조건
    • 작업
      • 런치 파일 실행
      • (선택 사항) Turtlesim 노드 제어
    • 요약
    • 다음 단계
  • 데이터 녹화 및 재생
    • 배경 지식
    • 전제 조건
    • 작업
      • 1 설정
      • 2 토픽 선택
      • 3 ros2 bag record
        • 3.1 단일 토픽 녹화
        • 3.2 여러 토픽 녹화
      • 4 ros2 bag info
      • 5 ros2 bag play
    • 요약
    • 다음 단계
    • 관련 콘텐츠
  • 로봇 구성요소의 역할 탐구
    • 목표
    • 과제 설명
    • 프레젠테이션 준비
    • 평가 기준 및 점수 배점
    • 제출 가이드라인
    • 결론

ROS 2 Client libraries Tutorial

  • colcon 을 사용하여 패키지 빌드하기
    • 배경
    • 전제 조건
      • colcon 설치
      • ROS 2 설치
    • 기초사항
      • 워크스페이스 생성
      • 일부 소스 추가
      • 환경 소스
      • 워크스페이스 빌드
      • 테스트 실행
      • 환경 소스
      • 데모 실행
    • 직접 패키지 생성하기
    • colcon_cd 설정하기
    • colcon 탭 완성 설정하기
    • 팁
  • 작업 공간 생성
    • 배경 지식
    • 전제 조건
    • 작업 내용
      • 1. ROS 2 환경 소스화
      • 2. 새 디렉터리 생성
      • 3. 샘플 리포지토리 복제
      • 4. 패키지 종속성 해결
      • 5. colcon으로 작업 공간 빌드
      • 6. 오버레이 소스화
      • 7. 오버레이 수정
    • 요약
    • 다음 단계
  • 패키지 만들기
    • 배경 지식
      • 1 ROS 2 패키지란 무엇인가요?
      • 2 ROS 2 패키지는 무엇으로 이루어져 있나요?
      • 3 작업 공간의 패키지
    • 전제 조건
    • 작업
      • 1 패키지 만들기
      • 2 패키지 빌드
      • 3 설정 파일 소스화
      • 4 패키지 사용
      • 5 패키지 내용 검사
      • 6 package.xml 사용자 정의
    • Summary
    • 다음 단계
  • 간단한 publisher/subscriber 작성 (C++)
    • 배경
    • 전제 조건
    • 작업
      • 1. 패키지 만들기
      • 2. 퍼블리셔 노드 작성
        • 2.1 코드 검토
        • 2.2 종속성 추가
        • 2.3 CMakeLists.txt
      • 3. 구독자 노드 작성
        • 3.1 코드 검토
        • 3.2 CMakeLists.txt
      • 4 빌드 및 실행
    • 요약
    • 다음 단계
    • 관련 콘텐츠
  • 간단한 publisher/subscriber 작성 (Python)
    • 배경 지식
    • 전제 조건
    • 작업
      • 1. 패키지 생성
      • 2. 퍼블리셔 노드 작성
        • 2.1. 코드 검토
        • 2.2. 종속성 추가
        • 2.3. 엔트리 포인트 추가
        • 2.4. setup.cfg 확인
      • 3 서브스크라이버 노드 작성
        • 3.1. 코드 검토
        • 3.2. 엔트리 포인트 추가
      • 4 빌드 및 실행
        • 요약
        • 다음 단계
        • 관련 콘텐츠
  • 간단한 service and client 작성 (C++)
    • 배경
    • 사전 준비 사항
    • 작업
      • 1 패키지 생성
        • 1.1 package.xml 업데이트
      • 2 서비스 노드 작성
        • 2.1 코드 분석
        • 2.2 실행 파일 추가
      • 3 클라이언트 노드 작성
        • 3.1 코드 분석
        • 3.2 실행 파일 추가
      • 4 빌드 및 실행
    • 요약
    • 다음 단계
    • 관련 콘텐츠
  • 간단한 service and client 작성 (Python)
    • 배경
    • 사전 준비 사항
    • 작업
      • 1 패키지 생성
        • 1.1 package.xml 업데이트
        • 1.2 setup.py 업데이트
      • 2 서비스 노드 작성
        • 2.1. 코드 검토
        • 2.2. 엔트리 포인트 추가
      • 3 클라이언트 노드 작성
        • 3.1 코드 살펴보기
        • 3.2 엔트리 포인트 추가
      • 4 빌드 및 실행
    • 요약
    • 다음 단계
    • 관련 컨텐츠
  • 커스텀 msg와 srv 파일 생성하기
    • 배경
    • 사전 준비 사항
    • 작업
      • 1 새 패키지 생성하기
      • 2 커스텀 정의 생성하기
        • 2.1 msg 정의
        • 2.2 srv 정의
      • 3 CMakeLists.txt
      • 4 package.xml
      • 5 tutorial_interfaces 패키지 빌드하기
      • 6 msg 및 srv 생성 확인하기
      • 7 새 인터페이스 테스트하기
        • 7.1 Num.msg 를 pub/sub으로 테스트하기
        • 7.2 AddThreeInts.srv 를 서비스/클라이언트와 테스트하기
    • 요약
    • 다음 단계
  • 사용자 정의 인터페이스 구현
    • 배경 지식
    • 전제 조건
    • 작업
      • 1 패키지 생성
      • 2 msg 파일 생성
        • 2.1 msg 파일 빌드
        • 2.2 (추가) 여러 인터페이스 설정
      • 3 동일 패키지에서 인터페이스 사용
        • 3.1 코드 설명
        • 3.2 퍼블리셔 빌드
        • 3.3 인터페이스와 연결
      • 4 실행해 보기
      • 5 (추가) 기존 인터페이스 정의 사용
    • 요약
    • 다음 단계
    • 관련 컨텐츠
  • 클래스에서 매개변수 사용하기 (C++)
    • 배경
    • 전제 조건
    • 작업
      • 1 패키지 생성
        • 1.1 package.xml 업데이트
      • 2 C++ 노드 작성
        • 2.1 코드 검토
        • 2.2 실행 파일 추가
      • 3 빌드 및 실행
        • 3.1 콘솔을 통한 변경
        • 3.2 런치 파일을 통한 변경
    • 요약
    • 다음 단계
  • 클래스에서 매개변수 사용하기 (Python)
    • 배경
    • 전제 조건
    • 작업
      • 1 패키지 생성
        • 1.1 package.xml 업데이트
      • 2. 파이썬 노드 작성
        • 2.1 코드 검토
        • 2.2 엔트리 포인트 추가
      • 3 빌드 및 실행
        • 3.1 콘솔을 통한 변경
        • 3.2 런치 파일을 통한 변경
    • 요약
    • 다음 단계
  • ros2doctor 를 사용하여 문제 식별
    • 배경
    • 필수 조건
    • 작업
      • 1 설정 확인
      • 2 시스템 확인
      • 3 전체 보고서 얻기
    • 요약
    • 관련 콘텐츠
    • 다음 단계
  • ROS 기초 개별 미션
    • 목표
    • 과제 설명
    • PPT 형식
    • 평가 기준
    • 결론

ROS 2 Intermediate

  • rosdep를 사용하여 종속성 관리
    • rosdep가 무엇인가요?
    • package.xml 파일에 대한 간략한 설명
      • <depend>
      • <build_depend>
      • <build_export_depend>
      • <exec_depend>
      • <test_depend>
    • rosdep가 어떻게 작동하나요?
    • 내 package.xml에 어떤 키를 넣어야 하는지 어떻게 알 수 있나요?
    • 만약 내 라이브러리가 rosdistro에 없다면 어떻게 해야 하나요?
    • rosdep 도구를 어떻게 사용하나요?
      • rosdep 설치
      • rosdep 작동
  • 액션 생성하기
    • 배경
    • 사전 준비 사항
    • 작업
      • 1 액션 정의하기
      • 2 액션 빌드하기
    • 요약
    • 다음 단계
    • 관련 내용
  • 액션 서버 및 클라이언트 작성하기 (C++)
    • 배경 정보
    • 전제 조건
    • 작업
      • 1 액션 서버를 위한 action_tutorials_cpp 패키지 생성
        • 1.1 action_tutorials_cpp 패키지 생성
        • 1.2 가시성 제어 추가
      • 2 액션 서버 작성
        • 2.1 액션 서버 코드 작성
        • 2.2 액션 서버 컴파일
        • 2.3 액션 서버 실행
      • 3 액션 클라이언트 작성
        • 3.1 액션 클라이언트 코드 작성
        • 3.2 액션 클라이언트 컴파일
        • 3.3 액션 클라이언트 실행
    • 요약
    • 관련 컨텐츠
  • 액션 서버 및 클라이언트 작성하기 (Python)
    • 배경
    • 필수 사항
    • 작업
      • 1 액션 서버 작성
        • 1.2 피드백 게시
      • 2 액션 클라이언트 작성
        • 2.2 피드백 받기
    • 요약
    • 관련 콘텐츠
  • Launch
    • 런치파일 생성하기
      • 필수 사항
      • 배경
      • 작업
        • 1 설정
        • 2 런치 파일 작성
        • 3 ros2 launch
        • 4 rqt_graph를 사용하여 시스템 검토
      • 요약
    • ROS 2 패키지에 런치 파일 통합하기
      • 전제 조건
      • 배경 지식
      • 작업
        • 1 패키지 생성
        • 2 런치 파일을 저장할 구조 생성
        • 3 런치 파일 작성
        • 4 런치 파일 빌드 및 실행
      • 문서화
    • 대체 사용법 익히기
      • 배경 지식
      • 전제 조건
      • 대체 사용법 사용하기
        • 1 패키지 생성 및 설정
        • 2 상위 런치 파일
        • 3 대체 사용법 예제 런치 파일
        • 4 패키지 빌드
      • 예제 실행
      • 런치 인수 수정
      • 문서화
      • 요약
    • 이벤트 핸들러 사용
      • 배경 정보
      • 전제 조건
      • 이벤트 핸들러 사용
        • 1. 이벤트 핸들러 예제 런치 파일
      • 패키지 빌드
      • 예제 실행
      • 문서화
      • 요약
    • 대규모 프로젝트 관리
      • 배경
      • 전제 조건
      • 소개
      • 런치 파일 작성
        • 1 최상위 구성
        • 2 매개변수
        • 3 네임스페이스
        • 4 노드 재사용
        • 5 매개변수 오버라이드
        • 6 리매핑
        • 7 구성 파일
        • 8 환경 변수
      • 런치 파일 실행
        • 1. setup.py 업데이트
        • 2. 빌드 및 실행
      • 요약
  • tf2
    • tf2 소개
      • 데모 설치
      • 데모 실행
      • 무슨 일이 일어나고 있나요?
      • tf2 도구
        • 1. view_frames 사용
        • 2. tf2_echo 사용
      • rviz2 및 tf2
    • tf2 정적 브로드캐스터 작성 (Python)
      • 배경
      • 필수 준비물
      • 작업
        • 1 패키지 생성
        • 2 정적 브로드캐스터 노드 작성
        • 3 빌드
        • 4 실행
      • 정적 변환을 게시하는 올바른 방법
      • 요약
    • tf2 정적 브로드캐스터 작성 (C++)
      • 배경
      • 필수 준비물
      • 작업
        • 1 패키지 생성
        • 2. 정적 변환자 노드 작성
        • 3. 빌드
        • 4. 실행
      • 정적 변환을 게시하는 올바른 방법
      • 요약
    • 브로드캐스터 작성하기 (Python)
      • 배경
      • 필수 준비 사항
      • 작업
        • 1 브로드캐스터 노드 작성
        • 2 런치 파일 작성
        • 3 빌드
        • 4 실행
      • 요약
    • 브로드캐스터 작성하기 (C++)
      • 배경
      • 필수 준비 사항
      • 작업
        • 1 브로드캐스터 노드 작성
        • 2 런치 파일 작성
        • 3 빌드
        • 4 실행
    • 리스너 작성하기 (Python)
      • 배경
      • 전제 조건
      • 작업
        • 1. 리스너 노드 작성
        • 2. 런치 파일 업데이트
        • 3. 빌드
        • 4. 실행
      • 요약
    • 리스너 작성하기 (C++)
      • 배경
      • 전제 조건
      • 작업
        • 1. 리스너 노드 작성
        • 2. 런치 파일 업데이트
        • 3. 빌드
        • 4. 실행
      • 요약
    • 프레임 추가 (Python)
      • 배경
      • tf2 트리
      • 작업
        • 1 고정 프레임 브로드캐스터 작성
        • 2. 동적 프레임 브로드캐스터 작성
      • 요약
    • 프레임 추가 (C++)
      • 배경
      • tf2 트리
      • 작업
        • 1 고정 프레임 브로드캐스터 작성
        • 2 동적 프레임 브로드캐스터 작성
      • 요약
    • 시간 사용하기 (Python)
      • 배경 정보
      • 작업
        • 1 리스너 노드 업데이트
        • 2 리스너 노드 수정
        • 3 결과 확인
      • 요약
    • 시간 사용하기 (C++)
      • 배경 정보
      • 작업
        • 1 tf2와 시간
        • 2 변환 대기
        • 3 결과 확인
      • 요약
    • 시간을 여행하다 (Python)
      • 배경 정보
      • 시간 여행
      • lookup_transform()에 대한 고급 API
      • 결과 확인
      • 요약
    • 시간을 여행하다 (C++)
      • 배경 정보
      • 시간 여행
      • lookupTransform()에 대한 고급 API
      • 결과 확인
      • 요약
    • 디버깅
      • 배경 정보
      • 디버깅 예제
        • 1 예제 설정 및 시작
        • 2 tf2 요청 찾기
        • 3 프레임 확인
        • 4 타임스탬프 확인
      • 요약
    • Quaternion fundamentals
      • 배경
      • 필수 전제 조건
      • 쿼터니언의 구성 요소
      • ROS 2에서의 쿼터니언 유형
      • 쿼터니언 연산
        • 1 롤(roll), 피치(pitch), 요(yaw)로 생각한 다음 쿼터니언으로 변환하기
        • 2 쿼터니언 회전 적용
        • 3 쿼터니언 반전
        • 4 상대 회전
      • 요약
    • tf2_ros::MessageFilter로 stamped 데이터 유형 사용하기
      • 배경
      • 작업
        • 1 PointStamped 메시지 브로드캐스터 노드 작성
        • 2 메시지 필터/리스너 노드 작성
        • 3 실행
      • 요약
    • 작업 공간 설정
    • tf2 학습
    • tf2 디버깅
    • tf2와 센서 메시지 사용
  • ROS 중급 개별 미션
    • 목표
    • 과제 설명
    • PPT 형식
    • 평가 기준
    • 결론

Zeta2 Robot Packages

  • zeta2 bringup
    • 전제조건
      • 1 라이다 세팅
      • 2 zeta2_bringup 패키지 설치
    • 요약
    • 다음 단계
  • zeta2 autonomous
    • 전제조건
      • 1 필요한 패키지들 설치
      • 2 slam tool box 매핑
      • 3 cartographer 매핑
      • 4 navigation2 실행
    • 요약
    • 다음 단계

Navigation2 Packages

  • Navigation2 Start
    • 전제조건
      • 1 navigation2 를 위한 로봇 셋업
        • 1.1 TF
        • 1.2 Odometry(odom)
        • 1.2.1 zeta2 로봇에서의 odom
        • 1.3 Sensor
        • 일반적인 센서 메시지
        • 매핑과 로컬라이제이션
        • Costmap 2D Overview
        • 1.4 Footprint
        • 1.5 Navigation Plugins
        • 플래너와 컨트롤러 서버
    • 요약
    • 다음 단계
  • Navigation2 플래너
    • 전제조건
      • 1 Planners 의 종류
      • 2 Planners 기본 사용법
        • 매개변수
        • 기본 플러그인
        • Example
    • 요약
    • 다음 단계
  • NavFn Planner
    • 매개변수
    • 예시
      • 다음 단계
  • Smac 플래너
    • 제공되는 플러그인
      • Smac 2D 플래너
        • 매개 변수
        • Example
      • Smac Hybrid-A* Planner
        • 매개변수
        • Example
      • Smac State Lattice Planner
        • 매개변수
        • Example
    • 설명
      • 다음 단계
  • Theta Star Planner 설정
    • 매개변수
      • Example
        • 다음 단계
  • Navigation2 컨트롤러
    • 전제조건
      • 1 Controllers 의 종류
      • 2 Controllers 기본 사용법
        • 매개변수
        • 제공된 플러그인
        • 기본 플러그인
        • Example
    • 요약
    • 다음 단계
  • DWB 컨트롤러
    • 컨트롤러
      • DWB 컨트롤러
        • 매개변수
      • XYTheta 이터레이터
        • 매개변수
      • 운동학 매개변수
        • 매개변수
      • Publisher
        • 매개변수
    • 플러그인
      • LimitedAccelGenerator
        • 매개변수
      • StandardTrajectoryGenerator
        • 매개변수
    • 트라젝토리 크리틱
      • BaseObstacleCritic
        • 매개변수
      • GoalAlignCritic
        • 매개변수
      • GoalDistCritic
        • 매개변수
      • ObstacleFootprintCritic
        • 매개변수
      • OscillationCritic
        • 매개변수
      • PathAlignCritic
        • 매개변수
      • PathDistCritic
        • 매개변수
      • PreferForwardCritic
        • 매개변수
      • RotateToGoalCritic
        • 매개변수
      • TwirlingCritic
        • 매개변수
      • 다음 단계
  • Regulated Pure Pursuit
    • 규제된 순수 추적 매개변수
    • Example
  • 모델 예측적 경로 적분 컨트롤러
    • MPPI 파라미터
      • Trajectory Visualization
      • Path Handler
      • Ackermann Motion Model
      • Constraint Critic
      • Goal Angle Critic
      • Goal Critic
      • Obstacles Critic
      • Cost Critic
      • Path Align Critic
      • Path Angle Critic
      • Path Follow Critic
      • Prefer Forward Critic
      • Twirling Critic
    • Example
    • 사용자에게 알림
      • 일반적인 지혜의 말씀
      • 예측 지폐, 코스트맵 크기 및 오프셋
      • 장애물, 인플레이션 레이어 및 경로 추적
  • Rotation Shim Controller
    • Rotation Shim Controller 매개변수
    • Example
  • Graceful Controller
    • Graceful Controller 매개변수
    • Example
  • Simple Commander API
    • 개요
    • Commander API
    • 코스트맵 API
    • 풋프린트 충돌 체크 API
    • 예제와 데모
      • example_nav_to_pose.py
      • example_nav_through_poses.py
  • Navigation2 Conclusion
    • 전제조건
      • 1 플래너
      • 2 컨트롤러
      • 3 smoother(스무더)
    • 요약
  • 네비게이션 미션
    • 목표
    • 과제 설명
    • PPT 형식
    • 평가 기준
    • 결론
  • 미래의 로봇 시나리오 프로젝트
    • 목표
    • 과제 설명
    • PPT 형식
    • 평가 기준
    • 결론
Zeta Edu Ros2 Version
  • Navigation2 Start
  • Edit on GitHub

Navigation2 Start

목표: navigation2 를 처음 사용할 때 가장 필수적인 요소들을 배워보고 zeta2 로봇에는 어떻게 사용되어 지는지 알아본다.

전제조건

앞의 과정을 다 끝내고 와야 합니다. ROS2에 대한 기본 개념이 없으면 이해하기 힘들 수 있습니다.

우리는 기존에 zeta2_bringup 패키지의 zeta2_bringup.launch.py 파일을 실행하는 것으로 로봇이 기본적인 모든 구성 요소들을 불러올 수 있었습니다.

이 시간에는 navigation2 을 사용하기 위한 각각의 필수적 데이터들과 그 것들이 zeta2_bringup 안에 어떻게 들어가 있는지 알아보는 시간을 가지겠습니다.

1 navigation2 를 위한 로봇 셋업

navigation2 를 사용하기 위해선 다양한 요소들이 있지만 간단한 요소들로도 충분히 사용할 수 있습니다.

가장 먼저 가장 중요한 TF 입니다. 이것은 Sensor 나 Odometry 같은 다양한 소스에서 들어오는 정보들을 좌표 프레임으로 사용하는 것입니다.

다음은 Odometry(오도메트리) 입니다. Odometry 는 일반적으로 휠인코더, IMU, Lidar, Radar 또는 Vio와 같은 센서 데이터를 사용하여 로봇의 자세와 속도를 추정하는 방법을 제공합니다.

다음은 Sensor(센서) 입니다. Sensor 는 로봇이 주변 환경을 인식하고 파악하기 위해 사용되는 장치로, lidar, radar, RGB 카메라, 깊이 카메라, IMU, GPS 등이 일반적으로 사용됩니다.

다음은 Footprint 입니다. Footprint 는 로봇의 2D 모양을 정의하여 Nav2의 경로 계획 알고리즘이 충돌을 피하도록 하는데 사용됩니다.

하지만 우리의 로봇은 base_link가 footprint를 대체할 수 있게 설정하였습니다.

마지막으로 Navigation plugins 입니다. 로봇의 경로 계획 및 제어를 위해 다양한 알고리즘을 사용할 수 있게 해주는 도구 입니다.

1.1 TF

TF 는 이미 앞선 TF2 강의에서 배웠었습니다.

이 시간에는 자율주행에 필요한 가장 필수적인 TF 에 대해서 설명하겠습니다.

  1. map => odom 사이의 TF 입니다.

이 TF 는 로봇의 전역 위치를 나타내는 map 과 로봇의 상대적인 운동을 추적하는 odom 간의 관계를 정의합니다.

map 은 로봇이 움직이는 환경의 전역 지도를 나타내며, odom 은 로봇의 상대적인 이동을 추적합니다.

이 TF 를 통해 로봇의 운동학적 위치를 전역 지도에 매핑하여 로봇의 위치를 정확하게 추정할 수 있습니다.

또한 이 TF 는 SLAM(Simultaneous localization and Mapping) 알고리즘이나 AMCL(Adaptive Monte Carlo localization) 과 같은 로봇의 로컬라이제이션 시스템에 의해 생성됩니다.

자율주행을 사용하는 navigation2 에서는 AMCL 을 사용하여 생성해준다고 볼 수 있습니다.

  1. odom => base_link 사이의 TF 입니다.

이 TF 는 로봇의 운동학적 위치를 나타내는 odom 과 로봇의 기준점인 base_link 간의 관계를 정의합니다.

odom 은 로봇의 상대적인 이동을 추적하고 기록하는 데 사용됩니다.

이 TF 를 통해 로봇의 운동학적 위치를 로봇의 기준점으로 변환하여 제어 및 위치 추정에 사용할 수 있습니다.

zeta2 로봇의 경우엔 zeta2_edu_devel/zeta2_bringup/scripts/odometry.py 파일에서 odometry 도 생성하고 TF 도 생성합니다.

이 때 생성할 때의 코드를 보면 TransformBroadcaster 을 사용하여 생성한다는 것을 확인할 수 있습니다.

  1. base_link => base_laser 사이의 TF 입니다.

이 TF 는 로봇의 기본적인 구조를 설명합니다.

base_link 는 로봇의 기준점으로, 보통 로봇의 중심에 해당합니다.

base_laser 는 로봇에 장착된 레이저 센서의 위치를 나타냅니다.

이 TF 를 통해 레이저 센서의 측정 데이터를 로봇의 기준점으로 변환하여 사용할 수 있습니다.

이 TF 의 경우엔 로봇이 한 번 조립되면 로봇의 중심과 레이저 센서의 위치가 변경되지 않기 때문에 정적(static)으로 지정됩니다.

이 TF 는 로봇의 초기 설치시 정확한 위치를 기반으로 설정되며, 로봇의 구성이 변경되지 않는 한 변하지 않습니다.

zeta2 로봇의 경우엔 zeta2_edu_devel/zeta2_bringup/launch/zeta2_state_publisher.launch.py 파일에서 TF 를 생성합니다.

이렇게 3가지 정도의 구성이 필수적인 요소들이라고 볼 수 있습니다.

URDF 라는 것을 사용하면 좀 더 다양한 TF 구성요소를 쉽게 생성할 수 있습니다. 하지만 이 로봇의 경우엔 자원을 최대한 적게 사용하기 위해 가장 필수적인 요소들로만 구성을 했습니다.

URDF 로 구성하는 것을 따로 학습 해보고 싶다면 Setting Up The URDF 을 참고하시길 바랍니다.

이 과정에선 zeta2 로봇을 기준으로 작성했기 때문에 내용은 생략되었습니다.

1.2 Odometry(odom)

우리의 로봇에서는 역시나 zeta2_bringup.launch.py 를 사용하면 알아서 odometry 를 생성해 주었습니다.

이번 시간엔 이 결과가 어떻게 나오게 되었는지 간단하게 알아보겠습니다.

일단 먼저, Odometry(odom) 는 로봇의 운동학적인 위치와 자세를 추정하는 데 사용되는 정보입니다. 이 정보는 보통 선속도와 각속도를 기반으로 계산되며, 로봇의 이동과 회전을 추적하여 현재 위치와 자세 를 파악합니다.

예를 들어, 선속도 와 각속도 를 이용하여 로봇의 이동 거리 와 회전 각도 를 계산할 수 있습니다. 이렇게 계산된 이동 거리 와 회전 각도 를 이전 위치와 자세에 누적함으로써 현재의 위치와 자세 를 추정할 수 있습니다. 이러한 작업은 로봇이 이동하는 동안 계속해서 이루어지며, 오도메트리 정보는 로봇의 위치 추정뿐만 아니라 제어 및 경로 계획에도 사용됩니다.

ROS에서는 오도메트리 정보는 주로 odom 이라는 토픽을 통해 게시됩니다. 이 정보는 보통 로봇의 현재 위치와 자세를 나타내는 Pose 와 Twist 메시지로 표현됩니다. Pose 메시지 는 로봇의 위치와 자세를 나타내고, Twist 메시지 는 로봇의 선속도와 각속도를 나타냅니다.

따라서 오도메트리는 로봇의 운동을 추적하고 제어하는 데 중요한 역할을 합니다. 오도메트리 정보를 정확하게 추정함으로써 로봇은 자신의 위치를 파악 하고 목표 지점으로 이동할 수 있습니다.

1.2.1 zeta2 로봇에서의 odom

zeta2 로봇에서 odometry 를 생성하는 파일의 위치는 zeta2_edu_devel/zeta2_bringup/scripts/odometry.py 입니다. 내용을 살펴보겠습니다.

Odometry 를 업데이트하기 위해서 모터 보드 와 인터페이스 보드 에서 나오는 데이터를 활용합니다. 모터 보드 에서는 선속도(v) 와 각속도(w) 를, 인터페이스 보드에서는 IMU 데이터를 받습니다. 이 두 가지 데이터를 조합하여 로봇의 위치와 자세를 추정하고 제어합니다.

  1. 모터 보드 데이터 해석:
    • 모터 보드 에서 받은 데이터를 해석하여 선속도(v) 와 각속도(w) 를 추출합니다.

    • 선속도 는 로봇의 직진 또는 후진 속도를 나타내며, 각속도 는 로봇의 회전 속도를 나타냅니다.

    • 이러한 데이터를 기반으로 로봇의 운동을 계산합니다.

  2. IMU 데이터 활용:
    • 인터페이스 보드 에서 받은 IMU 데이터를 사용하여 로봇의 자세를 보정합니다.

    • IMU 데이터는 로봇의 방향을 나타내는 각도 정보를 제공합니다. 이를 활용하여 로봇의 이동 방향에 대한 보정을 수행합니다.

  3. 오도메트리 업데이트:
    • 선속도 와 각속도 를 이용하여 로봇의 이동량 을 계산합니다.

    • 이동량 과 IMU 에서 얻은 회전값 을 조합하여 로봇의 위치와 자세 를 업데이트합니다.

    • 최종적으로 계산된 위치와 자세 정보를 이용하여 오도메트리 를 업데이트합니다.

이렇게 모터 보드와 인터페이스 보드에서 받은 데이터를 조합하여 로봇의 운동을 추정하고 오도메트리 를 업데이트합니다.

이러한 과정을 통해 로봇은 자신의 위치와 자세를 추정하고, 외부로 이 정보를 전달하여 제어될 수 있습니다.

1.3 Sensor

현재 이 로봇의 센서는 Lidar 만 사용하고 있습니다. 하지만 그 외의 다양한 센서들도 있습니다.

이번 시간엔 센서들에 대해서 설명을 해보겠습니다.

일반적인 센서 메시지

nav2를 설정할 때 일반적인 sensor_msgs 들이 있습니다. 각각에 대해서 간단한 설명을 알려드리겠습니다.

  1. sensor_msgs/LaserScan

이 메시지는 평면 레이저 거리 측정기에서의 단일 스캔을 나타냅니다. 이 메시지는 localization 및 mapping을 위해 slam_toolbox 및 nav2_amcl 에서 사용되거나, perception을 위해 nav2_costmap_2d 에서 사용됩니다.

../../_images/sensor_laserscan.png
  1. sensor_msgs/PointCloud2

이 메시지는 3D 점의 집합을 보유하며, 각 점에 대한 선택적인 추가 정보를 포함합니다. 이는 3D 라이다, 2D 라이다, 깊이 카메라 등에서 올 수 있습니다.

../../_images/sensor_pointcloud2.png
  1. sensor_msgs/Range

이 메시지는 에너지를 방출하고 측정된 거리에서 하나의 범위 측정을 보고하는 활성 레인저에서의 단일 범위 읽기입니다. 초음파 센서, 적외선 센서 또는 1D 레인지 파인더가 이 메시지를 사용하는 예입니다.

../../_images/sensor_range.png
  1. sensor_msgs/Image

이 메시지는 RGB 또는 깊이 카메라에서의 센서 읽기를 나타냅니다. RGB 또는 범위 값에 해당합니다.

../../_images/sensor_image.png

매핑과 로컬라이제이션

방금 전의 센서들을 가지고 맵을 생성하고 로봇을 맵에서 localization 할 수 있습니다. slam 할 때 사용했던 slam_toolbox 패키지 또한 localization 할 수 있는 도구 중 하나 입니다.

하지만 우린 nav2_amcl 을 사용해서 현재 위치를 구현했습니다. 이 것 또한 로봇의 위치와 방향을 맵 상에서 추정하는 패키지 입니다.

slam_toolbox 와 nav2_amcl 모두 라이다 스캔 센서에서 정보를 사용하여 로봇 환경을 인식할 수 있습니다.

Costmap 2D Overview

Costmap 2D는 로봇의 주변 환경을 효과적으로 표현하여 안전한 이동을 가능하게 하는 데 중요한 역할을 합니다.

주로 라이다(LiDAR) 센서로부터 수집된 데이터를 기반으로 작동하며, 다음과 같은 특징을 가집니다.

환경 표현:

로봇의 주변 환경은 Costmap 2D를 통해 격자 형태의 그리드로 나타납니다. 각 격자 셀은 0에서 254 사이의 값으로 표현되며, 이는 해당 셀을 통과하는 데 필요한 비용을 의미합니다. 셀의 값에 따라 무료(0), 치명적으로 점유(254)된 곳을 나타내며, 이를 통해 로봇은 안전한 경로를 계획하고 이동할 수 있습니다.

구성:

Costmap 2D는 여러 레이어로 구성되어 있습니다. 정적 레이어(static layer), 장애물 레이어(obstacle layer), 복셀 레이어(voxel layer), 팽창 레이어(inflation layer) 등이 주로 사용됩니다. 각 레이어는 플러그인 기반으로 작동하며, 사용자가 필요에 따라 쉽게 사용자 정의할 수 있습니다.

주요 레이어:
  • 정적 레이어: SLAM을 통해 생성된 지도 정보를 나타냅니다.

  • 장애물 레이어: 라이다나 포인트 클라우드와 같은 센서로 감지된 장애물을 표현합니다.

  • 복셀 레이어: 3D 데이터를 처리하며, 주로 3D 라이다 센서 정보를 활용합니다.

  • 팽창 레이어: 로봇의 형태를 고려하여 장애물 주변에 추가 비용을 부여하여 충돌을 피합니다.

이렇게 Costmap 2D를 설정하고 구성함으로써 로봇은 주변 환경을 인식하고 안전하게 이동할 수 있습니다.

1.4 Footprint

Footprint 는 로봇의 2D 모양을 바닥으로 투영한 것으로, Nav2에서 경로를 계산하거나 계획하는 동안 충돌을 피하기 위해 주로 사용됩니다.

이 작업에 참여하는 알고리즘은 로봇이 코스트맵의 장애물과 충돌하지 않도록 보장합니다.

우리의 로봇에선 footprint 자리에 base_link 로 사용을 하고 있습니다. 로봇이 낮아서 유사하게 사용해도 상관 없다고 생각했기 때문입니다.

반경은 로봇의 반지름으로 설정을 하여서 0.16 이 나왔고 작은 로봇은 또 다른 값으로 사용할 수 있습니다.

footprint 는 local_costmap 과 global_costmap 둘 다 사용 되는데 일반적으로 global_costmap 에서는 원형, local_costmap 에서는 다각형이 사용됩니다.

하지만 우리 로봇은 둘 다 원형을 사용했습니다. 가장 큰 이유는 계산을 줄이고자 함이고, 다른 이유는 형태도 원형과 유사하기 때문입니다.

Footprint 는 Nav2의 경로 탐색 알고리즘에 중요한 역할을 합니다.

1.5 Navigation Plugins

이제 마지막 네비게이션의 플러그인 입니다. 로봇은 다양한 플래너와 컨트롤러 알고리즘을 사용하여 네비게이션 작업을 수행합니다.

로봇의 유형 및 환경에 따라 사용할 수 있는 알고리즘 플러그인에 대해 설명합니다.

우리의 로봇에도 다양한 플러그인이 사용된걸 확인할 수 있습니다.

zeta2_edu_autonomous/zeta2_navigation/params 폴더의 파일들을 각각 열어보면 다양한 플러그인들이 사용되는걸 볼 수 있습니다.

플래너와 컨트롤러 서버

내비게이션 알고리즘은 ROS 액션 서버에서 실행되는 플러그인을 통해 Nav2에 구현됩니다.

이 부분에서는 내비게이션 스택의 핵심인 플래너 및 컨트롤러 서버에 대해 설명합니다.

이러한 서버는 각각 특정 액션 또는 로봇 상태에 대해 맞춤 설정된 복수의 알고리즘 플러그인을 구현할 수 있습니다.

이 가이드에서는 로봇 유형 및 환경에 따라 다른 알고리즘을 강조할 것입니다.

플래너 서버 는 로봇의 경로를 계산하는 알고리즘을 구현하는 것이다. 예를 들어, 하나의 플러그인은 두 근접한 위치 간의 간단한 최단 경로를 계산하고, 다른 플러그인은 로봇 환경을 포괄하는 위치로의 경로를 계산할 수 있습니다.

컨트롤러 서버 는 로봇이 지역 환경에서 작업을 완료하는 데 필요한 적절한 제어 노력을 생성합니다. 이러한 작업에는 플래너 서버에서 생성된 경로를 따라가는 것, 이 경로에 따라 동적 장애물을 피하는 것, 그리고 도킹 스테이션에서 충전하는 것 등이 포함될 수 있습니다.

다음 내용에서 이 내용은 좀 더 자세히 다뤄볼 것이다.

요약

navigation2 를 사용하기 위한 기본적인 구성요소들을 배웠습니다.

이러한 구성 요소들이 정확히 설정되고 데이터가 올바르게 처리되어야 자율 주행이 원활하게 이루어질 수 있습니다.

더 자세한 설정 및 디버깅이 필요할 수 있지만, 이러한 기본적인 요소들을 이해하고 설정하는 것은 중요합니다.

다음 단계

다음 과정에선 사용할 수 있는 플래너에 대해서 알아보겠습니다.

Previous Next

© Copyright . Revision bf63d301.

Built with Sphinx using a theme provided by Read the Docs.