### 0.0.1 DroneCAN 노드 ID 동적 할당(Dynamic Node ID Allocation) 프로토콜 및 데이터 프레임 캡슐화

### 0.0.1 DroneCAN 노드 ID 동적 할당(Dynamic Node ID Allocation) 프로토콜 및 데이터 프레임 캡슐화

전통적인 I2C 버스나 CAN 버스 시스템에서는 버스에 참여하는 센서들이 각자의 고유 주소(Address)를 컴파일 타임에 하드코딩(Hard-coding)하거나 기계적인 DIP 스위치로 수동 설정해야 하는 번거로움이 있었다. 그러나 PX4 생태계가 주도하는 DroneCAN 프로토콜은 진정한 플러그 앤 플레이(Plug-and-Play)를 실현하기 위해 **동적 노드 ID 할당(Dynamic Node ID Allocation, DNA)**이라는 정교한 네트워크 레이어 프로토콜을 탑재하고 있다.

이를 통해 지능형 GPS, 에어스피드 센서, 자율 배터리 등 수십 개의 장치를 순서와 무관하게 버스에 물려도 런타임에 자동으로 주소가 교섭(Negotiation)된다.

0.1 동적 노드 ID 할당(DNA) 알고리즘의 3단계 접속(Handshake) 절차

DroneCAN 네트워크에 전원이 인가되면, 할당자(Allocator) 역할을 수행하는 마스터 노드(대부분 PX4 비행 제어기 본체)와 미등록(Unallocated) GPS 노드 간에 다음과 같은 무기명 브로드캐스트 절차가 수행된다.

  1. 할당 요청(Node ID Allocation Request): 새로 버스에 진입한 스마트 GPS 노드는 자신의 ID 필드를 비워둔 채(Source Node ID = 0), 자신의 고유한 128비트 하드웨어 식별자(Unique ID, UID)를 담은 할당 요청 프레임을 버스에 무작위 시연 지연(Randomized Delay)을 두어 발송한다.
  2. 할당 풀(Pool) 탐색 및 예약: 간선의 관제탑 역할을 하는 비행 제어기(PX4)는 이 요청을 수신하고, 현재 네트워크에서 사용 중이지 않은 비어 있는 7비트 노드 ID(1~127 범위)를 하나 선택하여 해당 UID와 수학적으로 바인딩(Binding)한다.
  3. 할당 응답(Node ID Allocation Response): 할당자는 앞서 요청받은 128비트 UID와 새로 부여할 노드 ID를 패키징하여 버스에 브로드캐스트한다. 미등록 GPS 노드는 쏟아지는 네트워크 패킷 중 자신의 UID가 캡슐화된 응답을 골라내어 드디어 정식 노드 ID를 승인받고, 이후 모든 측위 데이터 송출에 이 ID를 꼬리표(Header)로 부착한다.

이러한 동적 교섭 절차 덕분에 드론 엔지니어는 듀얼 GPS를 결선할 때 “어느 것이 GPS 1이고 GPS 2인가“를 하드웨어적으로 고민할 필요 없이, PX4가 부팅 과정에서 동적으로 할당한 ID 우선순위를 통해 자동으로 리던던시(Redundancy) 서열을 구축하게 된다.

0.2 DSDL 기반의 데이터 프레임 캡슐화(Encapsulation)

노드 ID 교섭이 끝나면 GPS는 측위 데이터를 전송하기 시작한다. DroneCAN은 데이터 포맷을 정규화하기 위해 **DSDL (Data Structure Description Language)**이라는 추상화 스키마를 사용한다.

C++ Struct와 유사한 이 언어로 정의된 메시지(예: uavcan.equipment.ahrs.MagneticFieldStrength 또는 uavcan.equipment.pos.Fix)는 CAN 2.0B(최대 8바이트 페이로드) 또는 CAN FD(최대 64바이트 페이로드)의 물리 계층 한계에 맞추어 아주 조밀하게 비트 레벨로 직렬화(Serialization)된다.

  • 다중 프레임 전송(Multi-frame Transfer): 만약 전송해야 할 GPS 픽스(Fix) 데이터가 풍부하여 8바이트를 초과한다면, 노드의 트랜시버는 이를 여러 개의 CAN 프레임으로 분산(Fragmentation)시킨다.
  • 테일 바이트(Tail Byte) 토글링: 각 분할된 조각 프레임의 마지막 바이트에는 전송 시작 프레임, 중간 프레임, 끝 프레임을 나타내는 제어 비트와 토글(Toggle) 시퀀스가 오밀조밀하게 캡슐화되어 있어, 수신하는 PX4 측에서 누락된 프레임이 생기면 곧장 해당 조립을 폐기(Drop)하고 무결성을 유지할 수 있도록 보장한다.

0.3 노드 정보(GetNodeInfo) 메타데이터의 통일성

단순 좌표 전송을 넘어, 동적 할당이 완료된 GPS 노드는 PX4의 GetNodeInfo (UAVCAN 서비스 ID 1) 요청에 응답하여 자신의 하드웨어 리비전(Revision), 펌웨어 버전, 벤더명(Vendor Name), 심지어 내부 MCU의 과열 상태망까지 한 번에 리포팅한다.

QGroundControl(GCS) 콘솔에서 사용자는 차량 설정의 MAVLink Console을 통해 uavcan status 명령을 입력하면, 동적으로 할당된 모든 노드의 ID 목록과 펌웨어 버전이 일목요연하게 출력된다. 이는 과거 UART 시절에는 상상할 수 없었던 고차원적인 시스템 관제망(System Observer)의 진보를 의미하며, 비행 중 하드웨어 열화 현상을 사전 진단하는 예방 정비(Predictive Maintenance)의 핵심 토대가 된다.