제0부 개관·역사·연구 준비
0.18 로봇공학 학습·개발 환경: 도구·시뮬레이터·교육용 하드웨어
0.18.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 로봇공학을 배우고 개발하는 데 필요한 환경 — 운영체제와 언어, ROS 2, 시뮬레이터와 학습 프레임워크, 교육용·연구용 하드웨어 — 의 구성과, 그 구성 요소를 고르기 전에 공개 메타데이터로 점검하는 방법을 다룬다. 도구의 기술적 비교(물리 엔진의 접촉 모델, 렌더링, 병렬화)는 16.3~16.7가 다루며, 이 장은 비교의 전제가 되는 항목을 직접 조회한 값으로 보인다. 다룰 질문은 네 가지다. 환경은 어떤 층으로 이루어지는가, ROS 2 배포판의 지원 기간은 어떻게 읽는가, 도구의 유지 상태와 공통 실행 환경은 어떻게 점검하는가, 공개 부품표는 어떻게 검산하는가.
배우는 것:
- 개발 환경의 여섯 층 — 하드웨어에서 응용까지, 각 층에서 정해야 할 사항.
- ROS 2 배포판의 수명 — 지원 기간·대상 플랫폼·최소 언어, 원문(REP-2000)과 배포판 색인(rosdistro)의 차이.
- 도구의 메타데이터 판독 — 라이선스 서술이 채널마다 다른 사례, 릴리스 채널(저장소·PyPI)의 차이, 파이썬 요구 버전의 교집합.
- 풀이 예제 — 열두 개 저장소·일곱 개 패키지의 유지 상태 점검, 공통 파이썬 버전 계산, SO-101 로봇팔 공개 부품표의 합계 검산.
선수 지식: 0.16(출처 판독과 표기), 0.1(로봇의 감지-판단-행동 순환), 프로그래밍(파이썬) 기초.
특히 중요한 독자: 학습자·연구자(환경 구성의 선택), 엔지니어(의존성과 재현), 교육 담당자(교육용 하드웨어의 선정 전 점검).
기준 시점과 출처 방침. 이 장의 서술은 2026년 11월 기준이며 조회일은 2026-11-03이다. 직접 읽거나 호출한 자료는 다음과 같다. ① GitHub API의 저장소·릴리스 응답(12개 저장소)과 일부 저장소의
LICENSE첫 서술. ② PyPI JSON API의 패키지 메타데이터(7개). ③ros/rosdistro의index-v4.yaml과ros-infrastructure/rep의 REP-2000 원문(rep-2000.rst, GitHubmaster). ④TheRobotStudio/SO-ARM100의 README(부품표 포함). 읽지 못한 것:docs.ros.org와ros.org/reps(접속자 검사 화면 Anubis가 자바스크립트 작업 증명을 요구해 우회하지 않았다), 각 도구의 공식 문서, 하드웨어 판매처의 가격·재고, 도구의 소스 코드와 실행 결과. 이 장은 어느 도구도 설치·실행하지 않았다.저장소·패키지의 값(릴리스·푸시·버전)은 조회일의 스냅숏이며 도구의 우열이나 구매·채택의 권고가 아니다. 출처의 성격은 저장소 메타데이터, 패키지 색인, 규격 원문(REP), 커뮤니티 문서(README)로 구분한다.
0.18.2 개발 환경의 여섯 층
| 층 | 정해야 할 것 | 이 장의 점검 항목 | 후속 장 |
|---|---|---|---|
| 응용·연구 과제 | 무엇을 배우거나 만들 것인가(조작·이동·학습) | 과제가 요구하는 하위 층의 조건 | 47.3 |
| 학습·제어 프레임워크 | 정책 학습·평가·데이터 수집의 도구 | 릴리스 주기, 파이썬 요구 | 16.4, 16.7, 19.46 |
| 시뮬레이터·물리 엔진 | 접촉·센서·렌더링의 충실도와 속도 | 라이선스, 릴리스 채널, 유지 상태 | 16.3~16.5 |
| 미들웨어 | 노드 사이의 통신과 배포판 | 지원 기간, 대상 플랫폼 | 15.2, 15.3, 15.5 |
| 운영체제·언어 환경 | 배포판, 파이썬·C++ 버전, 패키지 관리 | 요구 버전의 교집합 | 15.18 |
| 하드웨어 | 로봇팔·이동 로봇·구동기·센서 | 문서·부품표·라이선스 | 31.11, 45.36, 45.60, 45.61 |
층 사이의 제약은 위에서 아래로 전달된다. 과제가 정하는 도구가 파이썬 버전을 정하고, 그 버전이 운영체제의 선택을 좁힌다(0.18.6). 환경을 기록하는 방법은 0.16.7과 0.18.8이 다룬다.
0.18.3 운영체제와 ROS 2 배포판
ROS 2의 최근 배포판(Humble~Kilted)은 해마다 5월에 나왔고 지원 기간이 18개월(Iron·Kilted)에서 60개월(Humble·Jazzy)까지 다르다. 대상 플랫폼과 요구 언어도 배포판마다 다르다. REP-2000 원문(GitHub master)이 적는 최근 배포판의 기간·플랫폼·언어 요구와, rosdistro의 색인이 적는 상태는 다음과 같다(2026-11-03 기준 종료까지 남은 개월은 월 단위 차이).
| 배포판 | 지원 기간(REP-2000) | rosdistro 상태 | 대상 플랫폼 | 최소 언어 | Gazebo 항목(REP-2000) | 종료까지(개월) |
|---|---|---|---|---|---|---|
| Humble Hawksbill | 2022-05 ~ 2027-05 | active | Ubuntu Jammy(22.04) | C++17, Python 3.6 | — | 6 |
| Iron Irwini | 2023-05 ~ 2024-11 | end-of-life | Ubuntu Jammy(22.04) | C++17, Python 3.8 | — | 종료 월 이후 |
| Jazzy Jalisco | 2024-05 ~ 2029-05 | active | Ubuntu Noble(24.04) | C++17, Python 3.8 | Harmonic | 30 |
| Kilted Kaiju | 2025-05 ~ 2026-11 | active | Ubuntu Noble(24.04) | C++17, Python 3.9 | Ionic | 이번 달 |
| Lyrical | REP-2000에 절 없음 | active | — | — | — | — |
| Rolling Ridley | 2020-06 ~ 진행 중 | rolling | Kilted와 같은 플랫폼(2025-05 기준 서술) | — | — | — |
판독 규칙은 다음과 같다.
- 지원 기간의 끝을 기준 시점과 비교한다. 조회일에 Humble은 6개월, Jazzy는 30개월이 남았고 Kilted는 종료 월이다. 장기 지원 배포판과 짧게 지원되는 배포판의 선택은 개발 기간과 겹쳐야 한다(15.3).
- 원문과 색인이 어긋날 수 있다.
rosdistro는 Lyrical을active로 적지만 이 장이 읽은 REP-2000 원문에는 Lyrical의 절이 없다. Rolling의 절은 "2025년 5월 기준으로 Kilted와 같은 플랫폼을 대상으로 한다"고 적는다. 원문의 갱신 지연인지 별도 문서인지는 확인하지 못했다(확인 필요). - 대상 플랫폼과 요구 언어를 확인한다. Jazzy와 Kilted는 Ubuntu Noble(24.04)을 1단계(Tier 1)로 대상으로 하고 최소 언어가 C++17이다. REP-2000의 의존성 표는 Gazebo 항목으로 Jazzy에 Harmonic, Kilted에 Ionic을 적는다(별표의 의미는 읽지 않았다).
- ROS 1은 모두 종료되었다.
rosdistro색인에서noetic을 포함한 ROS 1 배포판은 모두end-of-life이다. - 원문의 위치를 적는다. 같은 규격의 판은 저장소의 시점마다 다르므로 인용에는 조회일과 출처(저장소·브랜치)를 함께 적는다.
미들웨어의 구조는 15.5·15.6, 배포판의 수명주기는 15.3이 다룬다.
0.18.4 시뮬레이터와 학습 프레임워크
시뮬레이터와 학습 프레임워크의 선택은 충실도·속도·생태계·라이선스를 함께 따진다. 충실도와 속도의 기술적 비교는 16.3(시뮬레이터 현황)·16.4·16.5(GPU 학습 시뮬레이터)·16.7가 다루고, 이 장은 어떤 도구를 고르든 확인할 수 있는 공개 메타데이터를 읽는 방법을 정리한다.
0.18.4.1 라이선스는 서술마다 다르다
같은 소프트웨어의 라이선스가 확인 경로에 따라 다르게 나타나는 사례가 있다. GitHub의 판정, 저장소 LICENSE 파일의 서술, 패키지 색인의 필드는 각각 다른 대상을 가리킨다.
| 소프트웨어 | GitHub API의 판정 | LICENSE 파일의 첫 서술 | PyPI 메타데이터 |
|---|---|---|---|
| Isaac Sim | NOASSERTION | 저장소의 소프트웨어는 Apache 2.0. 빌드·사용에는 별도 약관의 구성 요소(Omniverse Kit SDK, 3D 모델·텍스처)가 필요하다 | 라이선스 필드 "NVIDIA Proprietary Software" |
| Isaac Lab | NOASSERTION | BSD-3-Clause | 조회하지 않았다 |
| Drake | NOASSERTION | BSD-3-Clause | 라이선스 필드 "Various" |
| Bullet | NOASSERTION | zlib(Extras·examples/ThirdPartyLibs 제외) | 라이선스 필드 "zlib" |
| MuJoCo | Apache-2.0 | 읽지 않았다 | 라이선스 필드 비어 있음 |
GitHub이 NOASSERTION을 반환한 네 저장소는 모두 LICENSE 파일에 라이선스가 적혀 있었다. NOASSERTION은 라이선스가 없다는 뜻이 아니며 GitHub이 단일 라이선스를 식별하지 못했다는 표시로 보인다 (확인 필요). 패키지로 설치하는 경로의 약관은 저장소 소스의 약관과 다를 수 있으므로 설치하는 채널의 약관을 읽어야 한다. Isaac Sim의 PyPI 패키지와 저장소 사이의 관계는 이 장이 확인하지 못했다 (확인 필요). 이 장은 법률 자문을 하지 않으며 라이선스 해석은 42.16이 다룬다.
0.18.4.2 릴리스 채널과 유지 상태
- 채널이 둘 이상이다. GitHub의 릴리스와 PyPI의 업로드는 별개의 기록이다. Bullet의 GitHub 마지막 정식 릴리스는
3.25(2022-04-24)이고 PyPI의pybullet은3.2.7(2025-01-30)이다. 번호 체계가 다르며 최신 날짜도 다르다. - 정식 릴리스와 사전 릴리스를 가른다. Webots의 GitHub 최근 릴리스 3건(2026-10-29 ~ 11-02)은 야간 빌드(사전 릴리스)이고 마지막 정식 릴리스는
R2025a(2025-02-04)이다. 저장소의 마지막 푸시는 2026-11-03이다. - 릴리스가 없는 저장소가 있다. TurtleBot 4의 공통 패키지 저장소는 릴리스가 없다.
- 일수는 활동의 대리 지표일 뿐이다. 마지막 정식 릴리스 이후 일수는 유지 여부를 판정하지 않는다. 푸시 날짜, 열린 이슈, 릴리스 주기를 함께 본다(0.18.6).
0.18.5 교육용·연구용 하드웨어
0.18.5.1 오픈 하드웨어 저장소 읽기
교육용·연구용 로봇은 하드웨어 설계와 소프트웨어를 저장소로 공개하는 경우가 있다. 이 장이 읽은 두 저장소의 메타데이터는 다음과 같다.
| 저장소 | 라이선스(GitHub) | 생성 | 마지막 push | 릴리스 | 열린 이슈 |
|---|---|---|---|---|---|
SO-ARM100(TheRobotStudio/SO-ARM100) | Apache-2.0 | 2024-05-10 | 2026-10-06 | v0.1.1(2024-05-17, 사전 릴리스) | 91 |
TurtleBot 4(turtlebot/turtlebot4) | Apache-2.0 | 2022-02-08 | 2025-09-09 | 없음 | 20 |
SO-ARM100 저장소의 README는 제목을 "Standard Open SO-100 & SO-101 Arms"로 하고, SO-101을 SO-100의 차세대 판으로 소개한다(배선 개선, 기어 제거 없이 조립, 리더 팔의 모터 갱신). 팔은 Hugging Face의 LeRobot 라이브러리와 함께 사용하도록 설계되었다고 서술한다. 얻는 방법은 직접 제작(부품표·3D 인쇄·조립 안내)과 키트 구입의 두 가지이며, SO-100 문서는 폐기(deprecated)로 표시한다. 3D 인쇄 안내는 PLA+, 0.4 mm 노즐 0.2 mm 층 높이(또는 0.6 mm·0.4 mm), 채움 15%를 시험된 설정으로 제시한다. TurtleBot 4 저장소는 공통 소프트웨어 패키지이며, 마지막 푸시가 2025-09-09이고 릴리스가 없다. 하드웨어의 가격·재고·납기는 판매처 페이지로 읽어야 하며 이 장은 조회하지 않았다 (확인 필요). 플랫폼 제품 개요는 45.60·45.61, 교육 로봇은 31.11·45.36, 리더-팔로워 데이터 수집 장치는 45.62가 다룬다.
0.18.5.2 공개 부품표는 검산한다
README의 부품표(단가·수량·합계)는 커뮤니티가 작성한 문서이며 단가는 날짜가 없다. README는 가격과 품목이 지역에 따라 다를 수 있다고 적는다. 부품표를 인용하기 전에 단가×수량의 합을 합계와 대조한다(0.18.6).
0.18.6 풀이 예제 — 환경 조합의 점검
도구를 조합하기 전에 ① 각 도구의 유지 상태, ② 파이썬 요구 버전의 교집합, ③ 하드웨어 부품표의 합계를 공개 메타데이터로 점검한다. 결론부터 적으면 다음과 같다. ① 마지막 정식 릴리스 이후 일수는 12일(MuJoCo)에서 1,654일(Bullet)까지 갈리며 일수만으로 활동성을 판정할 수 없다. ② 일곱 개 패키지의 requires_python이 허용하는 파이썬 버전은 3.12 하나이고 한 도구(Isaac Sim)가 이 조합을 좁힌다. ③ SO-101 부품표의 합계는 8개 칸 중 5개가 단가×수량의 합과 일치하고 3개는 일치하지 않는다.
| 항목 | 값 |
|---|---|
| 입력 | GitHub 저장소·릴리스 응답(12개), PyPI 패키지 메타데이터(7개), README 부품표 두 개(2대·1대, 4개 통화) |
| 선택 | 정식 릴리스는 사전 릴리스를 제외한다. PyPI는 숫자로만 된 버전 번호만 센다. 기준일 2026-11-03 |
| 한계 | 공개 메타데이터이며 설치·실행·품질 시험을 하지 않았다. 릴리스 빈도는 품질이 아니다 |
import datetime, statistics
def spec_ok(spec, v):
"""requires_python이 버전 v=(주, 부)를 허용하는가"""
for p in (spec or '').split(','):
p = p.strip()
if not p:
continue
op = p[:2] if p[1] == '=' else p[0]
s = p[len(op):].replace('.*', '')
n = tuple(int(x) for x in s.split('.')[:2])
w = v[:len(n)]
ok = {'>=': w >= n, '<=': w <= n, '==': w == n,
'!=': w != n, '>': w > n, '<': w < n}[op]
if not ok:
return False
return True
def common(specs, cands):
"""모든 요구를 만족하는 버전"""
return [v for v in cands
if all(spec_ok(s, v) for s in specs)]
def cadence(dates, today, k=10):
"""마지막 이후 일수, 최근 365일 건수, 간격 중앙값"""
d = sorted(datetime.date.fromisoformat(x) for x in dates)
n = sum((today - x).days <= 365 for x in d)
g = [(b - a).days for a, b in zip(d[-k - 1:], d[-k:])]
m = statistics.median(g) if g else None
return (today - d[-1]).days, n, m
def bom_sum(rows, c):
"""부품표의 단가×수량 합(통화 c)"""
return sum(n * u[c] for _, n, u in rows)
① 저장소의 유지 상태. 12개 중 시뮬레이터·프레임워크 10개의 값은 다음과 같다.
| 도구 | 저장소 | 라이선스(GitHub 판정) | 생성 | 마지막 push | 마지막 정식 릴리스 | 이후 일수 |
|---|---|---|---|---|---|---|
| MuJoCo | google-deepmind/mujoco | Apache-2.0 | 2021-08-27 | 2026-11-02 | 2026-10-22 3.17.0 | 12 |
| Isaac Sim | isaac-sim/IsaacSim | NOASSERTION | 2025-05-28 | 2026-10-27 | 2026-10-14 v6.2.0 | 20 |
| Isaac Lab | isaac-sim/IsaacLab | NOASSERTION | 2022-11-16 | 2026-11-03 | 2026-10-20 v3.0.0 | 14 |
| Drake | RobotLocomotion/drake | NOASSERTION | 2014-01-26 | 2026-11-03 | 2026-10-15 v1.58.0 | 19 |
| Genesis | Genesis-Embodied-AI/Genesis | Apache-2.0 | 2023-10-31 | 2026-11-02 | 2026-10-22 v1.4.5 | 12 |
| ManiSkill | haosulab/ManiSkill | Apache-2.0 | 2022-08-02 | 2026-08-04 | 2026-04-21 v3.0.1 | 196 |
| Gazebo(gz-sim) | gazebosim/gz-sim | Apache-2.0 | 2020-04-15 | 2026-11-02 | 2025-10-14 gz-sim10_10.0.0 | 385 |
| Webots | cyberbotics/webots | Apache-2.0 | 2018-11-05 | 2026-11-03 | 2025-02-04 R2025a | 637 |
| Bullet | bulletphysics/bullet3 | NOASSERTION | 2011-04-12 | 2026-10-09 | 2022-04-24 3.25 | 1654 |
| LeRobot | huggingface/lerobot | Apache-2.0 | 2024-01-26 | 2026-11-03 | 2026-08-03 v0.6.1 | 92 |
마지막 정식 릴리스 이후 일수는 MuJoCo 12, Genesis 12, Isaac Lab 14, Drake 19, Isaac Sim 20, LeRobot 92, ManiSkill 196, Gazebo 385, Webots 637, Bullet 1,654일이다. 일수만으로 활동성을 판정하지 않는다. Webots는 정식 릴리스가 637일 전이나 마지막 푸시가 조회일이고, Bullet은 GitHub 릴리스가 1,654일 전이나 마지막 푸시가 2026-10-09이다. Gazebo는 메이저 판마다 태그를 내며(gz-sim7~gz-sim10) 2022-10-04, 2023-10-02, 2025-01-16, 2025-10-14로 간격이 363·472·271일이어서 385일이 이상하지 않다. 판독의 기본은 푸시 날짜, 릴리스 주기, 열린 이슈를 함께 보는 것이다.
② 패키지 채널과 공통 파이썬 버전. PyPI에 있는 7개 패키지의 값은 다음과 같다.
| 패키지 | 최신 버전 | 업로드일 | requires_python | 라이선스 필드 | 정식 릴리스 수 | 최근 365일 | 최근 10개 간격 중앙값(일) |
|---|---|---|---|---|---|---|---|
MuJoCo(mujoco) | 3.17.0 | 2026-10-22 | >=3.10 | 비어 있음 | 49 | 15 | 16.5 |
Isaac Sim(isaacsim) | 6.2.0.0 | 2026-10-13 | ==3.12.* | NVIDIA Proprietary Software | 12 | 5 | 77 |
Drake(drake) | 1.58.0 | 2026-10-15 | >=3.12 | Various | 66 | 14 | 28 |
Genesis(genesis-world) | 1.4.5 | 2026-10-22 | <3.14,>=3.10 | 비어 있음 | 43 | 34 | 9.5 |
ManiSkill(mani-skill) | 3.0.1 | 2026-04-21 | >=3.9 | 비어 있음 | 1 | 1 | 0 |
PyBullet(pybullet) | 3.2.7 | 2025-01-30 | 지정 없음 | zlib | 218 | 0 | 40.5 |
LeRobot(lerobot) | 0.6.1 | 2026-08-03 | >=3.12 | Apache-2.0 | 12 | 8 | 28.5 |
패키지마다 정식 릴리스 수와 주기가 크게 다르다. 최근 365일의 정식 릴리스는 Genesis 34건(간격 중앙값 9.5일)에서 PyBullet 0건까지이며 ManiSkill은 정식 릴리스 하나(3.0.1)만 있고 이전은 사전 릴리스(3.0.0b*)이다. 릴리스가 잦은 도구는 환경을 고정(pinning)하지 않으면 같은 코드가 다음 달에 다르게 동작할 수 있다. 요구 버전의 교집합은 다음과 같다.
| 조합 | 공통으로 허용되는 파이썬 버전(3.8~3.14 중) |
|---|---|
| 위 일곱 패키지 전부 | 3.12 |
| Isaac Sim 제외 | 3.12, 3.13 |
| Isaac Sim·Drake·LeRobot 제외 | 3.10, 3.11, 3.12, 3.13 |
| MuJoCo·Genesis·ManiSkill·PyBullet | 3.10, 3.11, 3.12, 3.13 |
Isaac Sim 패키지는 ==3.12.*로 하나의 마이너 버전만 허용하고 Drake·LeRobot은 >=3.12이다. 이 일곱 패키지를 한 환경에 설치하려면 파이썬 3.12가 유일한 후보이며, Isaac Sim을 제외하면 3.13이 추가된다. 한 도구의 요구가 전체 환경을 정하므로 도구 조합은 파이썬 버전에서 시작해 점검한다. 이 계산은 메타데이터의 선언이며 실제 설치·동작을 보장하지 않는다. 운영체제가 제공하는 파이썬 버전은 확인하지 않았다(REP-2000은 Jazzy·Kilted의 대상을 Ubuntu Noble로 적는다) (확인 필요).
③ 공개 부품표의 검산. SO-101의 README 부품표를 단가×수량의 합으로 다시 계산한 결과는 다음과 같다(README 합계에서 계산 합을 뺀 차이).
| 구성 | 통화 | README 합계 | 단가×수량의 합 | 차이 |
|---|---|---|---|---|
| 팔로워·리더 2대 | 미국 달러 | 229.88 | 229.88 | 일치 |
| 팔로워·리더 2대 | 유로 | 226.3 | 226.30 | 일치 |
| 팔로워·리더 2대 | 위안 | 1,343.16 | 1,354.76 | −11.60 |
| 팔로워·리더 2대 | 엔 | 44,530 | 45,018.00 | −488.00 |
| 팔로워 1대 | 미국 달러 | 121.94 | 121.94 | 일치 |
| 팔로워 1대 | 유로 | 124.3 | 124.30 | 일치 |
| 팔로워 1대 | 위안 | 682.23 | 682.23 | 일치 |
| 팔로워 1대 | 엔 | 24,414 | 24,608.00 | −194.00 |
서보 12개가 2대 부품표(미국 달러)에서 차지하는 비중 72.5%(166.68 / 229.88)
미국 달러·유로의 합계는 두 구성 모두 일치하고, 위안은 2대 구성에서 11.60, 엔은 두 구성 모두에서 488·194 차이가 난다. 위안 2대의 USB-C 케이블(¥23.9*2)과 클램프(¥5.2*4) 단가는 곱셈으로 해석했고 곱하지 않은 값으로 해석해도 합계가 맞지 않는다(1,330.86·1,339.16·1,315.26). 차이의 원인은 확인하지 못했다 (확인 필요). 부품표에 없는 항목(3D 인쇄 부품·카메라·계산 장치·배송비)은 합계에 포함되지 않으므로 합계는 학습 환경의 총비용이 아니다. 서보 12개가 부품표의 72.5%를 차지하여 서보 가격이 합계를 좌우한다.
한계. 이 점검은 메타데이터에 한정되며 도구의 설치·실행·성능·안전은 시험하지 않았다. 릴리스 날짜와 버전은 하루 단위로 바뀐다. README의 단가는 날짜가 없고 (공개 주장치)이다.
견해: 이 책은 도구와 부품을 고를 때 목적에서 거꾸로 요구를 정하고 공개 메타데이터로 요구를 점검하는 절차(라이선스 → 릴리스 채널 → 파이썬 교집합 → 부품표 검산)를 기본으로 삼는다고 본다. 근거는 위 예제에서 라이선스 서술이 채널마다 다르고, 유지 상태의 일수가 활동성을 잘못 시사할 수 있으며, 한 도구의 요구 버전이 조합 전체를 정하고, 부품표의 합계가 단가에서 재현되지 않는 칸이 있다는 점이다. 이 절차는 제품의 우열을 정하지 않는다.
0.18.7 쟁점 — 학습 환경을 어떻게 구성할 것인가
자료에서 확인되는 구성 방식은 세 가지다.
- ① 시뮬레이터 중심. 하드웨어 없이 시뮬레이터와 파이썬 프레임워크로 학습한다. 초기 비용이 없고 재현이 쉬우나 접촉·센서·지연의 현실 격차가 학습 결과에 들어가지 않는다. 계산 자원과 도구의 파이썬 요구(0.18.6)가 제약이다.
- ② 저가 로봇팔 중심. SO-101처럼 공개 설계와 부품표로 팔을 만들고 데이터 수집·정책 학습을 한다. 실물의 지연·마찰을 접하나 부품표 합계(2대 구성에서 미국 달러 기준 229.88
(공개 주장치)) 외에 3D 인쇄·카메라·계산 장치·조립 시간이 든다. - ③ ROS 2 이동 로봇 중심. 이동 로봇 플랫폼과 ROS 2로 인지·내비게이션을 학습한다. 배포판의 지원 기간(0.18.3)이 개발 기간과 겹쳐야 하고 플랫폼의 가격은 이 장이 확인하지 못했다
(확인 필요).
| 방식 | 장점 | 한계 | 누구에게 맞는가 |
|---|---|---|---|
| ① 시뮬레이터 | 비용·재현·병렬화 | 현실 격차 | 학습 알고리즘·제어 이론 학습자 |
| ② 저가 팔 | 실물 데이터, 모방학습 실습 | 조립·인쇄·카메라 비용, 정밀도 한계 | 조작 학습을 실물로 시험하려는 학습자 |
| ③ 이동 로봇 | 인지·내비게이션의 전 과정 | 플랫폼 비용, 배포판 수명 | 이동 로봇 연구자·교육 과정 |
견해: 한 구성으로 시작하되 목적이 바뀌면 층을 바꾼다고 본다. 근거는 층 사이의 제약이 위에서 아래로 전달되고(0.18.2), 시뮬레이터에서 학습한 결과의 실물 전이를 확인하려면 하드웨어가 필요하다는 점이다. 어느 구성이 낫다는 순위는 이 책의 범위가 아니다.
0.18.8 환경의 기록과 재현
환경을 기록하는 항목은 0.16.7의 재현 단위를 개발 환경으로 넓힌 것이다.
| 항목 | 기록할 것 | 이 장이 조회한 값의 예 |
|---|---|---|
| 운영체제·배포판 | 버전, ROS 2 배포판 | Jazzy ↔ Ubuntu Noble(24.04) |
| 언어 환경 | 파이썬 마이너 버전, 가상 환경 | 공통 후보 3.12 |
| 의존성 | 설치된 버전 목록(잠금 파일), 소스 저장소의 커밋 해시 | MuJoCo 3.17.0, Drake 1.58.0 |
| 시뮬레이터 | 버전, 채널(저장소·PyPI), 설정 파일 | Isaac Sim 6.2.0 |
| 하드웨어 | 모델·판, 펌웨어, 부품표의 조회일 | SO-101, README 조회 2026-11-03 |
CI에서 환경을 구성하는 방법은 15.18가, 연구 코드의 재현 패키지는 17.25이 다룬다.
0.18.9 사료의 한계와 유의점
| 검토한 서술 | 확인한 결과 | 근거 |
|---|---|---|
| 도구의 라이선스는 하나다 | GitHub·LICENSE·PyPI의 서술이 다른 경우가 있다(Isaac Sim) | GitHub, PyPI |
| GitHub의 NOASSERTION은 라이선스가 없다는 뜻이다 | 네 저장소 모두 LICENSE 파일에 라이선스가 적혀 있다 | LICENSE |
| 정식 릴리스가 오래되면 유지되지 않는다 | Webots·Bullet은 최근 푸시가 있다. 일수는 대리 지표이다 | GitHub |
| PyPI와 GitHub의 최신 버전은 같다 | Bullet 3.25(GitHub) 대 3.2.7(PyPI) | GitHub, PyPI |
| ROS 2 배포판의 정보는 하나의 문서에 있다 | REP-2000에 Lyrical의 절이 없으나 rosdistro는 active이다 | REP-2000, rosdistro |
| 일곱 패키지를 한 환경에 설치할 수 있다 | 메타데이터상 파이썬 3.12만 허용된다. 설치는 시험하지 않았다 | PyPI |
| 부품표 합계는 정확하다 | 8칸 중 3칸이 단가×수량의 합과 다르다 | README |
| 부품표 합계가 총비용이다 | 3D 인쇄·카메라·계산 장치·배송비를 포함하지 않는다 | README |
읽지 못한 자료는 다음과 같다. 각 도구의 공식 문서와 설치 요구, docs.ros.org·ros.org/reps의 최신 판, 하드웨어 판매처의 가격·재고·납기, Isaac Sim의 PyPI 패키지 약관, 운영체제별 시스템 파이썬 버전, 도구의 실행 결과. 릴리스·버전·건수는 조회일의 스냅숏이다.
0.18.10 관련 규격·프로토콜과 후속 장
| 개념 | 이 장에서의 위치 | 후속 장 |
|---|---|---|
| ROS 2 배포판의 수명주기, 미들웨어 | ROS 2 배포판 | 15.2, 15.3, 15.5, 15.6 |
| 시뮬레이터의 기술 비교, GPU 학습 시뮬레이터 | 시뮬레이터 | 16.3, 16.4, 16.5, 16.7 |
| 개발 도구(RViz2·Foxglove·Rerun) | 환경의 층 | 15.20 |
| 소프트웨어 품질·CI/CD | 환경의 기록 | 15.18 |
| 오픈 VLA 실무(LeRobot·openpi) | 하드웨어·프레임워크 | 19.46 |
| 교육 로봇·교육용 키트·연구용 플랫폼 | 하드웨어 | 31.11, 45.36, 45.60, 45.61, 45.62 |
| 연구 인프라(데이터셋·테스트베드·오픈 하드웨어) | 하드웨어 | 47.7 |
| 오픈소스 라이선스와 지식재산 | 라이선스 | 42.16 |
| 로봇 학습의 평가·재현성 | 환경의 기록 | 17.25 |
| 출처 판독의 방법 | 기준 시점·출처 방침 | 0.16 |
| 인력·교육·자격 | 학습 환경 | 42.17 |
0.18.11 체크포인트·연구 질문
체크포인트:
- 개발 환경의 여섯 층과 각 층에서 정해야 할 사항을 말할 수 있는가.
- ROS 2 배포판의 지원 기간과 대상 플랫폼을 REP-2000에서 읽고 조회일 기준 남은 기간을 계산할 수 있는가.
- GitHub의 라이선스 판정·
LICENSE파일·패키지 색인의 서술이 다를 수 있는 이유를 설명할 수 있는가. - 마지막 정식 릴리스 이후 일수가 유지 상태의 대리 지표일 뿐인 이유를 두 가지 이상의 사례로 설명할 수 있는가.
- 여러 패키지의
requires_python에서 공통 파이썬 버전을 구하고, 한 도구가 조합을 좁히는 방식을 설명할 수 있는가. - 공개 부품표의 합계를 단가×수량의 합으로 검산하고, 합계에 포함되지 않는 비용을 열거할 수 있는가.
- 세 가지 학습 환경 구성의 장점·한계와 어느 목적에 맞는지 설명할 수 있는가.
연구 질문(47.12에 수록한다):
- Isaac Sim의 PyPI 패키지 약관과 저장소의
LICENSE사이의 관계는 무엇인가. - REP-2000과
rosdistro색인 사이의 갱신 시차는 어느 정도이며 Lyrical의 지원 기간은 어디에 적혀 있는가. - 도구의 릴리스 주기와 사용자 코드의 호환성 파손 빈도 사이에 관계가 있는가.
- SO-101 부품표의 위안·엔 합계 차이는 어떤 단가 갱신 때문인가.
- 같은 정책 학습 실험을 시뮬레이터와 저가 로봇팔에서 반복했을 때 결과의 전이는 어느 정도인가(17.25의 보고 권고와 대조).
1차 출처
- GitHub API:
repos/<소유자>/<저장소>와releases(google-deepmind/mujoco, isaac-sim/IsaacSim, isaac-sim/IsaacLab, gazebosim/gz-sim, bulletphysics/bullet3, cyberbotics/webots, RobotLocomotion/drake, haosulab/ManiSkill, Genesis-Embodied-AI/Genesis, huggingface/lerobot, TheRobotStudio/SO-ARM100, turtlebot/turtlebot4), 조회 2026-11-03. 네 저장소의LICENSE첫 서술. - PyPI JSON API:
pypi.org/pypi/<패키지>/json(mujoco, isaacsim, drake, genesis-world, mani-skill, pybullet, lerobot), 조회 2026-11-03. ros/rosdistro의index-v4.yaml과ros-infrastructure/rep의rep-2000.rst(GitHubmaster), 조회 2026-11-03.TheRobotStudio/SO-ARM100의README.md(부품표·3D 인쇄 안내), 조회 2026-11-03.- 읽지 못한 것:
docs.ros.org·ros.org/reps(접속자 검사), 각 도구의 공식 문서, 판매처의 가격(확인 필요).
다음 장. 1.1부터 제1부 수학적 기초가 시작된다. 이 장까지의 제0부(개관·역사·연구 준비)가 로봇공학의 범위·역사·구조·규제·연구 방법을 다루었다면, 제1부는 이후 장의 기구학·동역학·제어·인지가 공통으로 사용하는 선형대수·확률·최적화를 다룬다. 첫 장은 1.1 선형대수 I이다.