dartsim/dart
Research-focused C++23 physics engine for robotics, animation, and machine learning, with Python bindings
DART – Dynamic Animation and Robotics Toolkit
개요 – DART는 로봇 공학, 애니메이션 및 머신러닝 기반 시뮬레이션 연구를 목표로 하는 오픈 소스 물리 엔진입니다. 모든 것을 블랙박스 뒤에 숨기는 대신, 사용자에게 저수준 운동학, 역학, 충돌 처리 및 제약 조건 해결에 대한 직접적인 액세스를 제공합니다.
중요성 – 이 엔진은 일반화된 좌표와 Featherstone의 Articulated-Body Algorithm을 기반으로 구축되어, 연결된 강체 시스템(예: 휴머노이드 로봇)의 정확하고 안정적인 시뮬레이션을 제공합니다. Gazebo의 내부 엔진으로 사용되며 많은 대학 연구실에서 사용되고 있어, 신뢰할 수 있는 역학이 필요한 프로젝트를 위한 견고한 기반을 제공합니다.
주요 기능
- 연구급 역학 – Featherstone 알고리즘, 힘, 토크, Jacobian 등에 대한 직접 액세스.
- 다중 포맷 모델 로딩 – URDF, SDF 및 MJCF를 단일 API를 통해 가져올 수 있습니다.
- 교차 언어 지원 – C++ 코어와 공식 Python 바인딩(
dartpy)을 제공합니다. Conda, PyPI 및pixi패키지 관리자를 통해 패키지를 사용할 수 있습니다. - 확장 가능한 아키텍처 – 모듈형 수학, 충돌, 제약 조건 및 벤치마크 구성 요소를 통해 새로운 알고리즘을 쉽게 플러그인할 수 있습니다.
- 확장 가능한 컴퓨팅 로드맵 – 현재는 CPU 전용이지만, 프로젝트는 SIMD 및 가속기 백엔드를 계획하고 있습니다.
- 프로덕션 테스트 완료 – Gazebo 및 기타 대규모 로봇 시스템을 구동하지만, 최신 DART 7 브랜치는 아직 실험 단계입니다.
전형적인 사용 사례
- 강화 학습 연구를 위한 로봇 이동 또는 조작 시뮬레이션.
- 가상 캐릭터를 위한 물리적으로 사실적인 애니메이션 생성.
- 새로운 접촉 해결 또는 제어 알고리즘의 벤치마킹.
- 물리 레이어가 필요한 대규모 로봇 스택(예: Gazebo)과의 통합.
시작하기
- Python (권장) – 안정적인 DART 6 라인은
conda install -c conda-forge dartpy를 통해, 실험적인 DART 7 라인은 휠(wheel)이 게시된 후pip install --pre dartpy를 통해 설치할 수 있습니다. DART 7의 소스 빌드의 경우, 저장소를 클론하고pixi run build를 실행하십시오. - C++ – 사전 빌드된 패키지(
conda install -c conda-forge dartsim-cpp,brew install dartsim등)를 설치하거나 제공된pixi명령어를 사용하여 소스에서 빌드하십시오. - 빠른 데모 (Python):
import dartpy as dart, numpy as np world = dart.World(time_step=1e-3) opts = dart.RigidBodyOptions(); opts.mass = 1.0; opts.position = np.array([0,0,1]) box = world.add_rigid_body('box', opts) world.enter_simulation_mode() for _ in range(100): world.step() print(f"t={world.time:.3f}s, box z={box.translation[2]:.3f}m")
문서 및 커뮤니티 – 전체 문서는 https://dart.readthedocs.io/ 에서 확인할 수 있으며, DeepWiki를 통한 AI 강화 Q&A 및 지원을 위한 GitHub Discussions 포럼이 있습니다.
라이선스 – BSD 2-Clause (허용적, 상업적 이용 가능).
성숙도 – DART 6 (브랜치 release-6.*)는 프로덕션에 적합한 안정적인 LTS 릴리스입니다. DART 7 (main 브랜치)은 현재 활발히 개발 중인 재설계 버전으로, 아직 프로덕션 워크로드에는 권장되지 않습니다.
위의 모든 정보는 저장소의 README에서 직접 가져왔습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트