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 컴파일러.
일반적인 사용 사례
- 토픽 정의 (예:
camera,detections,motor.cmd). - 노드 작성 (지원되는 언어로 해당 토픽을 발행/구독).
- 구성 (
horus.toml에서 드라이버 설정 및 스케줄러 정책 구성). - 실행 (
horus run– 스케줄러가 노드를 시작하고 실시간 제약을 강제하며 사후 분석을 위해 블랙박스 로그를 기록).
강점
- 200 ns 미만의 IPC가 필요한 정밀 제어 루프 (고주파 모터 제어, 센서 융합).
- 복사 없이 대형 텐서나 이미지를 전달해야 하는 다중 언어 파이프라인.
- 내장 감시 장치와 결정론적 실행 클래스를 활용하는 안전 필수 시스템.
문서 및 커뮤니티
- 전체 문서: https://docs.horusrobotics.dev
- 빠른 시작 가이드, 벤치마크 방법론, ROS 2 마이그레이션 가이드 및 상세 API 참조.
- Discord 커뮤니티에서 지원 및 토론 가능.
결론 – HORUS는 나노초 단위의 IPC, 결정론적 스케줄링 및 언어 간 제로 카피 데이터 공유를 제공하는 실시간 전용 미들웨어입니다. 로봇 공학 및 기타 지연 시간에 민감한 도메인에서 ROS 2 및 기존 DDS 솔루션에 대한 고성능 대안으로 사용됩니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트