본문으로 건너뛰기

M09.06 · 모델·월드·Navigation 패키지 구조 분석

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • description/simulation/bringup/navigation의 파일·실행 책임과 의존/자료 경로를 설명한다.
  • 주어진 패키지 manifest의 이름/자산·joint/topic/frame/clock 참조를 대조해 결함/통과/미상을 판정한다.
  • 준비 관문/실행 증거·버전/초기 상태와 Classic 이식·재현/재검증 계획을 설계한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M05 패키지/launch, M08 모델과 M09.01~05의 구성/시간/로그를 연결한다. Navigation의 map·위치 추정·계획·제어 역할은 본문에서 보충하며 후속 M15·M17·M18의 알고리즘을 이미 배웠다고 가정하지 않는다. 기본은 합성 파일표 분석이고 실제 빌드/launch·ROS/Gazebo/Nav2 실행은 하지 않는다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

파일을 실행 책임에 연결해서 읽는다

로봇 예제를 이해하려면 파일을 위에서 아래로 읽는 것만으로 부족하다. 어떤 파일이 모델을 정의하고, 어떤 프로그램이 읽으며, 어느 이름/단위의 메시지가 어디로 이동하는지 그려야 한다. 패키지는 의존성/설치·실행 자산을 묶는 단위이고 폴더 이름 하나가 실제 동작을 보장하지 않는다. package.xml, CMakeLists.txt 또는 해당 build 방식의 설치 규칙과 launch/config의 관계를 확인한다.

Gazebo 공식 project template guide는 description, Gazebo 전용 코드, ROS application과 bringup의 역할을 나눈다. 공식 template의 정확한 패키지 이름/버전과 이 단위의 가상 이름은 다르다. template를 읽는 원칙을 적용할 뿐 현재 저장소를 복제/빌드하거나 실행했다고 쓰지 않는다. Jazzy/Harmonic 조합과 선택한 template revision·의존성을 별도로 고정한다.

가상 예의 mobile_description은 모델/메시·재질을, mobile_sim은 월드와 Gazebo system 구성을, mobile_bringup은 시작 절차/bridge·공통 인수를, mobile_navigation은 주행 application의 map/위치·계획/제어 설정을 가진다. 반드시 네 패키지로 나눠야 한다는 규칙은 아니다. 실제 패키지 구조와 책임을 명확히 설명하는 것이 목적이다.

description과 world·시작 절차를 구별한다

description에는 링크/관절과 visual/collision/inertial·센서 장착이 들어간다. world에는 중력/물리 step, 바닥/환경·모델 배치와 필요한 system이 들어간다. bringup은 필요한 실행과 인수/설정 경로를 연결한다. 파일에 써 있다는 것, 설치/검색할 수 있다는 것, 해당 실행이 실제로 읽었다는 것을 다른 관문으로 본다.

예를 들어 worlds/demo.sdf라는 파일 안에 <world name="lab">가 있어도 모순은 아니다. 파일명과 런타임 world 이름은 다른 식별자다. Transport clock/control의 world 경로를 파일명 demo로 추정하면 틀릴 수 있다. model 파일/생성 요청과 실제 entity 이름도 구분하고 rename/중복·reset의 세대와 연결한다.

joint 참조도 문자열의 정확한 대응이 필요하다. 모델이 wheel_left_joint를 정의했는데 DiffDrive의 left_joint가 left_wheel_joint를 가리키면 같은 의미처럼 보여도 실제 식별자가 다르다. system 로드/모델 연결·자산/축과 실제 상태를 확인한다. 단순 검색/문자열 검사 통과는 물리·제어 성능 검증과 별도다.

source의 파일과 실행이 찾는 설치 자산을 대조한다

source는 개발 원본이고 install은 build/설치 절차가 만든 실행/검색 대상이다. 원본 메시 파일이 있어도 설치 대상/검색 경로에서 빠지면 다른 위치에서 실행할 때 찾지 못할 수 있다. Jazzy ament_cmake 공식 문서의 패키지 등록/설치와 실제 자산 규칙을 확인한다. build가 성공했다고 필요한 비코드 자산이 전부 설치되었다고 결론내리지 않는다.

Gazebo의 자산 검색/URI와 ROS의 패키지 검색도 동일한 규칙이라고 가정하지 않는다. 공식 guide는 GZ_SIM_RESOURCE_PATH와 모델 설치/환경 hook 등 자산 접근을 설명한다. package:///model://와 변환/검색 지원은 사용하는 loader/버전의 계약으로 확인한다. 실행 환경에 우연히 남아 있는 개발 경로 덕분에 보이는 자산과 독립 환경에서 재현 가능한 설치를 나눈다.

launch 인수로 world/robot 이름과 config 경로를 바꾸면 bridge/TF·센서 topic도 같은 대상을 가리키는지 대조한다. 전역 절대 토픽과 상대/namespace 토픽, frame 문자열은 다른 층이다. 하드코딩된 다른 로봇 이름을 놓치면 정상처럼 보이는 잘못된 대상의 상태를 구독할 수 있다.

Navigation은 환경/위치·계획/제어의 연결이다

Navigation은 목적지로 가기 위한 위치/지도·경로 계획과 현재 상태에 맞는 제어/결과 판단을 연결하는 application이다. map은 전역 공간 기준, odom은 연속 로컬 운동, base_link는 로봇 강체 기준이다. map 파일을 읽는 노드와 현재 로봇 위치를 지도에 연결하는 추정기는 다른 책임이다. planner의 경로와 controller의 속도 명령·실제 도착도 나누어 본다.

이 단위는 구체적인 탐색/SLAM·Nav2 알고리즘을 실행하지 않는다. 주어진 frame/topic·clock/상태가 다음 단계의 입력을 제공하는지 분석한다. 지도/전역 추정이 없는 구성에서 map→odom이 미상이면 global_frame=map이라고 적는 것만으로 준비가 완료되지 않는다. lifecycle/서비스 수락과 현재 입력·계산/실제 실행 결과도 구분한다. 상세 알고리즘은 후속 단원의 역할이며 여기서는 필요한 전제를 표로 제공한다.

완전한 가상 manifest에서 여섯 참조를 검사한다

다음은 교육용 파일/관측 표다. 나열한 내용 외에 숨겨진 경로/발행자는 없다고 가정한다. 실제 파일이 저장되어 있거나 프로그램이 실행된 결과는 아니다. 자산 검색은 주어진 install 경로만 사용한다.

ID요구/실제 정의설정/관찰 기록
F1demo.sdf 안의 world=lab, 관측 clock=/world/lab/clockbridge는 /world/demo/clock을 구독
F2실제 왼쪽 joint=wheel_left_jointDiffDrive left_joint=left_wheel_joint
F3설치 모델 mobile_demo/model.sdf가 검색 경로에 존재생성 요청은 그 모델을 참조
F4mesh base.dae는 source에만 있고 install에는 없음실행 loader는 install 자산 경로만 검색
F5Navigation global_frame=map/base=base_linkmap→odom과 전역 위치 상태는 아직 없음
F6Transport cmd=/model/mobile_demo/cmd_vel, 형식 gz.msgs.Twistbridge는 ROS /cmd_vel의 Twist를 해당 이름으로 ROS_TO_GZ 연결

이번 검사 범위를 정한다. F1은 clock 이름 대응, F2는 joint 이름 대응, F3/F4는 주어진 자산 참조 가능성, F5는 전역 주행 frame 준비, F6은 명령 토픽의 이름/지원 형식/방향 대응이다. 각각의 정적 계약을 확인하는 것이며 실제 메시지 수신/이동을 이미 확인했다고 하지 않는다.

F1은 world 이름이 lab이라 demo 경로가 틀렸고, F2는 joint 식별자가 틀렸으며, F4는 설치 검색에서 자산을 찾을 수 없어 실패다. F3의 모델 참조와 F6의 이름/형식/방향은 주어진 범위에서 통과한다. F5는 전역 상태/TF 입력이 없어 준비 보류다. 합은 통과 2·실패 3·보류 1이다. 이 개수는 구성 참조 검사 결과이며 주행 성공률이 아니다.

준비 순서와 실패 근거를 따라간다

준비 표는 자산/모델·월드/system 확인→실제 world/entity/초기 상태→clock/노드 시간→sensor/TF/odom·bridge→위치/지도와 application 입력→명령/제한·결과의 관문으로 구성할 수 있다. 파일이 로드되는 순서와 준비된 순서는 같지 않다. 단순히 몇 초 기다리거나 모든 process가 떴다는 사실로 다음 관문을 통과시키지 않는다. 필요한 후속 관측/유효 시각과 오류/미상을 확인한다.

F1을 고치면 clock source/수신·use_sim_time을, F2는 모델의 축/구동 mode와 joint 상태를, F4는 설치/검색·실제 loader의 자산 경로를 재검증한다. F5에는 유효한 map/위치·frame 소유/시각과 준비 절차가 필요하다. F6이 정적으로 맞아도 실제 전달/물리·제어·제동을 별도 확인한다. 수정한 파일과 실제로 읽힌 config·버전/원본을 연결한다.

Classic 예제를 이식할 때는 package/launch·system library와 SDF/센서 지원, Transport/ROS 형식·토픽/시각·TF·자산 검색을 기능별로 대조한다. 이름을 일괄 바꾼 뒤 같은 동작을 보장하지 않는다. 원본/대상 버전·기능 차이·미지원/대체와 정상/오류 사례를 기록한다. 기존 기준 실습 환경과 6.7 트러블슈팅을 연결해 원인 가설과 확인된 사실을 나누자. 분석 과제의 완료는 실제 모바일 로봇/Navigation 실증의 완료가 아니다.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

입력은 가상 네 패키지의 역할과 F1~F6 manifest, 주어진 검색/형식·frame 조건이다.

  1. 파일/패키지→실행→입출력/자산의 책임/의존 그래프를 문장/표로 작성한다.
  2. 여섯 참조를 정한 범위에서 판정하고 불일치/미상·필요한 수정과 통과/실패/보류 개수를 적는다.
  3. 준비 관문/후속 관측·설정/버전/초기 상태와 Classic 이식·재현/재검증 계획을 작성한다.

관찰은 책임/자료 흐름, 참조 판정, 준비/근거로 나눈다. 막히면 파일명/world 이름과 source/install, 정적 대응/실제 실행을 다른 열에 적는다. 실제 저장소 복제/빌드·시뮬레이터 설치는 필요하지 않다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

description/world/bringup/navigation은 모두 로봇 파일이니 한 파일의 성공만 보면 되는가? 각 책임과 source/install·실행 의존을 설명하라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

파일은 park.sdf, 내부 world=warehouse이며 clock도 /world/warehouse/clock이다. bridge가 /world/park/clock을 구독하면 어떤가? mesh가 install 검색 경로에 없고 원본에만 있으면 build 성공으로 찾을 수 있다고 확정할 수 있는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

Classic plugin 이름을 Harmonic 이름으로 바꾸고 launch process가 떴다. Navigation/주행·센서/시간이 검증되었다고 할 수 있는가? 필요한 준비/이식·재현 근거를 적어라.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.