AEGLOSLAB 로봇공학 전서(全書)

제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, GitHub master). ④ TheRobotStudio/SO-ARM100의 README(부품표 포함). 읽지 못한 것: docs.ros.org와 ros.org/reps(접속자 검사 화면 Anubis가 자바스크립트 작업 증명을 요구해 우회하지 않았다), 각 도구의 공식 문서, 하드웨어 판매처의 가격·재고, 도구의 소스 코드와 실행 결과. 이 장은 어느 도구도 설치·실행하지 않았다.

저장소·패키지의 값(릴리스·푸시·버전)은 조회일의 스냅숏이며 도구의 우열이나 구매·채택의 권고가 아니다. 출처의 성격은 저장소 메타데이터, 패키지 색인, 규격 원문(REP), 커뮤니티 문서(README)로 구분한다.

0.18.2 개발 환경의 여섯 층

응용·연구 과제 조작·이동·학습 실험 학습·제어 프레임워크 LeRobot · Isaac Lab · ManiSkill 시뮬레이터·물리 엔진 MuJoCo · Drake · Gazebo · Webots 미들웨어 ROS 2 (Humble · Jazzy · Kilted) 운영체제·언어 환경 Ubuntu · Python · C++17 하드웨어 SO-ARM100 · TurtleBot 4 등
로봇공학 개발 환경의 여섯 층(이 책의 정리 도식). 각 층의 예는 이 장이 메타데이터를 조회한 도구와 플랫폼이다. 위 층의 선택이 아래 층의 조건을 정한다.
층정해야 할 것이 장의 점검 항목후속 장
응용·연구 과제무엇을 배우거나 만들 것인가(조작·이동·학습)과제가 요구하는 하위 층의 조건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 Hawksbill2022-05 ~ 2027-05activeUbuntu Jammy(22.04)C++17, Python 3.6—6
Iron Irwini2023-05 ~ 2024-11end-of-lifeUbuntu Jammy(22.04)C++17, Python 3.8—종료 월 이후
Jazzy Jalisco2024-05 ~ 2029-05activeUbuntu Noble(24.04)C++17, Python 3.8Harmonic30
Kilted Kaiju2025-05 ~ 2026-11activeUbuntu Noble(24.04)C++17, Python 3.9Ionic이번 달
LyricalREP-2000에 절 없음active————
Rolling Ridley2020-06 ~ 진행 중rollingKilted와 같은 플랫폼(2025-05 기준 서술)———
2022 2024 2026 2028 Humble Iron Jazzy Kilted 2026-11-03
ROS 2 배포판의 지원 기간(REP-2000 원문, GitHub master 조회 2026-11-03). 색을 입힌 막대는 지원 중, 회색은 종료이며 세로선은 조회일이다.

판독 규칙은 다음과 같다.

  • 지원 기간의 끝을 기준 시점과 비교한다. 조회일에 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 SimNOASSERTION저장소의 소프트웨어는 Apache 2.0. 빌드·사용에는 별도 약관의 구성 요소(Omniverse Kit SDK, 3D 모델·텍스처)가 필요하다라이선스 필드 "NVIDIA Proprietary Software"
Isaac LabNOASSERTIONBSD-3-Clause조회하지 않았다
DrakeNOASSERTIONBSD-3-Clause라이선스 필드 "Various"
BulletNOASSERTIONzlib(Extras·examples/ThirdPartyLibs 제외)라이선스 필드 "zlib"
MuJoCoApache-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.02024-05-102026-10-06v0.1.1(2024-05-17, 사전 릴리스)91
TurtleBot 4(turtlebot/turtlebot4)Apache-2.02022-02-082025-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마지막 정식 릴리스이후 일수
MuJoCogoogle-deepmind/mujocoApache-2.02021-08-272026-11-022026-10-22 3.17.012
Isaac Simisaac-sim/IsaacSimNOASSERTION2025-05-282026-10-272026-10-14 v6.2.020
Isaac Labisaac-sim/IsaacLabNOASSERTION2022-11-162026-11-032026-10-20 v3.0.014
DrakeRobotLocomotion/drakeNOASSERTION2014-01-262026-11-032026-10-15 v1.58.019
GenesisGenesis-Embodied-AI/GenesisApache-2.02023-10-312026-11-022026-10-22 v1.4.512
ManiSkillhaosulab/ManiSkillApache-2.02022-08-022026-08-042026-04-21 v3.0.1196
Gazebo(gz-sim)gazebosim/gz-simApache-2.02020-04-152026-11-022025-10-14 gz-sim10_10.0.0385
Webotscyberbotics/webotsApache-2.02018-11-052026-11-032025-02-04 R2025a637
Bulletbulletphysics/bullet3NOASSERTION2011-04-122026-10-092022-04-24 3.251654
LeRobothuggingface/lerobotApache-2.02024-01-262026-11-032026-08-03 v0.6.192

마지막 정식 릴리스 이후 일수는 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.02026-10-22>=3.10비어 있음491516.5
Isaac Sim(isaacsim)6.2.0.02026-10-13==3.12.*NVIDIA Proprietary Software12577
Drake(drake)1.58.02026-10-15>=3.12Various661428
Genesis(genesis-world)1.4.52026-10-22<3.14,>=3.10비어 있음43349.5
ManiSkill(mani-skill)3.0.12026-04-21>=3.9비어 있음110
PyBullet(pybullet)3.2.72025-01-30지정 없음zlib218040.5
LeRobot(lerobot)0.6.12026-08-03>=3.12Apache-2.012828.5
0 10 20 30 Genesis 34 MuJoCo 15 Drake 14 LeRobot 8 Isaac Sim 5 ManiSkill 1 PyBullet 0 최근 365일의 PyPI 정식 릴리스 수
최근 365일(2025-11-03 ~ 2026-11-03)의 PyPI 정식 릴리스 수(숫자로만 된 버전 번호, 사전 릴리스 제외). 값은 조회일의 스냅숏이다.

패키지마다 정식 릴리스 수와 주기가 크게 다르다. 최근 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·PyBullet3.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.88229.88일치
팔로워·리더 2대유로226.3226.30일치
팔로워·리더 2대위안1,343.161,354.76−11.60
팔로워·리더 2대엔44,53045,018.00−488.00
팔로워 1대미국 달러121.94121.94일치
팔로워 1대유로124.3124.30일치
팔로워 1대위안682.23682.23일치
팔로워 1대엔24,41424,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 체크포인트·연구 질문

체크포인트:

  1. 개발 환경의 여섯 층과 각 층에서 정해야 할 사항을 말할 수 있는가.
  2. ROS 2 배포판의 지원 기간과 대상 플랫폼을 REP-2000에서 읽고 조회일 기준 남은 기간을 계산할 수 있는가.
  3. GitHub의 라이선스 판정·LICENSE 파일·패키지 색인의 서술이 다를 수 있는 이유를 설명할 수 있는가.
  4. 마지막 정식 릴리스 이후 일수가 유지 상태의 대리 지표일 뿐인 이유를 두 가지 이상의 사례로 설명할 수 있는가.
  5. 여러 패키지의 requires_python에서 공통 파이썬 버전을 구하고, 한 도구가 조합을 좁히는 방식을 설명할 수 있는가.
  6. 공개 부품표의 합계를 단가×수량의 합으로 검산하고, 합계에 포함되지 않는 비용을 열거할 수 있는가.
  7. 세 가지 학습 환경 구성의 장점·한계와 어느 목적에 맞는지 설명할 수 있는가.

연구 질문(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(GitHub master), 조회 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이다.