ArduPilot開源飛控之AP_Mount_Backend_Serial
- 1. 源由
- 2. 框架設計
- 2.1 類定義
- 2.2 構造函數
- 2.3 init 方法
- 2.4 受保護成員
- 3. 重要方法
- 4. 總結
- 5. 參考資料
1. 源由
AP_Mount_Backend_Serial
是AP_Mount_Backend基于串口的通信的一個擴展模版。
2. 框架設計
- 繼承自
AP_Mount_Backend
- 添加了與串行通信相關的功能
2.1 類定義
class AP_Mount_Backend_Serial : public AP_Mount_Backend
{// 類成員和方法在這里定義
};
- 這行聲明了一個新的類
AP_Mount_Backend_Serial
,它繼承自基類AP_Mount_Backend
。
2.2 構造函數
public:// 構造函數AP_Mount_Backend_Serial(class AP_Mount &frontend, class AP_Mount_Params ¶ms, uint8_t instance, uint8_t serial_instance) :AP_Mount_Backend(frontend, params, instance),_serial_instance(serial_instance){}
- 構造函數被定義為
public
,意味著可以從類外部訪問。 - 構造函數接受四個參數:
AP_Mount &frontend
:一個指向AP_Mount
對象的引用。AP_Mount_Params ¶ms
:一個指向AP_Mount_Params
對象的引用。uint8_t instance
:一個無符號 8 位整數,表示實例編號。uint8_t serial_instance
:一個無符號 8 位整數,表示串行實例編號。
- 構造函數使用初始化列表將基類
AP_Mount_Backend
初始化為frontend
、params
和instance
參數。 _serial_instance
成員變量使用serial_instance
參數進行初始化。
2.3 init 方法
void init() override;
- 這是一個
public
方法,名為init
,它覆蓋了基類中的一個虛方法。 init
方法用于執行此實例所需的任何初始化操作。代碼片段未提供此方法的實際實現。
2.4 受保護成員
protected:// 內部變量AP_HAL::UARTDriver *_uart; // 與云臺連接的 UARTuint8_t _serial_instance; // 該實例的串行實例編號bool _initialised; // 如果 UART 已經初始化,則為 true
protected
部分包含內部成員變量,可以被這個類和派生類訪問。AP_HAL::UARTDriver *_uart
:一個指向AP_HAL
命名空間中UARTDriver
對象的指針,表示與云臺的 UART 連接。uint8_t _serial_instance
:一個無符號 8 位整數,存儲該對象的串行實例編號。bool _initialised
:一個布爾變量,指示 UART 是否已經初始化。
3. 重要方法
AP_Mount_Backend_Serial::init
初始函數,設置了串行實例,并調用基礎類AP_Mount_Backend::init
。
// Default init function for every mount
void AP_Mount_Backend_Serial::init()
{const AP_SerialManager& serial_manager = AP::serialmanager();// search for serial port. hild classes should check that uart is not nullptr_uart = serial_manager.find_serial(AP_SerialManager::SerialProtocol_Gimbal, _serial_instance);if (_uart == nullptr) {return;}// initialised successfully if uart is found_initialised = true;// call the parent class initAP_Mount_Backend::init();
}
4. 總結
整個基礎類的集成關系,這里梳理一遍:
AP_Mount_Backend├──> AP_Mount_Alexmos├──> AP_Mount_Gremsy├──> AP_Mount_Scripting├──> AP_Mount_Servo├──> AP_Mount_SoloGimbal├──> AP_Mount_SToRM32├──> AP_Mount_Xacti└──> AP_Mount_Backend_Serial├──> AP_Mount_SToRM32_serial├──> AP_Mount_Siyi├──> AP_Mount_Viewpro└──> AP_Mount_Topotek
通過上面的梳理,整個云臺設備業務邏輯是通過AP_Mount
來整合,包括攝像頭、測距儀、攝像頭跟隨。
5. 參考資料
【1】ArduPilot開源飛控系統之簡單介紹
【2】ArduPilot之開源代碼Task介紹
【3】ArduPilot飛控啟動&運行過程簡介
【4】ArduPilot之開源代碼Library&Sketches設計
【5】ArduPilot之開源代碼Sensor Drivers設計
【6】ArduPilot開源飛控之AP_Mount
【7】ArduPilot開源飛控之AP_Mount_Backend