softmata/horus

Fastest Robotics Runtime System. If phones have Android, robots deserve HORUS.

HORUS – 실시간 분산 미들웨어

개요 – HORUS는 **Rust, Python 또는 C++**로 작성된 프로그램이 공유 메모리 링 버퍼를 통해 데이터를 공유할 수 있게 해주는 저지연 무잠금 미들웨어입니다. 결정론적 타이밍과 안전성이 중요한 분야(로봇 공학, 자율 주행 차량, 산업 자동화, 고빈도 거래, 게임 엔진 등)를 대상으로 하며, DDS 기반 시스템(ROS 2 등)의 드롭인 대체제로 자리 잡고 있습니다.

핵심 개념

  • Node – tick() (Rust) 또는 콜백 (Python/C++)을 구현하는 작업 단위입니다. 노드는 내장된 결정론적 스케줄러에 의해 스케줄링됩니다.
  • Topic – 무잠금 링 버퍼로 지원되는 유형화된 발행/구독 채널입니다. 메시지는 POD 구조체이므로 복사 없이 전송할 수 있습니다.
  • Scheduler – 구성 가능한 틱 속도로 노드를 실행하며, 5가지 실행 클래스(실시간, 스레드 풀, 이벤트 기반, 비동기 IO, 최선 노력)를 지원하고 예산, 마감 기한 및 감시 정책을 강제합니다.
  • Safety monitor – 단계별 감시 장치, 안전 상태 후크, 블랙박스 비행 기록기 및 노드별 결함 허용 정책을 제공합니다.
  • Zero‑copy AI pipeline – 이미지, 포인트 클라우드 및 텐서 유형은 공유 메모리 풀에 존재하며, Python은 복사 없이 NumPy 뷰를 얻을 수 있습니다.

언어 및 바인딩

  • Rust – 주요 구현 언어입니다. 크레이트는 crates.io에 게시되지 않으며 HORUS 설치 프로그램을 통해 가져옵니다.
  • Python – pip install "horus-robotics>=0.4.1" (또는 최신 PyPI 릴리스가 나올 때까지 캐시된 소스에서 설치).
  • C++ – libhorus_cpp에 링크하고 <horus/horus.hpp>를 포함합니다.

빠른 시작 (Rust)

use horus::prelude::*;

message! { SensorReading { position: f64, velocity: f64 } MotorCommand { voltage: f64 } }

fn main() -> Result<()> {
    let mut sched = Scheduler::new().tick_rate(1000_hz());
    // sensor node
    sched.add(Sensor::new()?).order(0).build()?;
    // controller node
    sched.add(Controller::new()?).order(1).rate(1000_hz()).on_miss(Miss::SafeMode).build()?;
    sched.run()
}

Python에도 유사한 8줄 예제가 있으며, **C++**에도 상응하는 코드 조각이 있습니다.

주요 기능

기능 내용
결정론적 스케줄링 5가지 실행 클래스, 노드별 예산/마감 기한, 자동 RT 스레드 처리.
안전 모니터 오작동 노드를 제한, 격리 또는 종료하는 감시 장치; 안전 상태 콜백; 블랙박스 로깅.
제로 카피 메시징 공유 메모리 링 버퍼; 이미지/텐서 데이터용 NumPy 뷰; POD 메시지의 직렬화 오버헤드 없음.
풍부한 메시지 라이브러리 40개 이상의 내장 POD 메시지 유형 (IMU, CmdVel, Detection, Image, PointCloud 등) 및 서비스, 작업, 변환.
하드웨어 드라이버 30개 이상의 드라이버 (Dynamixel, RealSense, RPLiDAR, CAN, EtherCAT 등)를 horus.toml로 선언 가능.
CLI 도구 horus new, horus run, 토픽 검사 (horus topic list/echo), 시스템 대시보드 (horus monitor), 원격 배포, 상태 확인, 자동 업데이트.
언어 간 상호 운용성 세 가지 언어 모두 동일한 공유 메모리 세그먼트를 공유하므로 Rust 노드는 추가 코드 없이 Python 구독자에게 발행 가능.

성능 하이라이트 (Intel i9‑14900K에서 측정)

  • 프로세스 간 단방향 지연 시간: 171 ns (ROS 2의 ~5 µs DDS 기본값보다 약 30배 빠름).
  • 동일 프로세스 전송: 91 ns.
  • 처리량: 37.8 M 메시지/초 (iceoryx2의 3 M/초 대비).
  • 대량 페이로드 (예: 1920×1080 단색 이미지)는 224바이트 설명자만 이동하므로 단방향 약 284 ns를 유지합니다. 실제 버퍼는 공유 메모리입니다.

설치

# 한 줄 설치 프로그램 (사전 빌드된 CLI + 캐시된 소스 다운로드)
curl -fsSL https://github.com/softmata/horus/raw/main/install.sh | bash
horus new my_robot && cd my_robot && horus run
  • 설치 프로그램은 CLI 빌드에 사용된 정확한 소스 트리를 캐시하여 ABI 호환성을 보장합니다.
  • 수동 설치: git clone https://github.com/softmata/horus.git && ./install.sh.
  • 요구 사항: Rust ≥ 1.90, Python ≥ 3.9, CMake ≥ 3.20 + C++17 컴파일러.

일반적인 사용 사례

  1. 토픽 정의 (예: camera, detections, motor.cmd).
  2. 노드 작성 (지원되는 언어로 해당 토픽을 발행/구독).
  3. 구성 (horus.toml에서 드라이버 설정 및 스케줄러 정책 구성).
  4. 실행 (horus run – 스케줄러가 노드를 시작하고 실시간 제약을 강제하며 사후 분석을 위해 블랙박스 로그를 기록).

강점

  • 200 ns 미만의 IPC가 필요한 정밀 제어 루프 (고주파 모터 제어, 센서 융합).
  • 복사 없이 대형 텐서나 이미지를 전달해야 하는 다중 언어 파이프라인.
  • 내장 감시 장치와 결정론적 실행 클래스를 활용하는 안전 필수 시스템.

문서 및 커뮤니티

  • 전체 문서: https://docs.horusrobotics.dev
  • 빠른 시작 가이드, 벤치마크 방법론, ROS 2 마이그레이션 가이드 및 상세 API 참조.
  • Discord 커뮤니티에서 지원 및 토론 가능.

결론 – HORUS는 나노초 단위의 IPC, 결정론적 스케줄링 및 언어 간 제로 카피 데이터 공유를 제공하는 실시간 전용 미들웨어입니다. 로봇 공학 및 기타 지연 시간에 민감한 도메인에서 ROS 2 및 기존 DDS 솔루션에 대한 고성능 대안으로 사용됩니다.

관련

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