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에서)

RustTopic::new, Scheduler::new().tick_rate(1000_hz()), 그리고 선택적 정책인 .order().on_miss(Miss::SafeMode)를 사용한 1kHz 센서 컨트롤러 쌍을 단일 파일로 구현. Pythonhorus.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), 원격 배포, 건강 검사, 자동 업데이트.

설치 및 사용 방법 (설명된 대로)

  1. 원라인 설치기curl …/install.sh | bash (또는 HORUS_VERSION를 설정해 특정 릴리스 고정). 스크립트는 사전 빌드된 CLI를 다운로드하고 ~/.horus/cache/horus@<version>에 일치하는 소스 트리를 캐시합니다.
  2. 언어 바인딩
    • 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 컴파일러 필요.
  3. 프로젝트 템플릿horus new my_robot (--cpp / --python로 언어 선택, 기본은 Rust)은 스타터 패키지와 드라이버 설정용 horus.toml을 생성합니다.
  4. 실행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는 평가해볼 만한 가치가 있습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트