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:
DroneCAN/UAVCAN - Main protocol for ESCs, GPS, sensors
KDECAN - KDE Direct ESC protocol
PicoCAN - Pico ESC protocol
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¶
Mission, Parameters & Motors - Motor control
Sensor Libraries - GPS, RangeFinder
AP_BattMonitor_DroneCAN - Battery via CAN
AP_RangeFinder_DroneCAN - Rangefinder via CAN