diff --git a/backups/week3-before-camera-1790141511968.json b/backups/week3-before-camera-1790141511968.json new file mode 100644 index 0000000..9d65e16 --- /dev/null +++ b/backups/week3-before-camera-1790141511968.json @@ -0,0 +1,7178 @@ +[ + { + "id": "26d46589-31a5-4d94-b0e0-385a12c41721", + "slug": "nav2-autonomy-f445f63c-efa", + "title": "2026 교육원 테스트", + "subtitle": "ROS2, 시뮬레이션, SLAM부터 경로 계획과 제어까지", + "description": "ROS2와 NAV2 기반 시뮬레이션 및 플랫폼 실습을 통해 자율주행 시스템의 핵심 흐름을 학습하고 팀 프로젝트로 검증합니다.", + "organizationName": "영남대학교", + "teacherId": "f445f63c-efa8-4b65-8f2c-a20ee3d390fa", + "isActive": true, + "createdAt": "2026-09-09T06:01:24.848Z", + "updatedAt": "2026-09-09T06:01:24.848Z", + "weeks": [ + { + "id": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 1, + "title": "ROS2 & Simulation", + "tags": [ + "MK-mini", + "진행중" + ], + "progress": 0, + "state": "current", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "ROS2 통신 구조와 Gazebo 시뮬레이션 환경을 구성하고, LiDAR SLAM·위치추정·경로 계획·제어까지 NAV2 자율주행 파이프라인을 실습합니다.", + "deliverable": "NAV2 모듈 소스 변경 내역, SLAM 결과 맵, 목표 지점 주행 검증 화면 및 실행 로그를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-09-09T06:01:24.851Z", + "updatedAt": "2026-09-09T06:01:24.851Z", + "modules": [ + { + "id": "af12ada0-ac1e-44dd-89d3-86a89754acc4", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.861Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "bc89fbbc-7e44-4228-8f50-70b6800bbf45", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.863Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "fab88d49-946d-43dd-9431-d294c7772ded", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.865Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "c20541b8-cdb1-4295-b9a3-6b10bb43ae07", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.867Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "de678e31-228a-442d-9e98-e8e09c3a3238", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.869Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3ca72ae8-97d9-487a-b766-a586e11a048f", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.871Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "5fe16dc8-d0b3-4f60-8efb-959855f38a26", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.873Z", + "updatedAt": "2026-09-09T06:01:24.873Z" + }, + { + "id": "b431598e-5541-4272-a953-0951be68e8e2", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.875Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "c6c605cf-d72e-4db5-84a7-ad098a74cb79", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.877Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "6458e955-6c31-4528-9683-455a42e6a78c", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-TurtleBot3Burger", + "folderName": "[lms-nav2-gazebo-vehicle]nav2-vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-vehicle/1.0.0/prebuilt/latest/lms-nav2-gazebo-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "42e8179172c178978e5ae5d48e189164f6b8a5030fdaa0eba497ca86a97e96bb" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.879Z", + "updatedAt": "2026-09-09T06:01:24.879Z" + }, + { + "id": "2b97ac9b-b036-4dd3-ac8c-7eec8352c142", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 11, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2:humble-jetson_orin", + "createdAt": "2026-09-09T06:01:24.880Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "317f2de8-439b-41b7-ab5e-9e24e701384f", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 12, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.882Z", + "updatedAt": "2026-09-09T06:01:24.882Z" + }, + { + "id": "018e8115-24b1-4780-9f1b-be256c22e8ce", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 13, + "category": "System", + "name": "NAV2-Yahboom-Agent", + "folderName": "[lms-nav2-yahboom-agent]yahboom_agent_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-agent.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-agent/1.0.0/prebuilt/arm64/ec2b2c4578fc71b9/lms-nav2-yahboom-agent-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-agent-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "ec2b2c4578fc71b95c720dcacca5e7c7c5d08400fc80ef21a16097d31869cf9d" + } + ], + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ], + "dockerImage": "future-nav2:humble-yahboom-agent", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "90d77f3b-cb9c-4582-a3a6-8f80299b35e2", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 14, + "category": "Vehicle", + "name": "NAV2-Yahboom", + "folderName": "[lms-nav2-yahboom-vehicle]yahboom_vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/amd64/d54368061d520794/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d54368061d52079489a8d686461e6672ebb84ca0f531fb71f835717b3f2a031f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/arm64/f409c0b61ca9497d/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f409c0b61ca9497d4cfd1c2af9f4e137d9316364cab664bb908818f6ecab8331" + } + ], + "defaultParameters": [ + "sim_mode:=false" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:55:16.092Z" + }, + { + "id": "fe081ac8-0ce0-4109-81e3-b4d504c86806", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 15, + "category": "Localization", + "name": "NAV2-Yahboom-Slam", + "folderName": "[lms-nav2-yahboom-slam]yahboom_slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-slam/1.0.0/prebuilt/arm64/f6444fe604f50ee0/lms-nav2-yahboom-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f6444fe604f50ee00831fc7db121bbebfea6be920b55a498ddc54fc317093c77" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "d4fa2ab4-05d6-4242-a925-5b389b784f22", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 16, + "category": "Map", + "name": "NAV2-Yahboom-Map", + "folderName": "[lms-nav2-yahboom-map]yahboom_map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-map/1.0.0/prebuilt/arm64/111981b9ab460ce4/lms-nav2-yahboom-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "111981b9ab460ce450334e5c367e97b7e757ef55d84330ca030b096d4a9c4792" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "c95db4b0-55b3-497e-a7ae-a752bbc9eafa", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 17, + "category": "Localization", + "name": "NAV2-Yahboom-Localization", + "folderName": "[lms-nav2-yahboom-localization]yahboom_localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-localization/1.0.0/prebuilt/arm64/d6534d48841a751c/lms-nav2-yahboom-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d6534d48841a751cb2e21fa73785df61fb81815b406c9c4152c9cbfd0ae59e48" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "23fc9b10-0c1f-4d44-b7cf-ff80ab8e6bc9", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 18, + "category": "Planning", + "name": "NAV2-Yahboom-Planning", + "folderName": "[lms-nav2-yahboom-planning]yahboom_planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-planning/1.0.0/prebuilt/arm64/050f4ed4acba795a/lms-nav2-yahboom-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "050f4ed4acba795affec8306b7eef116e9e86fd0f42e492da27c7fc624dc8570" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "360c69d8-fd10-4072-a13b-01922dfa0d8d", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 19, + "category": "Control", + "name": "NAV2-Yahboom-Control", + "folderName": "[lms-nav2-yahboom-control]yahboom_control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-control/1.0.0/prebuilt/arm64/be7147024d890249/lms-nav2-yahboom-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "be7147024d89024915f1481a47a0909ea1d06196ef9e9797f260739999e09b3f" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "740cc0db-bb0b-47e0-85ce-9fcf3a7b598b", + "weekId": "2a4e0f31-7816-482d-ba0e-9f363146af7c", + "sortOrder": 20, + "category": "Perception", + "name": "NAV2-Yahboom-Camera", + "folderName": "[lms-nav2-yahboom-camera]yahboom_camera_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-camera.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-camera/1.0.0/prebuilt/arm64/b950a71d5babcdb3/lms-nav2-yahboom-camera-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-camera-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b950a71d5babcdb37e46c7674fb80d0ae8c076e7d7c1186042b1b1f6e7ee2d04" + } + ], + "defaultParameters": [ + "video_device:=/dev/video0" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + } + ] + }, + { + "id": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 2, + "title": "Autonomy Studio 팀 프로젝트", + "tags": [ + "MK-mini", + "진행예정" + ], + "progress": 0, + "state": "locked", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "3~4인 팀으로 자율주행 알고리즘이 필요한 문제 상황을 정의하고, 센서 구성과 NAV2 모듈을 조합해 시뮬레이션과 플랫폼에서 검증합니다.", + "deliverable": "팀 프로젝트 소스, 시스템 구성도, 시뮬레이션 및 플랫폼 주행 검증 결과, 발표 자료를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-09-09T06:01:24.884Z", + "updatedAt": "2026-09-09T06:01:24.884Z", + "modules": [ + { + "id": "5a42a1ae-e15c-436a-bde3-61b433eb672a", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.924Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3bafb29e-3dfa-488a-a7f8-334af22c8721", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.926Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "5768b8f1-06ea-423b-8cc6-e7e22b004172", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.927Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "20cb031f-195c-4972-a611-bce4eebe0341", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.929Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "b42c682a-2a82-4e01-be5e-16871cddc76e", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.930Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "8cfd8e39-4489-40c1-8185-3c16c56ec769", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.932Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "378c8143-b855-414f-8abe-308d58a5d77a", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.933Z", + "updatedAt": "2026-09-09T06:01:24.933Z" + }, + { + "id": "77a1da7d-7d9b-4aba-a4ca-7ba9dae05fd1", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.934Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "8b4e870f-4054-4224-ba8c-4ef963b737f8", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.936Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "7c553352-825a-42be-a6e2-1ddaa82ea043", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-TurtleBot3Burger", + "folderName": "[lms-nav2-gazebo-vehicle]nav2-vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-vehicle/1.0.0/prebuilt/latest/lms-nav2-gazebo-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "42e8179172c178978e5ae5d48e189164f6b8a5030fdaa0eba497ca86a97e96bb" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.938Z", + "updatedAt": "2026-09-09T06:01:24.938Z" + }, + { + "id": "3c64c5e3-77ff-4d34-b2b5-69a2c7d28943", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 11, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2:humble-jetson_orin", + "createdAt": "2026-09-09T06:01:24.940Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "f96c1462-1a6c-4be6-9700-ba5e8dfceb59", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 12, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-09T06:01:24.941Z", + "updatedAt": "2026-09-09T06:01:24.941Z" + }, + { + "id": "24649bf5-6216-49b9-bd7b-79b454bca31a", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 13, + "category": "System", + "name": "NAV2-Yahboom-Agent", + "folderName": "[lms-nav2-yahboom-agent]yahboom_agent_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-agent.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-agent/1.0.0/prebuilt/arm64/ec2b2c4578fc71b9/lms-nav2-yahboom-agent-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-agent-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "ec2b2c4578fc71b95c720dcacca5e7c7c5d08400fc80ef21a16097d31869cf9d" + } + ], + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ], + "dockerImage": "future-nav2:humble-yahboom-agent", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "9fad4a9a-29d5-4718-9345-7d72bc25c6d7", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 14, + "category": "Vehicle", + "name": "NAV2-Yahboom", + "folderName": "[lms-nav2-yahboom-vehicle]yahboom_vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/amd64/d54368061d520794/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d54368061d52079489a8d686461e6672ebb84ca0f531fb71f835717b3f2a031f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/arm64/f409c0b61ca9497d/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f409c0b61ca9497d4cfd1c2af9f4e137d9316364cab664bb908818f6ecab8331" + } + ], + "defaultParameters": [ + "sim_mode:=false" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:55:16.092Z" + }, + { + "id": "74cfb0a2-1de5-49cd-b855-b30f5ba4e29b", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 15, + "category": "Localization", + "name": "NAV2-Yahboom-Slam", + "folderName": "[lms-nav2-yahboom-slam]yahboom_slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-slam/1.0.0/prebuilt/arm64/f6444fe604f50ee0/lms-nav2-yahboom-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f6444fe604f50ee00831fc7db121bbebfea6be920b55a498ddc54fc317093c77" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "c3180f5e-ce78-4f56-be6c-dff004d92e5c", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 16, + "category": "Map", + "name": "NAV2-Yahboom-Map", + "folderName": "[lms-nav2-yahboom-map]yahboom_map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-map/1.0.0/prebuilt/arm64/111981b9ab460ce4/lms-nav2-yahboom-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "111981b9ab460ce450334e5c367e97b7e757ef55d84330ca030b096d4a9c4792" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "5d73fe3c-27a3-42eb-819a-6257bfac2f2f", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 17, + "category": "Localization", + "name": "NAV2-Yahboom-Localization", + "folderName": "[lms-nav2-yahboom-localization]yahboom_localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-localization/1.0.0/prebuilt/arm64/d6534d48841a751c/lms-nav2-yahboom-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d6534d48841a751cb2e21fa73785df61fb81815b406c9c4152c9cbfd0ae59e48" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "f7dd3726-8ba3-456d-8ed1-81111435b947", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 18, + "category": "Planning", + "name": "NAV2-Yahboom-Planning", + "folderName": "[lms-nav2-yahboom-planning]yahboom_planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-planning/1.0.0/prebuilt/arm64/050f4ed4acba795a/lms-nav2-yahboom-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "050f4ed4acba795affec8306b7eef116e9e86fd0f42e492da27c7fc624dc8570" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "199b037e-86e2-427b-83e3-46da8c6db34a", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 19, + "category": "Control", + "name": "NAV2-Yahboom-Control", + "folderName": "[lms-nav2-yahboom-control]yahboom_control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-control/1.0.0/prebuilt/arm64/be7147024d890249/lms-nav2-yahboom-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "be7147024d89024915f1481a47a0909ea1d06196ef9e9797f260739999e09b3f" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "c5e38be3-a6ce-40d3-ad0f-4aea462c21d6", + "weekId": "09f28f7c-088f-4aa1-a36f-0510c5cd67c5", + "sortOrder": 20, + "category": "Perception", + "name": "NAV2-Yahboom-Camera", + "folderName": "[lms-nav2-yahboom-camera]yahboom_camera_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-camera.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-camera/1.0.0/prebuilt/arm64/b950a71d5babcdb3/lms-nav2-yahboom-camera-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-camera-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b950a71d5babcdb37e46c7674fb80d0ae8c076e7d7c1186042b1b1f6e7ee2d04" + } + ], + "defaultParameters": [ + "video_device:=/dev/video0" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + } + ] + }, + { + "id": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 3, + "title": "원격 개발", + "tags": [ + "MK-mini", + "진행예정" + ], + "progress": 0, + "state": "locked", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "원거리 MK-mini 플랫폼을 연결하고 원격으로 코드를 편집·빌드·실행합니다. 로컬 MK-mini 시뮬레이션과 실차에서 SLAM 및 자율주행을 검증합니다.", + "deliverable": "SLAM 저장 맵, 자율주행 검증 결과, 원격 개발 소스 변경 내역 및 실행 로그를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-09-22T06:11:52.660Z", + "updatedAt": "2026-09-22T06:11:52.660Z", + "modules": [ + { + "id": "0c78ec6f-0cb4-4682-8045-583973d60c98", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.792Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "ecf9e32e-3ab7-4a81-bdba-a0850037daa6", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.824Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "5f8ed3db-acfe-43b1-a90b-ae0f6b1ca893", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.840Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3c7110f6-1720-43ea-8f86-5f0dd31430fa", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.857Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "100110a7-6619-4431-b323-4838628c8fce", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.874Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "8d7779f4-60af-4076-99d5-f68c551622c9", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.890Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "fe761922-4638-4e3a-a5bb-3050a097fd67", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.905Z", + "updatedAt": "2026-09-22T06:11:52.905Z" + }, + { + "id": "0447e787-64da-4363-9ba0-3f4131618162", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.922Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "966ea751-3020-4d46-998e-38fe779d0bcf", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.938Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "6d0d71c8-4344-4633-ba7a-6866324994a8", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d", + "simulator:=gazebo" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.954Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3c134049-7efb-4fd0-a9d5-fe422ef8fe86", + "weekId": "f0974b58-986b-41bd-968b-7a3e56fe3e35", + "sortOrder": 11, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:52.970Z", + "updatedAt": "2026-09-22T06:11:52.970Z" + } + ] + } + ], + "environmentProfiles": [ + { + "id": "2e313661-fa84-4447-9c28-6ecc490ce52a", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 3, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "0c78ec6f-0cb4-4682-8045-583973d60c98", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "ecf9e32e-3ab7-4a81-bdba-a0850037daa6", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ] + }, + { + "id": "5f8ed3db-acfe-43b1-a90b-ae0f6b1ca893", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "3c7110f6-1720-43ea-8f86-5f0dd31430fa", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "100110a7-6619-4431-b323-4838628c8fce", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ] + }, + { + "id": "8d7779f4-60af-4076-99d5-f68c551622c9", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "0447e787-64da-4363-9ba0-3f4131618162", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "966ea751-3020-4d46-998e-38fe779d0bcf", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ] + }, + { + "id": "6d0d71c8-4344-4633-ba7a-6866324994a8", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-09-22T06:11:53.018Z", + "updatedAt": "2026-09-22T06:11:53.018Z" + }, + { + "id": "32bdadfa-aa41-4c04-9ff5-cbdbd83e517d", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 2, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "9fad4a9a-29d5-4718-9345-7d72bc25c6d7", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "24649bf5-6216-49b9-bd7b-79b454bca31a", + "dockerImage": "future-nav2:humble-yahboom-agent", + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ] + }, + { + "id": "c5e38be3-a6ce-40d3-ad0f-4aea462c21d6", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "video_device:=/dev/video0" + ] + }, + { + "id": "74cfb0a2-1de5-49cd-b855-b30f5ba4e29b", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "5d73fe3c-27a3-42eb-819a-6257bfac2f2f", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "199b037e-86e2-427b-83e3-46da8c6db34a", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "f7dd3726-8ba3-456d-8ed1-81111435b947", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "c3180f5e-ce78-4f56-be6c-dff004d92e5c", + "dockerImage": "future-nav2:humble-yahboom" + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-09-09T06:01:24.946Z", + "updatedAt": "2026-09-22T06:27:14.353Z" + }, + { + "id": "381c7331-b9f4-423f-bfc5-89a602a2cf73", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 3, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "0c78ec6f-0cb4-4682-8045-583973d60c98", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "ecf9e32e-3ab7-4a81-bdba-a0850037daa6", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ] + }, + { + "id": "5f8ed3db-acfe-43b1-a90b-ae0f6b1ca893", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "3c7110f6-1720-43ea-8f86-5f0dd31430fa", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "8d7779f4-60af-4076-99d5-f68c551622c9", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "fe761922-4638-4e3a-a5bb-3050a097fd67", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=mkmini" + ] + }, + { + "id": "0447e787-64da-4363-9ba0-3f4131618162", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "6d0d71c8-4344-4633-ba7a-6866324994a8", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d", + "simulator:=gazebo" + ] + }, + { + "id": "3c134049-7efb-4fd0-a9d5-fe422ef8fe86", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-09-22T06:11:52.986Z", + "updatedAt": "2026-09-22T06:11:52.986Z" + }, + { + "id": "7fe65cff-0d03-4fcd-9b6a-46814f5da017", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 1, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "90d77f3b-cb9c-4582-a3a6-8f80299b35e2", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "018e8115-24b1-4780-9f1b-be256c22e8ce", + "dockerImage": "future-nav2:humble-yahboom-agent", + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ] + }, + { + "id": "740cc0db-bb0b-47e0-85ce-9fcf3a7b598b", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "video_device:=/dev/video0" + ] + }, + { + "id": "fe081ac8-0ce0-4109-81e3-b4d504c86806", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "c95db4b0-55b3-497e-a7ae-a752bbc9eafa", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "360c69d8-fd10-4072-a13b-01922dfa0d8d", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "23fc9b10-0c1f-4d44-b7cf-ff80ab8e6bc9", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "d4fa2ab4-05d6-4242-a925-5b389b784f22", + "dockerImage": "future-nav2:humble-yahboom" + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-09-09T06:01:24.946Z", + "updatedAt": "2026-09-22T06:27:14.319Z" + }, + { + "id": "8cc79b5f-4122-4742-b6ce-54e725c6f841", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 1, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "af12ada0-ac1e-44dd-89d3-86a89754acc4", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ] + }, + { + "id": "bc89fbbc-7e44-4228-8f50-70b6800bbf45", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "localization_mode:=amcl" + ] + }, + { + "id": "fab88d49-946d-43dd-9431-d294c7772ded", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "c20541b8-cdb1-4295-b9a3-6b10bb43ae07", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "3ca72ae8-97d9-487a-b766-a586e11a048f", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "5fe16dc8-d0b3-4f60-8efb-959855f38a26", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ] + }, + { + "id": "b431598e-5541-4272-a953-0951be68e8e2", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "6458e955-6c31-4528-9683-455a42e6a78c", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ] + }, + { + "id": "2b97ac9b-b036-4dd3-ac8c-7eec8352c142", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "317f2de8-439b-41b7-ab5e-9e24e701384f", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + }, + { + "id": "90d77f3b-cb9c-4582-a3a6-8f80299b35e2", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=true" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-09-09T06:01:24.946Z", + "updatedAt": "2026-09-22T06:27:14.254Z" + }, + { + "id": "d131006c-beca-4c48-a8bf-fc28ac9b5e8f", + "courseId": "26d46589-31a5-4d94-b0e0-385a12c41721", + "week": 2, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "5a42a1ae-e15c-436a-bde3-61b433eb672a", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ] + }, + { + "id": "3bafb29e-3dfa-488a-a7f8-334af22c8721", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "localization_mode:=amcl" + ] + }, + { + "id": "5768b8f1-06ea-423b-8cc6-e7e22b004172", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "20cb031f-195c-4972-a611-bce4eebe0341", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "8cfd8e39-4489-40c1-8185-3c16c56ec769", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "378c8143-b855-414f-8abe-308d58a5d77a", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ] + }, + { + "id": "77a1da7d-7d9b-4aba-a4ca-7ba9dae05fd1", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "7c553352-825a-42be-a6e2-1ddaa82ea043", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ] + }, + { + "id": "3c64c5e3-77ff-4d34-b2b5-69a2c7d28943", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "f96c1462-1a6c-4be6-9700-ba5e8dfceb59", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + }, + { + "id": "9fad4a9a-29d5-4718-9345-7d72bc25c6d7", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=true" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-09-09T06:01:24.946Z", + "updatedAt": "2026-09-22T06:27:14.336Z" + } + ] + }, + { + "id": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "slug": "futuredrive-autonomy-basic", + "title": "NAV2 기반 자율주행 교육 과정", + "subtitle": "ROS2, 시뮬레이션, SLAM부터 경로 계획과 제어까지", + "description": "ROS2와 NAV2 기반 시뮬레이션 및 플랫폼 실습을 통해 자율주행 시스템의 핵심 흐름을 학습하고 팀 프로젝트로 검증합니다.", + "organizationName": "퓨처드라이브", + "teacherId": "d077267d-420d-4bf6-b2ef-4f79a68251b6", + "isActive": true, + "createdAt": "2026-06-30T09:58:46.538Z", + "updatedAt": "2026-06-30T09:58:47.035Z", + "weeks": [ + { + "id": "119a0983-d68d-4579-925e-60daed0e1dec", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 1, + "title": "ROS2 & Simulation", + "tags": [ + "MK-mini", + "진행중" + ], + "progress": 0, + "state": "current", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "ROS2 통신 구조와 Gazebo 시뮬레이션 환경을 구성하고, LiDAR SLAM·위치추정·경로 계획·제어까지 NAV2 자율주행 파이프라인을 실습합니다.", + "deliverable": "NAV2 모듈 소스 변경 내역, SLAM 결과 맵, 목표 지점 주행 검증 화면 및 실행 로그를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-06-30T09:58:46.538Z", + "updatedAt": "2026-06-30T09:58:46.538Z", + "modules": [ + { + "id": "dd8acfbd-7f66-41b7-a5ef-60c0bc669825", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "31ac8bd3-6b92-44bb-955c-248cda322e61", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "618ceb2e-45b8-4220-8469-9d6947e2abba", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "fb5cd244-e132-4d3d-8248-70534df07309", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "71503810-840b-4a6b-8537-735067bbf62e", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-11T06:01:46.944Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "b4bb8026-da5f-4a57-a9b0-4dc667f6acb9", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "ec932f99-8911-4327-bc55-e38805bfa88a", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "c4eaa655-ff69-4aed-9c74-41552d2845f1", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "fb3e7227-2da4-453d-8798-e5b7b9d99da9", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-11T06:01:46.944Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "6be04dd5-8705-4eb5-96cc-b69282ca7b03", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-TurtleBot3Burger", + "folderName": "[lms-nav2-gazebo-vehicle]nav2-vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-vehicle/1.0.0/prebuilt/latest/lms-nav2-gazebo-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "42e8179172c178978e5ae5d48e189164f6b8a5030fdaa0eba497ca86a97e96bb" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "bafcb2ea-e4f1-458b-bcb1-5c84306ae845", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 11, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2:humble-jetson_orin", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "6bcb11f1-28ce-4eff-aaa0-81737199a807", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 12, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-07T00:34:42.804Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "b77f3bd0-c7f5-47a6-aaf1-4c97b8d9ee61", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 13, + "category": "System", + "name": "NAV2-Yahboom-Agent", + "folderName": "[lms-nav2-yahboom-agent]yahboom_agent_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-agent.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-agent/1.0.0/prebuilt/arm64/ec2b2c4578fc71b9/lms-nav2-yahboom-agent-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-agent-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "ec2b2c4578fc71b95c720dcacca5e7c7c5d08400fc80ef21a16097d31869cf9d" + } + ], + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ], + "dockerImage": "future-nav2:humble-yahboom-agent", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "55636ffe-88c4-4c0a-8d9b-96b678b9fb53", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 14, + "category": "Vehicle", + "name": "NAV2-Yahboom", + "folderName": "[lms-nav2-yahboom-vehicle]yahboom_vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/amd64/d54368061d520794/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d54368061d52079489a8d686461e6672ebb84ca0f531fb71f835717b3f2a031f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/arm64/f409c0b61ca9497d/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f409c0b61ca9497d4cfd1c2af9f4e137d9316364cab664bb908818f6ecab8331" + } + ], + "defaultParameters": [ + "sim_mode:=false" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:55:16.092Z" + }, + { + "id": "e42f92d1-0d5c-4d3f-a66f-0d1fe317637d", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 15, + "category": "Localization", + "name": "NAV2-Yahboom-Slam", + "folderName": "[lms-nav2-yahboom-slam]yahboom_slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-slam/1.0.0/prebuilt/arm64/f6444fe604f50ee0/lms-nav2-yahboom-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f6444fe604f50ee00831fc7db121bbebfea6be920b55a498ddc54fc317093c77" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "356f971a-8750-45f1-9ddd-a3c70bd72912", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 16, + "category": "Map", + "name": "NAV2-Yahboom-Map", + "folderName": "[lms-nav2-yahboom-map]yahboom_map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-map/1.0.0/prebuilt/arm64/111981b9ab460ce4/lms-nav2-yahboom-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "111981b9ab460ce450334e5c367e97b7e757ef55d84330ca030b096d4a9c4792" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "421db22e-154d-4df9-8190-ccb65dec6b68", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 17, + "category": "Localization", + "name": "NAV2-Yahboom-Localization", + "folderName": "[lms-nav2-yahboom-localization]yahboom_localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-localization/1.0.0/prebuilt/arm64/d6534d48841a751c/lms-nav2-yahboom-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d6534d48841a751cb2e21fa73785df61fb81815b406c9c4152c9cbfd0ae59e48" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "fe514053-5b6b-4dad-b6d7-0191fa5e8ef4", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 18, + "category": "Planning", + "name": "NAV2-Yahboom-Planning", + "folderName": "[lms-nav2-yahboom-planning]yahboom_planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-planning/1.0.0/prebuilt/arm64/050f4ed4acba795a/lms-nav2-yahboom-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "050f4ed4acba795affec8306b7eef116e9e86fd0f42e492da27c7fc624dc8570" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "276f4df2-f214-4ba9-aea6-04e23491a569", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 19, + "category": "Control", + "name": "NAV2-Yahboom-Control", + "folderName": "[lms-nav2-yahboom-control]yahboom_control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-control/1.0.0/prebuilt/arm64/be7147024d890249/lms-nav2-yahboom-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "be7147024d89024915f1481a47a0909ea1d06196ef9e9797f260739999e09b3f" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "b1e9b92f-bbab-4759-9e9b-637dbe12066c", + "weekId": "119a0983-d68d-4579-925e-60daed0e1dec", + "sortOrder": 20, + "category": "Perception", + "name": "NAV2-Yahboom-Camera", + "folderName": "[lms-nav2-yahboom-camera]yahboom_camera_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-camera.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-camera/1.0.0/prebuilt/arm64/b950a71d5babcdb3/lms-nav2-yahboom-camera-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-camera-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b950a71d5babcdb37e46c7674fb80d0ae8c076e7d7c1186042b1b1f6e7ee2d04" + } + ], + "defaultParameters": [ + "video_device:=/dev/video0" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + } + ] + }, + { + "id": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 2, + "title": "Autonomy Studio 팀 프로젝트", + "tags": [ + "MK-mini", + "진행예정" + ], + "progress": 0, + "state": "locked", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "3~4인 팀으로 자율주행 알고리즘이 필요한 문제 상황을 정의하고, 센서 구성과 NAV2 모듈을 조합해 시뮬레이션과 플랫폼에서 검증합니다.", + "deliverable": "팀 프로젝트 소스, 시스템 구성도, 시뮬레이션 및 플랫폼 주행 검증 결과, 발표 자료를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-06-30T09:58:46.538Z", + "updatedAt": "2026-06-30T09:58:46.538Z", + "modules": [ + { + "id": "238bd78c-14f7-4707-9964-4b8ace1cfb42", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "c892dd62-6cbe-43c0-84ce-bfb2086a872a", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "611ba2e2-6034-4121-bb9b-716df5e0ad96", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "23417175-c667-452c-8398-1542ad036a94", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "673cd838-f8c4-4fdc-88b9-c5b3f83c5886", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-11T06:01:46.967Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "d1e29d86-a9ae-40b7-b876-f3c99cf656c8", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "04161c08-f266-445b-a1f1-a68272ee4988", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "4ee736db-533f-485b-abe6-62ed4eba5aae", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "a98a6eab-f771-4586-b8b4-4ab61300a762", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-11T06:01:46.967Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "ff32df67-203c-4781-b770-68d19f5b4d5e", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-TurtleBot3Burger", + "folderName": "[lms-nav2-gazebo-vehicle]nav2-vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-vehicle/1.0.0/prebuilt/latest/lms-nav2-gazebo-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "42e8179172c178978e5ae5d48e189164f6b8a5030fdaa0eba497ca86a97e96bb" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "921e73b2-ddc6-4fe0-84d2-2efb401ebf32", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 11, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2:humble-jetson_orin", + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "fadfb101-884b-4566-ad99-71f6ec4f2b14", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 12, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-07T00:34:42.804Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "517cdc75-6e49-4878-baf4-7703155bd45d", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 13, + "category": "System", + "name": "NAV2-Yahboom-Agent", + "folderName": "[lms-nav2-yahboom-agent]yahboom_agent_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-agent.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-agent/1.0.0/prebuilt/arm64/ec2b2c4578fc71b9/lms-nav2-yahboom-agent-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-agent-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "ec2b2c4578fc71b95c720dcacca5e7c7c5d08400fc80ef21a16097d31869cf9d" + } + ], + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ], + "dockerImage": "future-nav2:humble-yahboom-agent", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "1072caee-d064-4c9b-8064-810ef90d7498", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 14, + "category": "Vehicle", + "name": "NAV2-Yahboom", + "folderName": "[lms-nav2-yahboom-vehicle]yahboom_vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/amd64/d54368061d520794/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d54368061d52079489a8d686461e6672ebb84ca0f531fb71f835717b3f2a031f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/arm64/f409c0b61ca9497d/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f409c0b61ca9497d4cfd1c2af9f4e137d9316364cab664bb908818f6ecab8331" + } + ], + "defaultParameters": [ + "sim_mode:=false" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:55:16.092Z" + }, + { + "id": "a046ffd3-1e0c-4fd7-943f-3af60a776a7f", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 15, + "category": "Localization", + "name": "NAV2-Yahboom-Slam", + "folderName": "[lms-nav2-yahboom-slam]yahboom_slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-slam/1.0.0/prebuilt/arm64/f6444fe604f50ee0/lms-nav2-yahboom-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f6444fe604f50ee00831fc7db121bbebfea6be920b55a498ddc54fc317093c77" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "715ef9e8-701f-40d0-987c-6ef272902c70", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 16, + "category": "Map", + "name": "NAV2-Yahboom-Map", + "folderName": "[lms-nav2-yahboom-map]yahboom_map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-map/1.0.0/prebuilt/arm64/111981b9ab460ce4/lms-nav2-yahboom-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "111981b9ab460ce450334e5c367e97b7e757ef55d84330ca030b096d4a9c4792" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "dcd39368-069a-4b3d-a31d-510628edce8b", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 17, + "category": "Localization", + "name": "NAV2-Yahboom-Localization", + "folderName": "[lms-nav2-yahboom-localization]yahboom_localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-localization/1.0.0/prebuilt/arm64/d6534d48841a751c/lms-nav2-yahboom-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d6534d48841a751cb2e21fa73785df61fb81815b406c9c4152c9cbfd0ae59e48" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "fa788eeb-6ba4-4f69-89aa-ddf0c6b875a5", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 18, + "category": "Planning", + "name": "NAV2-Yahboom-Planning", + "folderName": "[lms-nav2-yahboom-planning]yahboom_planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-planning/1.0.0/prebuilt/arm64/050f4ed4acba795a/lms-nav2-yahboom-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "050f4ed4acba795affec8306b7eef116e9e86fd0f42e492da27c7fc624dc8570" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "0a4f97e8-3dd6-4dd8-aa76-d327347c4dc7", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 19, + "category": "Control", + "name": "NAV2-Yahboom-Control", + "folderName": "[lms-nav2-yahboom-control]yahboom_control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-control/1.0.0/prebuilt/arm64/be7147024d890249/lms-nav2-yahboom-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "be7147024d89024915f1481a47a0909ea1d06196ef9e9797f260739999e09b3f" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "de01197b-d7b1-4ebb-812b-4943befb8539", + "weekId": "fa532e19-ef05-4001-b3fa-66b7ce30448b", + "sortOrder": 20, + "category": "Perception", + "name": "NAV2-Yahboom-Camera", + "folderName": "[lms-nav2-yahboom-camera]yahboom_camera_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-camera.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-camera/1.0.0/prebuilt/arm64/b950a71d5babcdb3/lms-nav2-yahboom-camera-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-camera-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b950a71d5babcdb37e46c7674fb80d0ae8c076e7d7c1186042b1b1f6e7ee2d04" + } + ], + "defaultParameters": [ + "video_device:=/dev/video0" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + } + ] + }, + { + "id": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 3, + "title": "원격 개발", + "tags": [ + "MK-mini", + "진행예정" + ], + "progress": 0, + "state": "locked", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "원거리 MK-mini 플랫폼을 연결하고 원격으로 코드를 편집·빌드·실행합니다. 로컬 MK-mini 시뮬레이션과 실차에서 SLAM 및 자율주행을 검증합니다.", + "deliverable": "SLAM 저장 맵, 자율주행 검증 결과, 원격 개발 소스 변경 내역 및 실행 로그를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-09-22T05:57:24.295Z", + "updatedAt": "2026-09-22T05:57:24.295Z", + "modules": [ + { + "id": "73b34795-5848-44fa-a097-c48de8405c2b", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.417Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "f823ab59-d4a1-4b18-b84f-d06fc6c11e33", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.448Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "2377a171-689f-4f00-b92a-c7138e00d90a", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.464Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "6d61da3c-70f6-4ceb-b134-b6d319249a3c", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.481Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "ff6cba53-96f9-4fee-b378-4317ea52ae21", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.496Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "495b0f80-1d87-4b38-9625-370e70de2d49", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.512Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "d1535889-73e8-4300-8677-6260fd8dd436", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.528Z", + "updatedAt": "2026-09-22T05:57:24.528Z" + }, + { + "id": "da4f1d95-6270-47dc-b7e8-5529784cad29", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.544Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "316fa7e6-dd9c-4c89-a911-8ccf8605a24b", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.558Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3b164b3e-16d2-452b-9a5f-7cdb367e4916", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d", + "simulator:=gazebo" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.574Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "b4b253d8-c202-4c28-bcd7-6c8bdee37d52", + "weekId": "10eeb415-c568-4ed5-9ef6-8eeb23b68c7d", + "sortOrder": 11, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T05:57:24.589Z", + "updatedAt": "2026-09-22T05:57:24.589Z" + } + ] + } + ], + "environmentProfiles": [ + { + "id": "119ece78-9921-4c01-9334-669d91aca149", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 3, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "73b34795-5848-44fa-a097-c48de8405c2b", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "f823ab59-d4a1-4b18-b84f-d06fc6c11e33", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ] + }, + { + "id": "2377a171-689f-4f00-b92a-c7138e00d90a", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "6d61da3c-70f6-4ceb-b134-b6d319249a3c", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "495b0f80-1d87-4b38-9625-370e70de2d49", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "d1535889-73e8-4300-8677-6260fd8dd436", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=mkmini" + ] + }, + { + "id": "da4f1d95-6270-47dc-b7e8-5529784cad29", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "3b164b3e-16d2-452b-9a5f-7cdb367e4916", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d", + "simulator:=gazebo" + ] + }, + { + "id": "b4b253d8-c202-4c28-bcd7-6c8bdee37d52", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-09-22T05:57:24.606Z", + "updatedAt": "2026-09-22T05:57:24.606Z" + }, + { + "id": "19175b62-d8a2-458b-9a63-8b3fa9d8889e", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 2, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "238bd78c-14f7-4707-9964-4b8ace1cfb42", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ] + }, + { + "id": "c892dd62-6cbe-43c0-84ce-bfb2086a872a", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "localization_mode:=amcl" + ] + }, + { + "id": "611ba2e2-6034-4121-bb9b-716df5e0ad96", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "23417175-c667-452c-8398-1542ad036a94", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "d1e29d86-a9ae-40b7-b876-f3c99cf656c8", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "04161c08-f266-445b-a1f1-a68272ee4988", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ] + }, + { + "id": "4ee736db-533f-485b-abe6-62ed4eba5aae", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "ff32df67-203c-4781-b770-68d19f5b4d5e", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ] + }, + { + "id": "921e73b2-ddc6-4fe0-84d2-2efb401ebf32", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "fadfb101-884b-4566-ad99-71f6ec4f2b14", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + }, + { + "id": "1072caee-d064-4c9b-8064-810ef90d7498", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=true" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-22T06:18:59.960Z" + }, + { + "id": "336b8cf4-57b2-4bb2-b809-8007dddd630f", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 1, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "55636ffe-88c4-4c0a-8d9b-96b678b9fb53", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "b77f3bd0-c7f5-47a6-aaf1-4c97b8d9ee61", + "dockerImage": "future-nav2:humble-yahboom-agent", + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ] + }, + { + "id": "b1e9b92f-bbab-4759-9e9b-637dbe12066c", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "video_device:=/dev/video0" + ] + }, + { + "id": "e42f92d1-0d5c-4d3f-a66f-0d1fe317637d", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "421db22e-154d-4df9-8190-ccb65dec6b68", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "276f4df2-f214-4ba9-aea6-04e23491a569", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "fe514053-5b6b-4dad-b6d7-0191fa5e8ef4", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "356f971a-8750-45f1-9ddd-a3c70bd72912", + "dockerImage": "future-nav2:humble-yahboom" + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-22T06:18:59.911Z" + }, + { + "id": "377e58bf-039b-48f9-8db0-48dba4ba5549", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 2, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "1072caee-d064-4c9b-8064-810ef90d7498", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "517cdc75-6e49-4878-baf4-7703155bd45d", + "dockerImage": "future-nav2:humble-yahboom-agent", + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ] + }, + { + "id": "de01197b-d7b1-4ebb-812b-4943befb8539", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "video_device:=/dev/video0" + ] + }, + { + "id": "a046ffd3-1e0c-4fd7-943f-3af60a776a7f", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "dcd39368-069a-4b3d-a31d-510628edce8b", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "0a4f97e8-3dd6-4dd8-aa76-d327347c4dc7", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "fa788eeb-6ba4-4f69-89aa-ddf0c6b875a5", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "715ef9e8-701f-40d0-987c-6ef272902c70", + "dockerImage": "future-nav2:humble-yahboom" + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-22T06:19:00.019Z" + }, + { + "id": "89ff37ab-bf54-43bb-87c8-c965237362bd", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 1, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "dd8acfbd-7f66-41b7-a5ef-60c0bc669825", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ] + }, + { + "id": "31ac8bd3-6b92-44bb-955c-248cda322e61", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "localization_mode:=amcl" + ] + }, + { + "id": "618ceb2e-45b8-4220-8469-9d6947e2abba", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "fb5cd244-e132-4d3d-8248-70534df07309", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "b4bb8026-da5f-4a57-a9b0-4dc667f6acb9", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "ec932f99-8911-4327-bc55-e38805bfa88a", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ] + }, + { + "id": "c4eaa655-ff69-4aed-9c74-41552d2845f1", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "6be04dd5-8705-4eb5-96cc-b69282ca7b03", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ] + }, + { + "id": "bafcb2ea-e4f1-458b-bcb1-5c84306ae845", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "6bcb11f1-28ce-4eff-aaa0-81737199a807", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + }, + { + "id": "55636ffe-88c4-4c0a-8d9b-96b678b9fb53", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=true" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-08-04T01:27:57.076Z", + "updatedAt": "2026-09-22T06:18:59.879Z" + }, + { + "id": "8e36f6bc-15cd-45a5-9122-737a8422ec09", + "courseId": "4eb01197-7605-4c3b-9a92-f9a3942050bd", + "week": 3, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "73b34795-5848-44fa-a097-c48de8405c2b", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "f823ab59-d4a1-4b18-b84f-d06fc6c11e33", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ] + }, + { + "id": "2377a171-689f-4f00-b92a-c7138e00d90a", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "6d61da3c-70f6-4ceb-b134-b6d319249a3c", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "ff6cba53-96f9-4fee-b378-4317ea52ae21", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ] + }, + { + "id": "495b0f80-1d87-4b38-9625-370e70de2d49", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "da4f1d95-6270-47dc-b7e8-5529784cad29", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "316fa7e6-dd9c-4c89-a911-8ccf8605a24b", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ] + }, + { + "id": "3b164b3e-16d2-452b-9a5f-7cdb367e4916", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-09-22T05:57:24.639Z", + "updatedAt": "2026-09-22T05:57:24.639Z" + } + ] + }, + { + "id": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "slug": "nav2-autonomy-50419393-77f", + "title": "2026 하반기 퓨처드라이브 테스트", + "subtitle": "ROS2, 시뮬레이션, SLAM부터 경로 계획과 제어까지", + "description": "ROS2와 NAV2 기반 시뮬레이션 및 플랫폼 실습을 통해 자율주행 시스템의 핵심 흐름을 학습하고 팀 프로젝트로 검증합니다.", + "organizationName": "퓨처드라이브", + "teacherId": "50419393-77f7-40c3-ac97-ddfe884e5cb2", + "isActive": true, + "createdAt": "2026-08-12T06:54:50.872Z", + "updatedAt": "2026-08-12T06:54:50.872Z", + "weeks": [ + { + "id": "d2047273-91d8-49dd-89a1-0e348f43f265", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 1, + "title": "ROS2 & Simulation", + "tags": [ + "MK-mini", + "진행중" + ], + "progress": 0, + "state": "current", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "ROS2 통신 구조와 Gazebo 시뮬레이션 환경을 구성하고, LiDAR SLAM·위치추정·경로 계획·제어까지 NAV2 자율주행 파이프라인을 실습합니다.", + "deliverable": "NAV2 모듈 소스 변경 내역, SLAM 결과 맵, 목표 지점 주행 검증 화면 및 실행 로그를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-08-12T06:54:50.874Z", + "updatedAt": "2026-08-12T06:54:50.874Z", + "modules": [ + { + "id": "f5abf8ab-280b-4ad4-93d7-142bb22fb4bb", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.880Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "18805cbf-c01f-4ea5-956d-cced888b2697", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.883Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "e01c68d3-7f31-4359-89dd-ed32055c082c", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.884Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "0817062b-045c-45c0-9d36-ae9e0ea456b0", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.886Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3b98d72a-a744-46ee-a12b-69241d7c7248", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.887Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "645b6f17-a8a1-49d9-b6c7-ff5caf01dd4b", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.889Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "303687ab-542a-415b-a991-434e49a93922", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.890Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "6b2c5597-be2e-4c81-a2a9-7df4a180c8c6", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.891Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "bcbd0382-5ec5-4bcb-90a9-0492f5f628b9", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.893Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "efc492b5-afdc-4d01-935e-ea71ac3047d0", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-TurtleBot3Burger", + "folderName": "[lms-nav2-gazebo-vehicle]nav2-vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-vehicle/1.0.0/prebuilt/latest/lms-nav2-gazebo-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "42e8179172c178978e5ae5d48e189164f6b8a5030fdaa0eba497ca86a97e96bb" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.894Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "6d4a2cb8-b816-4f04-9874-8e8a03222a35", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 11, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2:humble-jetson_orin", + "createdAt": "2026-08-12T06:54:50.895Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "5cfd7b92-eb8b-46b3-b6f0-c5c24c5f8676", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 12, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.896Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "9b92dae5-575d-44a9-bf9f-f0bd1b128dff", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 13, + "category": "System", + "name": "NAV2-Yahboom-Agent", + "folderName": "[lms-nav2-yahboom-agent]yahboom_agent_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-agent.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-agent/1.0.0/prebuilt/arm64/ec2b2c4578fc71b9/lms-nav2-yahboom-agent-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-agent-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "ec2b2c4578fc71b95c720dcacca5e7c7c5d08400fc80ef21a16097d31869cf9d" + } + ], + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ], + "dockerImage": "future-nav2:humble-yahboom-agent", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "ffacc8a8-08ac-4633-9eb2-24f18606d875", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 14, + "category": "Vehicle", + "name": "NAV2-Yahboom", + "folderName": "[lms-nav2-yahboom-vehicle]yahboom_vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/amd64/d54368061d520794/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d54368061d52079489a8d686461e6672ebb84ca0f531fb71f835717b3f2a031f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/arm64/f409c0b61ca9497d/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f409c0b61ca9497d4cfd1c2af9f4e137d9316364cab664bb908818f6ecab8331" + } + ], + "defaultParameters": [ + "sim_mode:=false" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "130b973e-dae3-4a98-a9d9-65e12107d8ac", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 15, + "category": "Localization", + "name": "NAV2-Yahboom-Slam", + "folderName": "[lms-nav2-yahboom-slam]yahboom_slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-slam/1.0.0/prebuilt/arm64/f6444fe604f50ee0/lms-nav2-yahboom-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f6444fe604f50ee00831fc7db121bbebfea6be920b55a498ddc54fc317093c77" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "2c34469d-0a53-459f-9698-468fba0048ba", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 16, + "category": "Map", + "name": "NAV2-Yahboom-Map", + "folderName": "[lms-nav2-yahboom-map]yahboom_map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-map/1.0.0/prebuilt/arm64/111981b9ab460ce4/lms-nav2-yahboom-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "111981b9ab460ce450334e5c367e97b7e757ef55d84330ca030b096d4a9c4792" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "88186ea4-da6e-423f-b3e6-9d4176692617", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 17, + "category": "Localization", + "name": "NAV2-Yahboom-Localization", + "folderName": "[lms-nav2-yahboom-localization]yahboom_localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-localization/1.0.0/prebuilt/arm64/d6534d48841a751c/lms-nav2-yahboom-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d6534d48841a751cb2e21fa73785df61fb81815b406c9c4152c9cbfd0ae59e48" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "e4bf535f-ed53-4ca9-840c-c025cb997fa5", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 18, + "category": "Planning", + "name": "NAV2-Yahboom-Planning", + "folderName": "[lms-nav2-yahboom-planning]yahboom_planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-planning/1.0.0/prebuilt/arm64/050f4ed4acba795a/lms-nav2-yahboom-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "050f4ed4acba795affec8306b7eef116e9e86fd0f42e492da27c7fc624dc8570" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "bc33d3d7-ccaf-4d1c-8490-7bc09122bdb2", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 19, + "category": "Control", + "name": "NAV2-Yahboom-Control", + "folderName": "[lms-nav2-yahboom-control]yahboom_control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-control/1.0.0/prebuilt/arm64/be7147024d890249/lms-nav2-yahboom-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "be7147024d89024915f1481a47a0909ea1d06196ef9e9797f260739999e09b3f" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + }, + { + "id": "8140fefb-7aa2-48ba-a52e-09f2cf3caaca", + "weekId": "d2047273-91d8-49dd-89a1-0e348f43f265", + "sortOrder": 20, + "category": "Perception", + "name": "NAV2-Yahboom-Camera", + "folderName": "[lms-nav2-yahboom-camera]yahboom_camera_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-camera.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-camera/1.0.0/prebuilt/arm64/b950a71d5babcdb3/lms-nav2-yahboom-camera-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-camera-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b950a71d5babcdb37e46c7674fb80d0ae8c076e7d7c1186042b1b1f6e7ee2d04" + } + ], + "defaultParameters": [ + "video_device:=/dev/video0" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T05:52:15.647Z" + } + ] + }, + { + "id": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 2, + "title": "Autonomy Studio 팀 프로젝트", + "tags": [ + "MK-mini", + "진행예정" + ], + "progress": 0, + "state": "locked", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "3~4인 팀으로 자율주행 알고리즘이 필요한 문제 상황을 정의하고, 센서 구성과 NAV2 모듈을 조합해 시뮬레이션과 플랫폼에서 검증합니다.", + "deliverable": "팀 프로젝트 소스, 시스템 구성도, 시뮬레이션 및 플랫폼 주행 검증 결과, 발표 자료를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-08-12T06:54:50.897Z", + "updatedAt": "2026-08-12T06:54:50.897Z", + "modules": [ + { + "id": "b966f562-170a-4dbf-ae0d-35ebf3b3d0c8", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.900Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "f9115dd5-b318-4e70-a031-d71360f92745", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.902Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "497bd74c-d8b2-4121-baa7-d0ca2bb56b2f", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.923Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "c6b2e359-954c-46f8-999a-02db7263431e", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.925Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "b8816337-7c45-4c45-b0c4-8679313b2e4a", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.926Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "e30ffd05-131b-4cb0-a9b2-53f7d19fe7de", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.928Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "9166ebc6-147d-4d51-bd86-8f88df88ae9e", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.930Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "1cc184c7-83e0-4762-9dfa-f48306ea8c96", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.932Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "36cab3bd-093e-41d7-bc3f-6d999f9dcf22", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.934Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3b145e73-05f9-4d16-93f0-ec493bd93a04", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-TurtleBot3Burger", + "folderName": "[lms-nav2-gazebo-vehicle]nav2-vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-vehicle/1.0.0/prebuilt/latest/lms-nav2-gazebo-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "42e8179172c178978e5ae5d48e189164f6b8a5030fdaa0eba497ca86a97e96bb" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.937Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "7849797a-1087-4e1c-a0e6-fc0ac25066a0", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 11, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2:humble-jetson_orin", + "createdAt": "2026-08-12T06:54:50.939Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "409523ba-25fb-4376-ac7e-185ab85f54f1", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 12, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-08-12T06:54:50.941Z", + "updatedAt": "2026-09-08T07:07:04.215Z" + }, + { + "id": "ced7672a-46e1-4531-9226-a49b3bd617d4", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 13, + "category": "System", + "name": "NAV2-Yahboom-Agent", + "folderName": "[lms-nav2-yahboom-agent]yahboom_agent_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-agent.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-agent/1.0.0/prebuilt/arm64/ec2b2c4578fc71b9/lms-nav2-yahboom-agent-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-agent-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "ec2b2c4578fc71b95c720dcacca5e7c7c5d08400fc80ef21a16097d31869cf9d" + } + ], + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ], + "dockerImage": "future-nav2:humble-yahboom-agent", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "ec74a0c5-a8a4-40f6-8c92-1ad2b234155c", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 14, + "category": "Vehicle", + "name": "NAV2-Yahboom", + "folderName": "[lms-nav2-yahboom-vehicle]yahboom_vehicle_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-vehicle.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/amd64/d54368061d520794/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d54368061d52079489a8d686461e6672ebb84ca0f531fb71f835717b3f2a031f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-vehicle/1.0.0/prebuilt/arm64/f409c0b61ca9497d/lms-nav2-yahboom-vehicle-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-vehicle-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f409c0b61ca9497d4cfd1c2af9f4e137d9316364cab664bb908818f6ecab8331" + } + ], + "defaultParameters": [ + "sim_mode:=false" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:55:16.092Z" + }, + { + "id": "e03f0c95-2b3c-4697-9f84-32094d34a9ac", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 15, + "category": "Localization", + "name": "NAV2-Yahboom-Slam", + "folderName": "[lms-nav2-yahboom-slam]yahboom_slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-slam/1.0.0/prebuilt/arm64/f6444fe604f50ee0/lms-nav2-yahboom-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "f6444fe604f50ee00831fc7db121bbebfea6be920b55a498ddc54fc317093c77" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "2fc3f487-1f31-4ad2-98ec-1ffd71bf5765", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 16, + "category": "Map", + "name": "NAV2-Yahboom-Map", + "folderName": "[lms-nav2-yahboom-map]yahboom_map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-map/1.0.0/prebuilt/arm64/111981b9ab460ce4/lms-nav2-yahboom-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "111981b9ab460ce450334e5c367e97b7e757ef55d84330ca030b096d4a9c4792" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "eb938a93-f178-40e7-af97-b51db3fcb24f", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 17, + "category": "Localization", + "name": "NAV2-Yahboom-Localization", + "folderName": "[lms-nav2-yahboom-localization]yahboom_localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-localization/1.0.0/prebuilt/arm64/d6534d48841a751c/lms-nav2-yahboom-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d6534d48841a751cb2e21fa73785df61fb81815b406c9c4152c9cbfd0ae59e48" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "3730f0db-957d-4478-a1e3-2bfa6ab1e850", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 18, + "category": "Planning", + "name": "NAV2-Yahboom-Planning", + "folderName": "[lms-nav2-yahboom-planning]yahboom_planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-planning/1.0.0/prebuilt/arm64/050f4ed4acba795a/lms-nav2-yahboom-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "050f4ed4acba795affec8306b7eef116e9e86fd0f42e492da27c7fc624dc8570" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "6e9c3116-7ffe-48eb-a8dc-31e19427fe4a", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 19, + "category": "Control", + "name": "NAV2-Yahboom-Control", + "folderName": "[lms-nav2-yahboom-control]yahboom_control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-control/1.0.0/prebuilt/arm64/be7147024d890249/lms-nav2-yahboom-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "be7147024d89024915f1481a47a0909ea1d06196ef9e9797f260739999e09b3f" + } + ], + "defaultParameters": [], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + }, + { + "id": "8d2f2a89-5bb1-47fd-bc67-b6ad4e1dea33", + "weekId": "10925ae0-964c-4f19-bc7a-e725cd307e86", + "sortOrder": 20, + "category": "Perception", + "name": "NAV2-Yahboom-Camera", + "folderName": "[lms-nav2-yahboom-camera]yahboom_camera_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-yahboom-camera.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-yahboom-camera/1.0.0/prebuilt/arm64/b950a71d5babcdb3/lms-nav2-yahboom-camera-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-yahboom-camera-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b950a71d5babcdb37e46c7674fb80d0ae8c076e7d7c1186042b1b1f6e7ee2d04" + } + ], + "defaultParameters": [ + "video_device:=/dev/video0" + ], + "dockerImage": "future-nav2:humble-yahboom", + "createdAt": "2026-09-22T01:00:21.656Z", + "updatedAt": "2026-09-22T04:47:39.303Z" + } + ] + }, + { + "id": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 3, + "title": "원격 개발", + "tags": [ + "MK-mini", + "진행예정" + ], + "progress": 0, + "state": "locked", + "duration": "1주", + "github": "https://github.com/ros-navigation/navigation2", + "overview": "원거리 MK-mini 플랫폼을 연결하고 원격으로 코드를 편집·빌드·실행합니다. 로컬 MK-mini 시뮬레이션과 실차에서 SLAM 및 자율주행을 검증합니다.", + "deliverable": "SLAM 저장 맵, 자율주행 검증 결과, 원격 개발 소스 변경 내역 및 실행 로그를 제출합니다.", + "requiresSourceSubmission": true, + "createdAt": "2026-09-22T06:11:53.084Z", + "updatedAt": "2026-09-22T06:11:53.084Z", + "modules": [ + { + "id": "644f8ee6-2103-4809-8961-de00db3c224e", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 1, + "category": "Control", + "name": "NAV2-Control", + "folderName": "[lms-nav2-gazebo-control]nav2-control_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-control.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/amd64/0ab85a58f37a922b/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "0ab85a58f37a922b493ce21676573e3a8fd339f99a74cce9c4cba58aff9b1e35" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-control/1.0.0/prebuilt/arm64/b838e8f8144abaab/lms-nav2-gazebo-control-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-control-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "b838e8f8144abaab1df2162e14652f9bc6461cc87194b792214a691375137268" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.161Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "5ded14c7-0d95-49a5-b39a-2af32cd30fb7", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 2, + "category": "Localization", + "name": "NAV2-Localization", + "folderName": "[lms-nav2-gazebo-localization]nav2-localization_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-localization.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/latest/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "44c8d50205f001a196870d03f44d435582b96c51eb4445e50cc8db6203b2c0c9" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-localization/1.0.0/prebuilt/arm64/d00fe2246a6b2465/lms-nav2-gazebo-localization-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-localization-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "d00fe2246a6b246583579dffe44c8f30df77e3ddaa1780d18cb1c8f822d5e7f2" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.177Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "64f36b02-c1b1-4815-af43-451dce90b9ee", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 3, + "category": "Map", + "name": "NAV2-Map", + "folderName": "[lms-nav2-gazebo-map]nav2-map_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-map.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/latest/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "f409ce54c40aeeed8cf3fc06251c2e321887b3ec5f5827dfb74897a62780582f" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-map/1.0.0/prebuilt/arm64/6a061aacedbdf0c1/lms-nav2-gazebo-map-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-map-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "6a061aacedbdf0c12c9b28cb91ea2c985f17bb4bdf60f9cfc558f3848cefbbf8" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.193Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "7fc02d9c-4c38-4b9c-8ea6-79e827010a17", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 4, + "category": "Perception", + "name": "NAV2-Perception", + "folderName": "[lms-nav2-gazebo-perception]nav2-perception_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/amd64/d18d59ac77130be1/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d18d59ac77130be1da9d16cb0716fbf4b2837132de1765726200b3a57217034e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception/1.0.0/prebuilt/arm64/39fbb02ca2780226/lms-nav2-gazebo-perception-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "39fbb02ca27802266fd95c136f0abf61d32546d378ec41609c7ed64f55801f62" + } + ], + "defaultParameters": [ + "sim_mode:=true" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.210Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "61ba3bc3-7623-41e0-a3c7-b0f7bf424075", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 5, + "category": "Perception", + "name": "NAV2-Perception3D", + "folderName": "[lms-nav2-gazebo-perception3d]nav2-perception3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-perception3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "bab9f7383f44950b6cf6cd8f97b4ae2d3ba61571d6b37c10b24922cc0348a7cc" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-perception3d/1.0.0/prebuilt/arm64/952390e07379e6f1/lms-nav2-gazebo-perception3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-perception3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "952390e07379e6f1d3412c048a10c6efc7a036e7326820393eda7ac2c4672837" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.226Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "ef43520e-f4a4-4cb0-bc75-96f07664c28b", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 6, + "category": "Planning", + "name": "NAV2-Planning", + "folderName": "[lms-nav2-gazebo-planning]nav2-planning_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-planning.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/amd64/d1c51b0f211e1420/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "d1c51b0f211e14208882947dd3bf642dd8ce997f54b37dfc0a4c8d66bd84d608" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-planning/1.0.0/prebuilt/arm64/7c32cf26951898e3/lms-nav2-gazebo-planning-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-planning-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "7c32cf26951898e3ff9fe6987e8cd6bc70f96ca9d7f83d0ef34120d507472724" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.242Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "f6e540a6-130c-4da5-b9ea-5c3e8f63cc58", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 7, + "category": "Simulator", + "name": "NAV2-Gazebo", + "folderName": "[lms-nav2-gazebo-simulator]nav2-simulator_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-simulator.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-simulator/1.0.0/prebuilt/amd64/2c97e7672eaec755/lms-nav2-gazebo-simulator-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-simulator-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2c97e7672eaec755eb300442a77b18bbcbaf6e0d305257dc9974724049756756" + } + ], + "defaultParameters": [ + "gui:=false", + "platform:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.258Z", + "updatedAt": "2026-09-22T06:11:53.258Z" + }, + { + "id": "75e52819-88c3-48bc-ac2c-5ef3fa057410", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 8, + "category": "Localization", + "name": "NAV2-SLAM", + "folderName": "[lms-nav2-gazebo-slam]nav2-slam_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/amd64/e5aa22340e275d70/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "e5aa22340e275d7063e5cd96f974620354760082d22e80b9a58205085d88e337" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam/1.0.0/prebuilt/arm64/bf10b41759a7426d/lms-nav2-gazebo-slam-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "bf10b41759a7426d54953a17ba9f5721a4d1ed1d3ba498f589b72e2bd4f65da7" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.275Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "bc7e3156-7b27-4f92-a991-bf7599b2d9e8", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 9, + "category": "Localization", + "name": "NAV2-SLAM3D", + "folderName": "[lms-nav2-gazebo-slam3d]nav2-slam3d_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-slam3D.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/latest/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "ed59e1e6b5e816403475c44672247cf8747c14edcbfcf7f1939d2b2de1d3263d" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-slam3d/1.0.0/prebuilt/arm64/c7f99fbf323b2a05/lms-nav2-gazebo-slam3d-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-slam3d-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "c7f99fbf323b2a05bf9b0f17489878ed0c1e9d84d9b8dc76d791ddeeab84d135" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.291Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "9293c430-cf1b-43da-83e1-a385927adf1d", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 10, + "category": "Vehicle", + "name": "NAV2-MKMini", + "folderName": "[lms-nav2-mkmini]nav2-mkmini_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-mkmini.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/amd64/lms-nav2-mkmini-build-install-amd64.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install-amd64.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "6094d2aa5188a28153452aec08e28870984b36c1bc0c06fec8091901f6d26856" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-mkmini/1.0.0/prebuilt/arm64/4f37276fe09de77a/lms-nav2-mkmini-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-mkmini-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "arm64", + "checksumSha256": "4f37276fe09de77ae818f595ecb7e5a2e5b8569cf4cc99d833eb3c7a67d14929" + } + ], + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d", + "simulator:=gazebo" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.307Z", + "updatedAt": "2026-09-23T04:26:43.419Z" + }, + { + "id": "3e8324cb-c747-40a6-8cab-e5fa9473300e", + "weekId": "4255e11e-4882-477a-840b-f64b8ae8c6db", + "sortOrder": 11, + "category": "Gui", + "name": "NAV2-Rviz2", + "folderName": "[lms-nav2-gazebo-gui]nav2-rviz2_v1.0.0_ws", + "templateRepositoryUrl": "https://gitea.autonomystudio.net/templates/lms-nav2-gazebo-gui.git", + "sourceType": "GIT", + "prebuiltArtifacts": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/modules/lms-nav2-gazebo-gui/1.0.0/prebuilt/latest/lms-nav2-gazebo-gui-build-install.tar.zst", + "type": "build-install", + "fileName": "lms-nav2-gazebo-gui-build-install.tar.zst", + "required": false, + "extractPath": ".", + "architecture": "amd64", + "checksumSha256": "2a816b08d9f39057a96641ce7ace341ce409f77e5043abe074e2e21ecaa871ca" + } + ], + "defaultParameters": [ + "rviz_config:=nav2" + ], + "dockerImage": "future-nav2-gazebo:humble", + "createdAt": "2026-09-22T06:11:53.323Z", + "updatedAt": "2026-09-22T06:11:53.323Z" + } + ] + } + ], + "environmentProfiles": [ + { + "id": "07f87f3f-5c93-4ea6-b9f3-4228960adfa5", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 1, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "ffacc8a8-08ac-4633-9eb2-24f18606d875", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "9b92dae5-575d-44a9-bf9f-f0bd1b128dff", + "dockerImage": "future-nav2:humble-yahboom-agent", + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ] + }, + { + "id": "8140fefb-7aa2-48ba-a52e-09f2cf3caaca", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "video_device:=/dev/video0" + ] + }, + { + "id": "130b973e-dae3-4a98-a9d9-65e12107d8ac", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "88186ea4-da6e-423f-b3e6-9d4176692617", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "bc33d3d7-ccaf-4d1c-8490-7bc09122bdb2", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "e4bf535f-ed53-4ca9-840c-c025cb997fa5", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "2c34469d-0a53-459f-9698-468fba0048ba", + "dockerImage": "future-nav2:humble-yahboom" + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-08-12T06:54:50.945Z", + "updatedAt": "2026-09-22T05:52:15.667Z" + }, + { + "id": "0e9654b5-a12a-49ba-abba-ca00ee296be8", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 3, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "644f8ee6-2103-4809-8961-de00db3c224e", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "5ded14c7-0d95-49a5-b39a-2af32cd30fb7", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ] + }, + { + "id": "64f36b02-c1b1-4815-af43-451dce90b9ee", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "7fc02d9c-4c38-4b9c-8ea6-79e827010a17", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "61ba3bc3-7623-41e0-a3c7-b0f7bf424075", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ] + }, + { + "id": "ef43520e-f4a4-4cb0-bc75-96f07664c28b", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "75e52819-88c3-48bc-ac2c-5ef3fa057410", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "bc7e3156-7b27-4f92-a991-bf7599b2d9e8", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "robot:=mkmini" + ] + }, + { + "id": "9293c430-cf1b-43da-83e1-a385927adf1d", + "dockerImage": "future-nav2:humble-jetson_orin", + "defaultParameters": [ + "sim_mode:=false", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-09-22T06:11:53.356Z", + "updatedAt": "2026-09-22T06:11:53.356Z" + }, + { + "id": "1323c10b-aeb5-4e9f-99c9-472f5759cb69", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 2, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "b966f562-170a-4dbf-ae0d-35ebf3b3d0c8", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ] + }, + { + "id": "f9115dd5-b318-4e70-a031-d71360f92745", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "localization_mode:=amcl" + ] + }, + { + "id": "497bd74c-d8b2-4121-baa7-d0ca2bb56b2f", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "c6b2e359-954c-46f8-999a-02db7263431e", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "e30ffd05-131b-4cb0-a9b2-53f7d19fe7de", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "9166ebc6-147d-4d51-bd86-8f88df88ae9e", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ] + }, + { + "id": "1cc184c7-83e0-4762-9dfa-f48306ea8c96", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "3b145e73-05f9-4d16-93f0-ec493bd93a04", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ] + }, + { + "id": "7849797a-1087-4e1c-a0e6-fc0ac25066a0", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "409523ba-25fb-4376-ac7e-185ab85f54f1", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + }, + { + "id": "ec74a0c5-a8a4-40f6-8c92-1ad2b234155c", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=true" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-08-12T06:54:50.945Z", + "updatedAt": "2026-09-22T06:16:53.801Z" + }, + { + "id": "587c8b3a-0c80-4431-818d-a3bf8565cb2f", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 2, + "platformKey": "PLATFORM", + "profileType": "PLATFORM", + "name": "플랫폼", + "config": { + "type": "PLATFORM", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "remote-jetson", + "viewer": { + "stack": "nav2" + }, + "moduleSet": { + "target": "platform", + "modules": [ + { + "id": "ec74a0c5-a8a4-40f6-8c92-1ad2b234155c", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=false" + ] + }, + { + "id": "ced7672a-46e1-4531-9226-a49b3bd617d4", + "dockerImage": "future-nav2:humble-yahboom-agent", + "defaultParameters": [ + "serial_device:=/dev/ttyUSB0", + "baudrate:=921600" + ] + }, + { + "id": "8d2f2a89-5bb1-47fd-bc67-b6ad4e1dea33", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "video_device:=/dev/video0" + ] + }, + { + "id": "e03f0c95-2b3c-4697-9f84-32094d34a9ac", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "eb938a93-f178-40e7-af97-b51db3fcb24f", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "6e9c3116-7ffe-48eb-a8dc-31e19427fe4a", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "3730f0db-957d-4478-a1e3-2bfa6ab1e850", + "dockerImage": "future-nav2:humble-yahboom" + }, + { + "id": "2fc3f487-1f31-4ad2-98ec-1ffd71bf5765", + "dockerImage": "future-nav2:humble-yahboom" + } + ], + "includeUnlisted": false + }, + "runtimeKind": "real", + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/slam-ros-bridge/arm64/20260819-0659d4cf5578/slam-ros-bridge-jetson-orin.tar.zst", + "image": "slam-ros-bridge:jetson_orin", + "fileName": "slam-ros-bridge-jetson-orin.tar.zst", + "required": true, + "checksumSha256": "0659d4cf5578c43bc9c25e4a4fc5d226ccd5b7bec43becfdff83b5390717114e" + }, + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/jetson-orin/latest/future-nav2-humble-jetson-orin.tar.zst", + "image": "future-nav2:humble-jetson_orin", + "fileName": "future-nav2-humble-jetson-orin.tar.zst", + "required": true + } + ] + }, + "enabled": true, + "createdAt": "2026-08-12T06:54:50.945Z", + "updatedAt": "2026-09-22T06:16:53.866Z" + }, + { + "id": "93b1f4d4-8640-4e6a-8c2c-1a0d6d8e7a6b", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 3, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "644f8ee6-2103-4809-8961-de00db3c224e", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "5ded14c7-0d95-49a5-b39a-2af32cd30fb7", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d", + "localization_mode:=amcl" + ] + }, + { + "id": "64f36b02-c1b1-4815-af43-451dce90b9ee", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "7fc02d9c-4c38-4b9c-8ea6-79e827010a17", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "ef43520e-f4a4-4cb0-bc75-96f07664c28b", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "f6e540a6-130c-4da5-b9ea-5c3e8f63cc58", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=mkmini" + ] + }, + { + "id": "75e52819-88c3-48bc-ac2c-5ef3fa057410", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "9293c430-cf1b-43da-83e1-a385927adf1d", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d", + "simulator:=gazebo" + ] + }, + { + "id": "3e8324cb-c747-40a6-8cab-e5fa9473300e", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-09-22T06:11:53.339Z", + "updatedAt": "2026-09-22T06:11:53.339Z" + }, + { + "id": "c7b9a405-5d88-4273-8686-edd51c7562ae", + "courseId": "8e296f81-8445-455c-b1a2-47f2ce9099a4", + "week": 1, + "platformKey": "NAV2", + "profileType": "NAV2", + "name": "로컬", + "config": { + "type": "NAV2", + "bridge": { + "env": { + "ROBOT_STACK": "nav2" + }, + "name": "nav2-ros-bridge", + "port": 8765, + "image": "slam-ros-bridge:latest" + }, + "target": "local", + "viewer": { + "stack": "nav2" + }, + "runtime": { + "steps": [], + "containers": [] + }, + "moduleSet": { + "target": "local", + "modules": [ + { + "id": "f5abf8ab-280b-4ad4-93d7-142bb22fb4bb", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "robot:=turtlebot3" + ] + }, + { + "id": "18805cbf-c01f-4ea5-956d-cced888b2697", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "localization_mode:=amcl" + ] + }, + { + "id": "e01c68d3-7f31-4359-89dd-ed32055c082c", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "0817062b-045c-45c0-9d36-ae9e0ea456b0", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true" + ] + }, + { + "id": "645b6f17-a8a1-49d9-b6c7-ff5caf01dd4b", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "303687ab-542a-415b-a991-434e49a93922", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "gui:=false", + "platform:=turtlebot3" + ] + }, + { + "id": "6b2c5597-be2e-4c81-a2a9-7df4a180c8c6", + "dockerImage": "future-nav2-gazebo:humble" + }, + { + "id": "efc492b5-afdc-4d01-935e-ea71ac3047d0", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=turtlebot3", + "level:=2d" + ] + }, + { + "id": "6d4a2cb8-b816-4f04-9874-8e8a03222a35", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "sim_mode:=true", + "platform:=mkmini", + "robot:=mkmini", + "level:=2d" + ] + }, + { + "id": "5cfd7b92-eb8b-46b3-b6f0-c5c24c5f8676", + "dockerImage": "future-nav2-gazebo:humble", + "defaultParameters": [ + "rviz_config:=nav2" + ] + }, + { + "id": "ffacc8a8-08ac-4633-9eb2-24f18606d875", + "dockerImage": "future-nav2:humble-yahboom", + "defaultParameters": [ + "sim_mode:=true" + ] + } + ], + "includeUnlisted": false + }, + "runtimeImages": [ + { + "url": "https://pub-ca72c40797144462bdb7d200c215d361.r2.dev/studio-artifacts/runtime-images/nav2/gazebo/latest/future-nav2-gazebo-humble.tar.zst", + "image": "future-nav2-gazebo:humble", + "fileName": "future-nav2-gazebo-humble.tar.zst", + "required": true, + "checksumSha256": "54230e039c1fa5dc82615cef3828c5acae7b8bea8e921b70cfdc5351d8301644" + } + ] + }, + "enabled": true, + "createdAt": "2026-08-12T06:54:50.945Z", + "updatedAt": "2026-09-22T05:52:15.667Z" + } + ] + } +] \ No newline at end of file diff --git a/scripts/add-week3-jetson-camera.cjs b/scripts/add-week3-jetson-camera.cjs new file mode 100644 index 0000000..e6f93c8 --- /dev/null +++ b/scripts/add-week3-jetson-camera.cjs @@ -0,0 +1,90 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +require('dotenv').config({ quiet: true }); +const { PrismaClient } = require('@prisma/client'); +const url = new URL(process.env.DATABASE_URL); +url.hostname = '192.168.0.20'; +url.port = '15437'; +url.pathname = '/lms'; +url.searchParams.set('connect_timeout', '5'); +const db = new PrismaClient({ datasources: { db: { url: url.toString() } } }); +const apply = process.argv.includes('--apply'); +const releasePath = process.env.CAMERA_RELEASE_MANIFEST || '/home/chyoo/다운로드/yahboom-lms-modules/exports/jetson-camera/release.json'; +const ids = ['4eb01197-7605-4c3b-9a92-f9a3942050bd', '8e296f81-8445-455c-b1a2-47f2ce9099a4', '26d46589-31a5-4d94-b0e0-385a12c41721']; +const folderName = '[lms-nav2-camera-test]nav2-camera-test_v1.0.0_ws'; +const image = 'future-nav2-camera-test:humble-jetson_orin'; +const templateRepositoryUrl = 'https://gitea.autonomystudio.net/templates/lms-nav2-camera-test.git'; +const defaults = ['video_device:=/dev/video0', 'width:=640', 'height:=480', 'fps:=30', 'publish_fps:=10', 'pixel_format:=auto']; +const snapshot = client => client.course.findMany({ where: { id: { in: ids } }, orderBy: { id: 'asc' }, include: { + weeks: { orderBy: { week: 'asc' }, include: { modules: { orderBy: { sortOrder: 'asc' } } } }, + environmentProfiles: { orderBy: { id: 'asc' } }, +} }); + +async function main() { + const release = JSON.parse(fs.readFileSync(releasePath, 'utf8')); + assert.equal(release.runtimeImages.length, 1, 'Runtime image upload must finish first'); + assert.equal(release.prebuiltArtifacts.length, 1); + assert.equal(release.runtimeImages[0].image, image); + assert.equal(release.prebuiltArtifacts[0].architecture, 'arm64'); + for (const item of [...release.runtimeImages, ...release.prebuiltArtifacts]) { + assert.match(item.checksumSha256, /^[a-f0-9]{64}$/); + const check = await fetch(item.url, { method: 'HEAD', signal: AbortSignal.timeout(15000) }); + assert(check.ok, `Artifact unavailable: ${check.status}`); + } + const before = await snapshot(db); + assert.equal(before.length, 3, 'Expected the base curriculum and two existing courses'); + assert(before.some(c => c.slug === 'futuredrive-autonomy-basic')); + for (const c of before) { + assert.notEqual(c.title, 'NAV2 알아보기'); + const week = c.weeks.find(w => w.week === 3); + assert(week && week.modules.some(m => m.name === 'NAV2-MKMini'), `${c.title}: MKMini week 3 missing`); + const profiles = c.environmentProfiles.filter(p => p.week === 3); + assert.equal(profiles.filter(p => p.config.target === 'remote-jetson').length, 1); + assert(profiles.filter(p => p.config.target === 'local').every(p => p.config.moduleSet?.includeUnlisted === false), + 'Local profile would implicitly include the ARM64-only camera'); + } + if (apply) { + fs.mkdirSync('backups', { recursive: true }); + const backup = path.resolve('backups', `week3-before-camera-${Date.now()}.json`); + fs.writeFileSync(backup, JSON.stringify(before, null, 2), { flag: 'wx', mode: 0o600 }); + console.log('Backup:', backup); + } + const summary = []; + try { + await db.$transaction(async tx => { + assert.deepEqual(await snapshot(tx), before, 'Curriculum changed during preparation'); + for (const c of before) { + const week = c.weeks.find(w => w.week === 3); + const existing = week.modules.find(m => m.folderName === folderName); + const data = { name: 'NAV2-Camera', category: 'Camera', folderName, templateRepositoryUrl, + sourceType: 'GIT', dockerImage: image, defaultParameters: defaults, prebuiltArtifacts: release.prebuiltArtifacts }; + const module = existing + ? await tx.courseWeekModule.update({ where: { id: existing.id }, data }) + : await tx.courseWeekModule.create({ data: { ...data, weekId: week.id, + sortOrder: Math.max(0, ...week.modules.map(m => m.sortOrder)) + 1 } }); + const profile = c.environmentProfiles.find(p => p.week === 3 && p.config.target === 'remote-jetson'); + const config = structuredClone(profile.config); + assert(Array.isArray(config.moduleSet?.modules)); + config.moduleSet.modules = [...config.moduleSet.modules.filter(m => m.id !== module.id), + { id: module.id, dockerImage: image, defaultParameters: defaults }]; + config.runtimeImages = [...(config.runtimeImages || []).filter(a => a.image !== image), ...release.runtimeImages]; + await tx.courseEnvironmentProfile.update({ where: { id: profile.id }, data: { config } }); + summary.push({ course: c.title, week: 3, module: module.name, id: module.id, target: config.target }); + } + const after = await snapshot(tx); + for (const old of before) { + const current = after.find(c => c.id === old.id); + assert.deepEqual(current.weeks.filter(w => w.week !== 3), old.weeks.filter(w => w.week !== 3)); + assert.deepEqual(current.environmentProfiles.filter(p => p.week !== 3 || p.config.target !== 'remote-jetson'), + old.environmentProfiles.filter(p => p.week !== 3 || p.config.target !== 'remote-jetson')); + for (const module of old.weeks.find(w => w.week === 3).modules.filter(m => m.folderName !== folderName)) { + assert.deepEqual(current.weeks.find(w => w.week === 3).modules.find(m => m.id === module.id), module); + } + } + if (!apply) throw new Error('DRY_RUN_ROLLBACK'); + }, { isolationLevel: 'Serializable', timeout: 30000 }); + } catch (e) { if (e.message !== 'DRY_RUN_ROLLBACK') throw e; } + console.log(JSON.stringify({ applied: apply, courses: summary }, null, 2)); +} +main().catch(e => { console.error(e.message); process.exitCode = 1; }).finally(() => db.$disconnect()); diff --git a/scripts/add-week3-jetson-camera.test.cjs b/scripts/add-week3-jetson-camera.test.cjs new file mode 100644 index 0000000..902ac4f --- /dev/null +++ b/scripts/add-week3-jetson-camera.test.cjs @@ -0,0 +1,78 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const vm = require('node:vm'); +const source = fs.readFileSync(path.join(__dirname, 'add-week3-jetson-camera.cjs'), 'utf8') + .replace(/main\(\)\.catch[\s\S]*$/, 'module.exports = { main };'); +const ids = ['4eb01197-7605-4c3b-9a92-f9a3942050bd', '8e296f81-8445-455c-b1a2-47f2ce9099a4', '26d46589-31a5-4d94-b0e0-385a12c41721']; +const image = 'future-nav2-camera-test:humble-jetson_orin'; +const release = { runtimeImages: [{ image, url: 'https://example.test/image', checksumSha256: 'a'.repeat(64) }], + prebuiltArtifacts: [{ architecture: 'arm64', url: 'https://example.test/prebuilt', checksumSha256: 'b'.repeat(64) }] }; +function fixture() { + return ids.map((id, i) => ({ id, title: `Course ${i}`, slug: i ? `course-${i}` : 'futuredrive-autonomy-basic', + weeks: [{ id: `${i}-w1`, week: 1, modules: [] }, { id: `${i}-w2`, week: 2, modules: [] }, + { id: `${i}-w3`, week: 3, modules: [{ id: `${i}-mk`, name: 'NAV2-MKMini', folderName: 'mkmini', sortOrder: 1 }] }], + environmentProfiles: ['local', 'remote-jetson'].map(target => ({ id: `${i}-${target}`, week: 3, + config: { target, otherSetting: 'preserve', moduleSet: { includeUnlisted: false, modules: [{ id: `${i}-mk` }] }, + runtimeImages: [{ image: 'future-nav2:humble-jetson_orin', url: 'existing' }] } })), + })); +} +function harness(apply, initial = fixture()) { + let state = structuredClone(initial); + const db = { + course: { findMany: async () => structuredClone(state) }, + courseWeekModule: { + create: async ({ data }) => { + const week = state.flatMap(c => c.weeks).find(w => w.id === data.weekId); + const m = { id: `${week.id}-camera`, ...structuredClone(data) }; + week.modules.push(m); return structuredClone(m); + }, + update: async ({ where, data }) => { + const m = state.flatMap(c => c.weeks.flatMap(w => w.modules)).find(m => m.id === where.id); + Object.assign(m, structuredClone(data)); return structuredClone(m); + }, + }, + courseEnvironmentProfile: { update: async ({ where, data }) => { + const p = state.flatMap(c => c.environmentProfiles).find(p => p.id === where.id); + Object.assign(p, structuredClone(data)); return structuredClone(p); + } }, + $transaction: async callback => { + const before = structuredClone(state); + try { return await callback(db); } catch (error) { state = before; throw error; } + }, + }; + const context = { module: { exports: {} }, URL, structuredClone, console: { log() {} }, + fetch: async () => ({ ok: true }), AbortSignal, + process: { argv: apply ? ['--apply'] : [], env: { DATABASE_URL: 'postgresql://user:password@localhost/lms' } }, + require: name => { + if (name === 'dotenv') return { config() {} }; + if (name === '@prisma/client') return { PrismaClient: function () { return db; } }; + if (name === 'node:fs') return { readFileSync: () => JSON.stringify(release), mkdirSync() {}, writeFileSync() {} }; + return require(name); + }, + }; + vm.runInNewContext(source, context); + return { main: context.module.exports.main, state: () => structuredClone(state) }; +} +(async () => { + const dry = harness(false); + await dry.main(); + assert.deepEqual(dry.state(), fixture()); + const applied = harness(true); + await applied.main(); + for (const c of applied.state()) { + assert.equal(c.weeks.find(w => w.week === 3).modules.length, 2); + assert.equal(c.weeks.find(w => w.week === 3).modules.find(m => m.name === 'NAV2-Camera').category, 'Camera'); + assert.equal(c.environmentProfiles.find(p => p.config.target === 'remote-jetson').config.moduleSet.modules.length, 2); + assert.equal(c.environmentProfiles.find(p => p.config.target === 'local').config.moduleSet.modules.length, 1); + } + const once = applied.state(); + await applied.main(); + assert.deepEqual(applied.state(), once); + const broken = fixture(); + broken[0].environmentProfiles = broken[0].environmentProfiles.filter(p => p.config.target === 'local'); + const rejected = harness(true, broken); + await assert.rejects(rejected.main()); + assert.deepEqual(rejected.state(), broken); + console.log('Camera registration dry-run, preservation, idempotency and profile guard tests passed.'); +})().catch(error => { console.error(error); process.exitCode = 1; }); diff --git a/scripts/fix-jetson-camera-category.sql b/scripts/fix-jetson-camera-category.sql new file mode 100644 index 0000000..2edef90 --- /dev/null +++ b/scripts/fix-jetson-camera-category.sql @@ -0,0 +1,6 @@ +-- Run against the LMS database. Preserve parameters and artifact settings. +UPDATE course_week_modules +SET category = 'Camera', updated_at = NOW() +WHERE folder_name = '[lms-nav2-camera-test]nav2-camera-test_v1.0.0_ws' + AND category = 'Perception' +RETURNING id, week_id, name, category; diff --git a/src/curriculum/curriculum.service.ts b/src/curriculum/curriculum.service.ts index 5011f1f..e93618c 100644 --- a/src/curriculum/curriculum.service.ts +++ b/src/curriculum/curriculum.service.ts @@ -12,7 +12,7 @@ import { readWeekCamera } from './week-camera'; const COURSE_REFERENCE_UPLOAD_ROOT = join(process.cwd(), 'uploads', 'course-references'); const PUBLIC_GUIDE_COURSE_SLUG = 'autonomy-studio-lms-guide'; const CUSTOM_MODULE_CATEGORIES = new Set([ - 'Vehicle', 'Sensing', 'Map', 'Perception', 'Localization', 'Planning', 'Control', 'System', 'Simulator', 'Gui', + 'Vehicle', 'Sensing', 'Camera', 'Map', 'Perception', 'Localization', 'Planning', 'Control', 'System', 'Simulator', 'Gui', ]); @Injectable() @@ -543,6 +543,8 @@ export class CurriculumService { detail: { overview: override?.overview ?? week.overview, camera: readWeekCamera(override), + coverImage: week.references.filter((reference) => reference.kind === 'COVER_IMAGE') + .map((reference) => this.serializeWeekReference(reference, week.week))[0] ?? null, learningSteps, topicDetails, topicVideoUrls, diff --git a/src/curriculum/week-cover.ts b/src/curriculum/week-cover.ts new file mode 100644 index 0000000..1d7b51c --- /dev/null +++ b/src/curriculum/week-cover.ts @@ -0,0 +1,21 @@ +import { BadRequestException } from '@nestjs/common'; + +export const WEEK_COVER_MAX_BYTES = 8 * 1024 * 1024; + +export function validateWeekCover(buffer: Buffer) { + if (!buffer.length || buffer.length > WEEK_COVER_MAX_BYTES) { + throw new BadRequestException('대표이미지는 8MB 이하로 업로드해주세요.'); + } + if (buffer.length >= 24 && buffer.subarray(0, 8).equals(Buffer.from('89504e470d0a1a0a', 'hex')) + && buffer.toString('ascii', 12, 16) === 'IHDR') { + return { extension: '.png', contentType: 'image/png' }; + } + if (buffer.length >= 4 && buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff) { + return { extension: '.jpg', contentType: 'image/jpeg' }; + } + if (buffer.length >= 16 && buffer.toString('ascii', 0, 4) === 'RIFF' + && buffer.toString('ascii', 8, 12) === 'WEBP') { + return { extension: '.webp', contentType: 'image/webp' }; + } + throw new BadRequestException('PNG, JPEG, WebP 이미지만 업로드할 수 있습니다.'); +} diff --git a/src/instructor/instructor.controller.ts b/src/instructor/instructor.controller.ts index b903449..429de12 100644 --- a/src/instructor/instructor.controller.ts +++ b/src/instructor/instructor.controller.ts @@ -147,6 +147,17 @@ export class InstructorController { ); } + @Post('curriculum/weeks/:week/cover-image') + @UseInterceptors(FileInterceptor('file', { limits: { fileSize: 8 * 1024 * 1024 } })) + uploadCurriculumCover( + @Req() request: Request, + @Param('week', ParseIntPipe) week: number, + @UploadedFile() file: { originalname: string; buffer?: Buffer }, + @Body('courseId') courseId?: string, + ) { + return this.instructorService.uploadCurriculumCover(this.getBearerToken(request), { courseId, week }, file); + } + @Post('curriculum/weeks/:week/example-codes') @UseInterceptors(FileInterceptor('file')) uploadCurriculumExampleCode( diff --git a/src/instructor/instructor.service.ts b/src/instructor/instructor.service.ts index 3db3eaf..cebb4d5 100644 --- a/src/instructor/instructor.service.ts +++ b/src/instructor/instructor.service.ts @@ -24,6 +24,7 @@ import { CreateInstructorStudentDto } from './dto/create-instructor-student.dto' import { SaveInstructorGroupDto } from './dto/save-instructor-group.dto'; import { groupCourseScope } from './group-course-scope'; import { normalizeCameraUrl, readWeekCamera } from '../curriculum/week-camera'; +import { validateWeekCover } from '../curriculum/week-cover'; import { SaveSubmissionScoreDto } from './dto/save-submission-score.dto'; import { UpdateInstructorCurriculumDto } from './dto/update-instructor-curriculum.dto'; import { UpdateInstructorPlatformDto } from './dto/update-instructor-platform.dto'; @@ -1473,6 +1474,8 @@ export class InstructorService { detail: { overview: override?.overview ?? week.overview, camera: readWeekCamera(override), + coverImage: week.references.filter((reference) => reference.kind === 'COVER_IMAGE') + .map((reference) => this.serializeWeekReference(reference, week.week))[0] ?? null, learningSteps, topicDetails, topicVideoUrls, @@ -1995,6 +1998,51 @@ export class InstructorService { return this.getCurriculum(accessToken, null, course.id); } + async uploadCurriculumCover( + accessToken: string | undefined, + input: { courseId?: string; week: number }, + file: { originalname: string; buffer?: Buffer } | undefined, + ) { + const { authUser, instructor } = await this.getInstructor(accessToken); + const organizationName = authUser.primaryAffiliation?.organizationName?.trim(); + if (!organizationName) throw new BadRequestException('Instructor organization is required'); + const course = await this.findInstructorCourse(organizationName, instructor.id, input.courseId); + if (!course) throw new NotFoundException('Course not found'); + const week = course.weeks.find((item) => item.week === input.week); + if (!week) throw new NotFoundException('Course week not found'); + if (!file?.buffer) throw new BadRequestException('이미지가 필요합니다.'); + const format = validateWeekCover(file.buffer); + if (!this.r2PublicFileService.isConfigured()) throw new BadRequestException('이미지 저장소가 설정되지 않았습니다.'); + const key = this.r2PublicFileService.createLmsCourseFileKey({ + courseId: course.id, week: week.week, kind: 'COVER_IMAGE', fileId: randomUUID(), extension: format.extension, + }); + await this.r2PublicFileService.uploadPublicFile({ key, body: file.buffer, contentType: format.contentType }); + let previous: Array<{ storedFileName: string }> = []; + try { + await this.prisma.$transaction(async (tx) => { + // Serialize replacements so a week cannot acquire multiple covers. + await tx.$queryRaw`SELECT id FROM course_weeks WHERE id = ${week.id}::uuid FOR UPDATE`; + previous = await tx.courseWeekReference.findMany({ where: { weekId: week.id, kind: 'COVER_IMAGE' } }); + await tx.courseWeekReference.deleteMany({ where: { weekId: week.id, kind: 'COVER_IMAGE' } }); + await tx.courseWeekReference.create({ data: { + weekId: week.id, kind: 'COVER_IMAGE', title: '대표이미지', + originalFileName: this.normalizeUploadedFileName(file.originalname), storedFileName: key, + contentType: format.contentType, fileSizeBytes: file.buffer!.length, sortOrder: 0, + } }); + }); + } catch (error) { + await this.r2PublicFileService.deletePublicFile(key).catch(() => undefined); + throw error; + } + // Cloned courses may still reference the same object. + for (const old of previous) { + if (!await this.prisma.courseWeekReference.count({ where: { storedFileName: old.storedFileName } })) { + await this.r2PublicFileService.deletePublicFile(old.storedFileName).catch(() => undefined); + } + } + return this.getCurriculum(accessToken, null, course.id); + } + async uploadCurriculumReference( accessToken: string | undefined, input: { courseId?: string | null; week: number; title?: string | null; kind?: 'REFERENCE' | 'EXAMPLE_CODE' }, @@ -2076,6 +2124,9 @@ export class InstructorService { } await this.prisma.courseWeekReference.delete({ where: { id: reference.id } }); + const sharedCover = reference.kind === 'COVER_IMAGE' + && await this.prisma.courseWeekReference.count({ where: { storedFileName: reference.storedFileName } }) > 0; + if (sharedCover) return this.getCurriculum(accessToken, null, reference.week.courseId); if (this.r2PublicFileService.isPublicKey(reference.storedFileName)) { await this.r2PublicFileService.deletePublicFile(reference.storedFileName).catch(() => undefined); } else { diff --git a/src/instructor/week-cover.spec.ts b/src/instructor/week-cover.spec.ts new file mode 100644 index 0000000..e47c740 --- /dev/null +++ b/src/instructor/week-cover.spec.ts @@ -0,0 +1,66 @@ +import { InstructorService } from './instructor.service'; +import { validateWeekCover, WEEK_COVER_MAX_BYTES } from '../curriculum/week-cover'; + +const png = Buffer.from('89504e470d0a1a0a0000000d494844520000000100000001', 'hex'); +describe('week cover images', () => { + function setup() { + const references = { + findMany: jest.fn().mockResolvedValue([{ storedFileName: 'old-cover' }]), + deleteMany: jest.fn().mockResolvedValue({ count: 1 }), + create: jest.fn().mockResolvedValue({ id: 'cover' }), + count: jest.fn().mockResolvedValue(0), + }; + const tx = { courseWeekReference: references, $queryRaw: jest.fn() }; + const prisma = { courseWeekReference: references, $transaction: jest.fn(async (fn) => fn(tx)) }; + const storage = { + isConfigured: () => true, + createLmsCourseFileKey: jest.fn().mockReturnValue('new-cover'), + uploadPublicFile: jest.fn().mockResolvedValue('https://files.example/new-cover'), + deletePublicFile: jest.fn().mockResolvedValue(undefined), + }; + const service = new InstructorService({} as never, {} as never, prisma as never, {} as never, {} as never, storage as never); + const internals = service as any; + internals.getInstructor = jest.fn().mockResolvedValue({ authUser: { primaryAffiliation: { organizationName: 'org' } }, instructor: { id: 'teacher' } }); + internals.findInstructorCourse = jest.fn().mockResolvedValue({ id: 'course', weeks: [{ id: 'week', week: 2 }] }); + internals.getCurriculum = jest.fn().mockResolvedValue({ weeks: [] }); + return { service, internals, prisma, references, storage, tx }; + } + const input = { courseId: 'course', week: 2 }; + const file = { originalname: 'photo.png', buffer: png }; + + it('accepts supported signatures and rejects SVG, empty and oversized uploads', () => { + expect(validateWeekCover(png).contentType).toBe('image/png'); + expect(validateWeekCover(Buffer.from([255, 216, 255, 224])).extension).toBe('.jpg'); + expect(validateWeekCover(Buffer.from('RIFF0000WEBPVP8 ')).extension).toBe('.webp'); + for (const buffer of [Buffer.alloc(0), Buffer.from(''), Buffer.alloc(WEEK_COVER_MAX_BYTES + 1)]) { + expect(() => validateWeekCover(buffer)).toThrow(); + } + }); + it('authorizes course ownership before uploading', async () => { + const { service, internals, storage } = setup(); + internals.findInstructorCourse.mockResolvedValue(null); + await expect(service.uploadCurriculumCover('token', input, file)).rejects.toThrow('Course not found'); + expect(storage.uploadPublicFile).not.toHaveBeenCalled(); + }); + it('replaces only the cover under a week lock and stores R2 metadata', async () => { + const { service, tx, references, storage } = setup(); + await service.uploadCurriculumCover('token', input, file); + expect(tx.$queryRaw).toHaveBeenCalled(); + expect(references.deleteMany).toHaveBeenCalledWith({ where: { weekId: 'week', kind: 'COVER_IMAGE' } }); + expect(references.create).toHaveBeenCalledWith({ data: expect.objectContaining({ kind: 'COVER_IMAGE', storedFileName: 'new-cover', contentType: 'image/png' }) }); + expect(storage.deletePublicFile).toHaveBeenCalledWith('old-cover'); + }); + it('retains an old object used by a cloned course', async () => { + const { service, references, storage } = setup(); + references.count.mockResolvedValue(1); + await service.uploadCurriculumCover('token', input, file); + expect(storage.deletePublicFile).not.toHaveBeenCalled(); + }); + it('cleans up the new object if database persistence fails', async () => { + const { service, prisma, storage } = setup(); + prisma.$transaction.mockRejectedValue(new Error('db failed')); + await expect(service.uploadCurriculumCover('token', input, file)).rejects.toThrow('db failed'); + expect(storage.deletePublicFile).toHaveBeenCalledWith('new-cover'); + expect(storage.deletePublicFile).not.toHaveBeenCalledWith('old-cover'); + }); +}); diff --git a/src/storage/r2-public-file.service.ts b/src/storage/r2-public-file.service.ts index 3dce5bd..ddacdcb 100644 --- a/src/storage/r2-public-file.service.ts +++ b/src/storage/r2-public-file.service.ts @@ -27,11 +27,12 @@ export class R2PublicFileService { createLmsCourseFileKey(input: { courseId: string; week: number; - kind: 'REFERENCE' | 'EXAMPLE_CODE'; + kind: 'REFERENCE' | 'EXAMPLE_CODE' | 'COVER_IMAGE'; fileId: string; extension?: string; }) { - const section = input.kind === 'EXAMPLE_CODE' ? 'example-codes' : 'references'; + const section = input.kind === 'COVER_IMAGE' ? 'cover-images' + : input.kind === 'EXAMPLE_CODE' ? 'example-codes' : 'references'; return [ this.publicPrefix, 'lms',