UAVCAN
UAVCAN개발자 | 주박스 로보틱스 / UAVCAN 컨소시엄[1] |
---|---|
초기 릴리즈 | 2014 |
리포지토리 | https://github.com/UAVCAN |
기록 위치 | C++, C, Python, Rust, JavaScript |
운영 체제 | 크로스 플랫폼 |
면허증 | MIT 면허 |
웹사이트 | uavcan |
UAVCAN(Uncomplexed Application-Level Vehicular Computing and Networking)은 다양한 통신 전송을 사용하여 안정적인 차량 내부 통신을 위해 설계된 경량 프로토콜로, 원래 CAN 버스를 대상으로[2] 하지만 후속 개정에서 다양한 네트워크 유형을 대상으로 한다.[3]
역사
나중에 UAVCAN의 핵심 설계 원리를 형성할 일반적인 아이디어를 폭넓게 개괄적으로 설명한 첫 번째 RFC는 2014년 초에 출판되었다.[4] 이는 현대의 지능형 차량(주로 무인 항공기)의 분산된 구성 요소들 간에 강력한 실시간 차량 내부 데이터 교환을 촉진할 수 있는 적절한 기술의 결여에 대한 대응이었다.
원래 RFC 이후 프로토콜은 세 가지 주요 설계 반복을 거쳤으며, 이는 2020년(6년 후) UAVCAN v1.0이라는 라벨이 붙은 첫 장기 안정 개정판이 출시되면서 정점을 찍었다. 그동안 이 의전은 무인항공기,[5][6] 우주선,[7] 수중로봇,[8] 경주용 자동차,[9] 일반로봇시스템,[10] 마이크로모빌리티 차량 등 수많은 다양한 시스템에 배치됐다.[11]
UAVCAN v1.0은 개발자들에 의해 DDS나 ROS의 연산 그래프와 같은 높은 수준의 출판-구독 프레임워크에 대한 매우 결정론적이고 안전 지향적인 대안으로 배치되어 있는데, 이는 깊이 내장된 높은 무결성 애플리케이션에서 사용할 수 있을 만큼 충분히 컴팩트하고 간단하다.[12] UAVCAN은 32K ROM과 8K RAM이 장착된 베어 메탈 마이크로컨트롤러로 사용 가능한 것으로 나타났다.[13]
프로토콜은 개방되어 있으며 승인이나 허가 수수료 없이 자유롭게 재사용할 수 있다. 핵심 표준의 개발과 그 기준 구현은 공개 토론 포럼을 통해 조정된 개방적인 방식으로 수행된다.[14] 이 프로젝트는 UAVCAN 컨소시엄[1] 구성원들이 제출한 연간 회비와 채택자들의 자발적인 기여를 통해 자금을 조달한다. 2020년 현재 이 사업은 NXP반도체[15], 드론코드 프로젝트 등 몇몇 주요 기관이 지원하고 있다.[16]
디자인
UAVCAN은 기능 안전성과 결정론에 영향을 주지 않으면서 소프트웨어 엔지니어에게[17] 접근 가능하고 친숙한 제로 비용 추상화를 제공한다.[3] 신기술로서, 유산의[3] 제약을 받지 않고, 일반 정보 기술 분야의 최근의 발전으로부터 많은 돈을 빌린다.[18] 프로토콜은 높은 무결성 애플리케이션을 수용하기 위해 네트워크에 접속하는 즉시 노드가 운영을 시작할 수 있는 상태 비저장 출판-구독 통신 모델을 제공한다.[12]
프로토콜에는 이더넷이나 CAN FD와 같은 신뢰할 수 있는 차량 네트워크 위에서 작동하는 전송 계층과 이른바 DSDL(Data Structure Description Language)에 기초한 전송 불가지론적 프레젠테이션(시리얼라이제이션) 계층의 두 가지 주요 구성요소가 명확하게 분리되어 있다.[19] 프로토콜은 1000개 미만의 코드의 논리적 라인에서 구현 가능한 것으로 나타났다.[20]
DSDL은 실시간 고 Integrity 임베디드 시스템에 적합한 솔루션을 렌더링하기 위해 추가적인 정적 제약을 도입한다는 점을 제외하고는 ROS에서 사용되는 인터페이스 설명 언어와 이념적으로 유사하다. 이러한 유사성으로 인해 일부 개발자들은 자동 번역 레이어를 사용하여 UAVCAN과 ROS를 인터페이스하게 되었다.[10]
핵심 원리
이 프로토콜은 솔루션이 현대적인 복잡한 안전 중요 차량 시스템에 적합하도록 하기 위한 다음과 같은 핵심 설계 원칙을 기반으로 구축된다.
- 민주적 네트워크 — 마스터 노드가 없다. 네트워크의 모든 노드는 동일한 통신 권한을 가지고 있으므로 단일 장애 지점이 없어야 한다.
- 기능 안전의 촉진 — UAVCAN 시스템 설계자는 시스템을 분석하고 정확한 동작을 보장하기 위해 필요한 보증과 도구를 마음대로 가지고 있다.
- 높은 수준의 통신 추상화 — 프로토콜은 정적으로 정의되고 정적으로 검증된 데이터 유형(구성표)을 가진 게시/구독 및 원격 프로시저 호출 통신 의미 체계를 지원한다. 통신에 사용되는 데이터 유형은 명확하고 플랫폼에 구애받지 않는 방식으로 정의되며, 기계와 인간 모두 쉽게 이해할 수 있다.
- 공급업체 간 상호운용성 촉진 — UAVCAN은 서로 다른 공급업체들이 그들의 장비가 상호운용성을 보장하도록 구축할 수 있는 공통 기반을 제공한다. UAVCAN은 표준 응용 프로그램 제한 통신 데이터 유형의 일반 세트를 제공한다.
- 잘 정의된 일반 고급 기능 — UAVCAN은 네트워크 검색, 노드 구성, 노드 소프트웨어 업데이트, 노드 상태 모니터링, 네트워크 전체 시간 동기화, 플러그 앤 플레이 노드 지원 등과 같은 일반적인 고급 기능에 대한 표준 서비스와 메시지를 정의한다.
- 원자성 데이터 추상화 — 노드는 단일 전송 프레임의 용량을 초과하는 대규모 데이터 구조를 교환할 수 있다. UAVCAN은 프로토콜 레벨에서 자동 데이터 분해 및 재조립을 수행하여 관련 복잡성을 애플리케이션으로부터 숨긴다.
- 높은 처리량, 낮은 지연 시간, 결정론 — UAVCAN은 기본 전송 프로토콜에 매우 낮은 오버헤드를 추가하여 높은 처리량과 낮은 지연 시간을 보장한다. 이는 UAVCAN이 하드 실시간 애플리케이션에 적합하도록 만든다.
- 중복 인터페이스 및 중복 노드 지원 — UAVCAN은 모듈형 이중화가 필요한 애플리케이션에 적합하다.
- 간단한 논리, 낮은 컴퓨터 요구 사항 — UAVCAN은 고성능 온보드 컴퓨터에서 극도로 리소스 제약을 받는 마이크로컨트롤러에 이르기까지 다양한 임베디드 시스템을 대상으로 한다. 컴퓨팅 파워와 엔지니어링 시간 측면에서 지원하는 것은 저렴하며, 필요에 따라 고급 기능을 점진적으로 구현할 수 있다.
- 풍부한 데이터 유형 및 인터페이스 추상화 — 인터페이스 설명 언어는 기술의 핵심 부분으로, 깊이 내장된 서브시스템이 시뮬레이션과 기능 테스트를 가능하게 하면서(유지관리 가능한 방식으로) 상위 레벨 시스템과 직접 인터페이스할 수 있도록 한다.
- 다양한 전송 프로토콜에 대한 지원 — UAVCAN은 여러 개의 다른 전송에서 사용할 수 있으며, 향후 다른 전송 프로토콜을 지원하도록 확장할 수 있다.
- API-Agnonistic 표준 — 다른 네트워킹 표준과 달리 UAVCAN은 API(응용프로그램 인터페이스)를 설명하려고 시도하지 않는다. 네트워크의 다른 참가자가 관측할 수 있는 구현 동작에 영향을 미치지 않는 모든 세부사항은 규격의 범위 밖에 있다.
- 개방형 규격 및 참조 구현 — UAVCAN 규격은 항상 개방적이고 모든 사람이 자유롭게 사용할 수 있다. 참조 구현은 허용 가능한 MIT 라이선스의 조건에 따라 배포되거나 공개 영역으로 공개된다.
전송층
UAVCAN/CAN
CAN 전송은 29비트 식별자를 사용하여 CAN 및 CAN FD 위에 구축된다. CAN 페이로드에는 전송 계층의 요구에 대해 프레임당 1바이트의 고정 크기 오버헤드가 포함된다.[19]
UAVCAN/UDP
UAVCAN/UDP 전송은 실시간 이더넷 기반 차량 네트워크를 위해 제안되었다. 설계는 AFDX, DDS/RTPS, SOMP/IP의 영향을 받는다고 한다.[18]
표준 데이터 유형
다른 유사한 기술들과 마찬가지로, UAVCAN은 인기 있는 애플리케이션의 특정 공통 문제를 다루기 위한 목적으로 프로토콜 유지 관리자에 의해 관리되고 큐레이션된 공통 데이터 유형의 라이브러리를 제공한다.[21] 이러한 데이터 형식은 일반적으로 프로그래밍 언어가 사용자가 개발한 소프트웨어에 의존할 표준 라이브러리를 정의하는 것과 마찬가지로 채택자가 정의한 벤더별 또는 애플리케이션별 데이터 형식을 보완한다. 프로토콜 규격은 독립 벤더가 정의한 데이터 유형의 충돌을 방지하고 상호운용성을 향상시키기 위한 일련의 규칙을 제공한다.[22]
외부 링크
참조
- ^ a b https://uavcan.org/consortium
- ^ "About UAVCAN". Retrieved 28 Feb 2020.
- ^ a b c "UAVCAN - Kvaser - Advanced CAN Solutions". Retrieved 16 October 2019.
- ^ "Drones discuss UAVCAN - CAN bus for UAV". groups.google.com/forum/#!topic/drones-discuss. Retrieved 2020-02-27.
- ^ Meier, Lorenz (2017). Dynamic Robot Architecture for Robust Realtime Computer Vision (Thesis). ETH Zurich. doi:10.3929/ethz-a-010874068.
- ^ "ArduPilot Developer CAN bus and UAVCAN protocol". ardupilot.org. Retrieved 2020-02-27.
- ^ Losekamm, Martin; Milde, Michael; Poschl, Thomas; Greenwald, David; Paul, Stephan (2016). Real-Time Omnidirectional Radiation Monitoring on Spacecraft (paper). doi:10.2514/6.2016-5532.
- ^ Bhat, Sriharsha; Stenius, Ivan; Bore, Nils; Severholt, Josefine; Ljung, Carl; Torroba Balmori, Ignacio (2019). "Towards a Cyber-Physical System for Hydrobatic AUVs". OCEANS 2019 - Marseille. pp. 1–7. doi:10.1109/OCEANSE.2019.8867392. ISBN 978-1-7281-1450-7. S2CID 204700489.
- ^ http://robotek.no/filer/dokumenter/Revolve-NTNU.pdf
- ^ a b "GitHub - MonashUAS/Canros: UAVCAN to ROS interface". GitHub.
- ^ https:///ww.전기-발광판.빌더/t/all-new-2019-2019-vesc-발광판/83619
- ^ a b https://forum.uavcan.org/t/uavcan-a-highly-dependable-publish-subscribe-protocol-for-real-time-intravehicular-networking/557
- ^ https://diydrones.com/profiles/blogs/new-opengrab-epm-v3-for-uav-cargo-holding
- ^ https://forum.uavcan.org/
- ^ https://community.nxp.com/docs/DOC-345215
- ^ "Dronecode Leading open-source components for UAVs". www.dronecode.org. Retrieved 2020-02-27.
- ^ "OlliW's Bastelseiten » UC4H: UAVCAN for Hobbyists".
- ^ a b "Alternative transport protocols in UAVCAN". 11 January 2019.
- ^ a b https://uavcan.org/specification
- ^ "Compact UAVCAN/CAN v1 in C". GitHub. 22 November 2021.
- ^ "Regulated DSDL definitions". GitHub. 16 November 2021.
- ^ "Data type regulation policy and membership fees". 8 December 2019.