CAN Bus & DroneCAN

This section covers CAN bus communication and DroneCAN protocol.

AP_CANManager (CAN Bus Manager)

Header: libraries/AP_CANManager/AP_CANManager.h

Description: CAN bus manager for handling multiple CAN interfaces and protocols.

Warning

doxygenclass: Cannot find class “AP_CANManager” in doxygen xml output for project “ArduPilot” from directory: /home/runner/work/APMapi/APMapi/docs/../build/output-xml

Key Features:

  • Multiple CAN interface support

  • Protocol routing

  • Driver management

Usage Example:

#include <AP_CANManager.h>

AP_CANManager *can = AP_CANManager::get_singleton();

// Get CAN interface
AP_CANDriver *driver = can->get_driver(0);

DroneCAN (UAVCAN)

DroneCAN (formerly UAVCAN) is a lightweight protocol for CAN bus communication.

Header: libraries/DroneCAN/

Common DroneCAN Messages:

Common DroneCAN Nodes:

  • BLHeli_ESC - BLHeli-compatible ESCs

  • Zubax_Ranging - GPS modules

  • CAN_ESC - Standard CAN ESCs

Usage Example:

// DroneCAN ESC control
#include <DroneCAN.h>

// Send ESC command
uavcan_equipment_esc_Commands msg;
for (int i = 0; i < 4; i++) {
    msg.cmd[i].actuator_id = i;
    msg.cmd[i].command_value = motor_speeds[i];
}

canard.Sub(uavcan_equipment_esc_Commands_default_ext_id, &msg);

CAN Protocols

ArduPilot supports several CAN protocols:

  1. DroneCAN/UAVCAN - Main protocol for ESCs, GPS, sensors

  2. KDECAN - KDE Direct ESC protocol

  3. PicoCAN - Pico ESC protocol

  4. CANard - Generic CAN backend

Configuration Parameters:

  • CAN_P1_DRIVER - Primary CAN driver

  • CAN_P1_PROTOCOL - Primary CAN protocol

  • CAN_P2_DRIVER - Secondary CAN driver

  • CAN_P2_PROTOCOL - Secondary CAN protocol

See Also