softmata/horus
Fastest Robotics Runtime System. If phones have Android, robots deserve HORUS.
HORUS – 로보틱스용 실시간 분산 미들웨어 (Rust / Python / C++)
무엇인가요 – HORUS는 ROS 2에서 사용하는 DDS 스택을 대체하는 저지연, 락 프리 프로세스 간 통신(IPC) 계층입니다. Rust, Python, C++로 작성된 프로그램이 단일 공유 메모리 레이어 버퍼를 통해 데이터를 공유할 수 있으며, 결정적 스케줄링과 200나노초 미만의 프로세스 간 지연을 제공합니다.
왜 중요한가요 – 로보틱스, 자율주행차, 산업 자동화, 또는 어떤 안전 중심 시스템에서도 예측 가능한 타이밍과 최소한의 오버헤드가 필수적입니다. HORUS는 결정적 실행 클래스, 내장 워치독, AI 집중적 인식 워크로드를 위한 제로 코피 파이프라인을 제공합니다.
핵심 개념 (README에 표시된 대로)
| 개념 | 역할 |
|---|---|
| Node | tick() (Rust) / 콜백 (Python) / tick() 메서드 (C++)를 구현하는 작업 단위. 노드는 Scheduler에 의해 스케줄링됩니다. |
| Topic | 락 프리 레이어 버퍼로 백업된 타입 지정된 발행/구독 채널. 모든 언어가 동일한 공유 메모리 레이아웃을 사용하므로, Rust 발행자는 복사 없이 Python 구독자에 의해 직접 읽을 수 있습니다. |
| Scheduler | 실행 클래스(실시간, 스레드 풀, 이벤트 기반, 비동기 IO, 최선의 노력)를 관리합니다. 노드별로 레이트, 예산, 마감일, 순서, 오류 처리 정책을 설정할 수 있습니다. |
| Safety monitor | 경고에서 레이트 감소, 격리, 최종적으로 오작동 노드 종료로 단계적으로 진전되는 워치독. 노드는 enter_safe_state()를 정의하여 하드웨어를 알려진 안전 상태로 전환할 수 있습니다. |
| BlackBox | 후속 분석을 위한 레이어 버퍼 비행기록기. |
| TransformFrame | 빠른 락 프리 좌표 변환 트리 (ROS TF2보다 10~33배 빠름). |
| 메시지 유형 | 40개 이상의 내장 POD 구조체 (예: Imu, CmdVel, Detection, Image, PointCloud). 대용량 데이터(이미지, 텐서)는 공유 메모리 풀에 저장되며 NumPy에서 제로 코피로 접근 가능. |
| 드라이버 | horus.toml을 통한 선언적 HAL 통합 (Terra HAL 프로젝트에서 30개 이상). |
빠른 시작 스니펫 (README에서)
Rust – Topic::new, Scheduler::new().tick_rate(1000_hz()), 그리고 선택적 정책인 .order() 및 .on_miss(Miss::SafeMode)를 사용한 1kHz 센서 컨트롤러 쌍을 단일 파일로 구현.
Python – horus.run을 사용한 8줄의 동등한 코드. Node 객체, node.send / node.recv, 그리고 선택적 rate 인수 사용.
C++ – horus::Node를 상속하는 클래스 기반 노드. subscribe/advertise 헬퍼와 동일한 스케줄러 구성 사용.
주요 기능
- 결정적 실시간 스케줄링 – 다섯 가지 실행 클래스, 노드에 레이트/예산/마감일이 있으면 자동으로 RT 모드로 전환.
- 안전성 및 장애 내성 – 단계적 워치독, 마감일 강제, 노드별 안전 상태 핸들러, BlackBox 기록기, 재시작/백오프 정책.
- 제로 코피 AI 파이프라인 – 공유 메모리 풀을 통해 카메라 프레임, 포인트 클라우드, 텐서를 복사 없이 NumPy 배열로 변환 가능. 토픽을 통해 이동하는 것은 작은 설명자뿐.
- 고성능 – 보고된 171나노초 단방향 프로세스 간 지연, 91나노초 동일 프로세스 전송, 소규모 메시지에서 iceoryx2 대비 최대 12.8배의 처리량.
- 다중 언어 상호운용성 – 동일한 토픽이 Rust, Python, C++ 프로세스에서 모두 사용 가능.
- 내장 로보틱스 기본 요소 – 메시지, 서비스, 액션, 변환, 30개 이상의 하드웨어 드라이버 (Dynamixel, RealSense, CAN, EtherCAT 등).
- CLI 도구 –
horus new,horus run, 토픽 검사 (horus topic list/echo), 시스템 대시보드 (horus monitor), 원격 배포, 건강 검사, 자동 업데이트.
설치 및 사용 방법 (설명된 대로)
- 원라인 설치기 –
curl …/install.sh | bash(또는HORUS_VERSION를 설정해 특정 릴리스 고정). 스크립트는 사전 빌드된 CLI를 다운로드하고~/.horus/cache/horus@<version>에 일치하는 소스 트리를 캐시합니다. - 언어 바인딩
- Rust – 수동으로 로컬 경로 종속성 추가 (
cargo add horus는 캐시된 소스를 가리킴). 아직 crates.io에 게시되지 않음. - Python – 오래된 0.1.x 형식은
pip install "horus-robotics>=0.4.1", 새로운 0.4.x 형식은pip install ~/.horus/cache/horus@0.4.1/horus_py로 캐시된 소스에서 빌드. - C++ –
libhorus_cpp에 링크하고<horus/horus.hpp>포함. CMake 3.20+ 및 C++17 컴파일러 필요.
- Rust – 수동으로 로컬 경로 종속성 추가 (
- 프로젝트 템플릿 –
horus new my_robot(--cpp/--python로 언어 선택, 기본은 Rust)은 스타터 패키지와 드라이버 설정용horus.toml을 생성합니다. - 실행 –
horus run은 캐시된 소스에 대해 Rust 코드를 빌드하고 스케줄러를 시작합니다.
성능 강조 (README에서)
| 메트릭 | 값 | 맥락 |
|---|---|---|
| 프로세스 간 단방향 지연 | 171 ns | 레이어 버퍼 전송/수신, Intel i9-14900K에서 측정. |
| 동일 프로세스 전송 지연 | 91 ns | 프로듀서 측 send()만. |
| 1개 발행 → 3개 구독 지연 | 80 ns | 프로듀서 측. |
| ROS 2 DDS와 비교 | 중앙값 약 5 µs (REP 2014) → 약 30배 빠름 (동일한 프로세스 간 사례). | |
| iceoryx2 (8 B)와 비교 | 55 ns vs 416 ns (중앙값) → 7.6배 빠름. | |
| 처리량 (동일 루프) | 37.8 M msg/s vs 3.0 M msg/s (iceoryx2) → 12.8배. | |
| 대용량 이미지 페이로드 (1920×1080) 단방향 p50 | 284 ns (설명자만, 제로 코피) |
일반적인 사용 사례
- 마이크로초 미만의 지터가 불안정을 유발할 수 있는 저수준 모터 제어.
- 카메라 프레임, LiDAR 포인트 클라우드, IMU 데이터를 단일 프로세스에서 통합하면서도 Python AI 모델에 데이터를 노출하는 센서 융합 파이프라인.
- 결정적 워치독과 보장된 안전 상태 전환을 필요로 하는 안전 중심 로보틱스.
- 초저지연 IPC가 필요한 고빈도 거래 또는 게임 엔진 서브시스템 (README에서도 이러한 분야가 언급됨).
성숙도 및 생태계
- 버전 – v0.4.1 (README 작성 시 최신 태그). PyPI의 Python 패키지는 여전히 0.1.9. 새로운 0.4.x 형식은 소스에서 빌드해야 함.
- CI – GitHub Actions 배지 존재. 벤치마크는 리포지토리에 포함됨.
- 문서 –
https://docs.horusrobotics.dev에 호스팅. 빠른 시작, 스케줄러 구성, 안전 모니터, 벤치마크 섹션 포함. - 커뮤니티 – 지원을 위한 Discord 서버 링크.
- 라이선스 – Apache-2.0.
결론
HORUS는 실시간 로보틱스 및 기타 지연에 민감한 시스템을 위한 진정한, 활발히 유지 관리되는 미들웨어 프로젝트입니다. 결정적 스케줄링, 안전 모니터, Rust, Python, C++ 간 제로 코피 데이터 경로를 제공합니다. 마이크로초 미만의 IPC와 ROS 2의 DDS 레이어보다 더 밀접한 통합이 필요한 경우, HORUS는 평가해볼 만한 가치가 있습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트