Pixhawk原生韌體PX4之驅動ID
驅動ID
PX4使用驅動ID將獨立感測器貫穿於整個系統。這些ID儲存於配置引數中,用於匹配感測器校正值,以及決定哪些感測器被記錄到log中。
感測器的順序(例如一個是/dev/mag0
,另一個是/dev/mag1
)於優先順序是不掛鉤的,優先順序實際是在釋出uORB topic時確定的。
舉個例子
有關係統上三個磁力計的示例,使用飛行日誌(.px4log)轉存變數。三個引數(devtype、adress、bus)對感測器ID進行編碼,MAG_PRIME識別哪個磁力計被選為主感測器。每一個MAGx_ID是一個24bit數值,左面手工填零補充。
CAL_MAG0_ID = 73225.0
CAL_MAG1_ID = 66826.0
CAL_MAG2_ID = 263178.0
CAL_MAG_PRIME = 73225.0
大家先不妨對下面的24位ID進行解碼。
通過I2C連線的外部HMC5883,匯流排1,地址0x1E:在log中以IMU.MagX
顯示。
# device ID 73225 in 24-bit binary:
00000001 00011110 00001 001
# decodes to:
HMC5883 0x1E bus 1 I2C
通過SPI連線的內部HMC5883,匯流排1,選擇slot5。在log中以IMU1.MagX
顯示。
# device ID 66826 in 24-bit binary:
00000001 00000101 00001 010
# decodes to:
HMC5883 dev 5 bus 1 SPI
以及通過SPI匯流排連線的內部MPU9250磁力計,匯流排1,從裝置選擇slot4。在log中以IMU2.MagX
顯示。
# device ID 263178 in 24-bit binary:
00000100 00000100 00001 010
#decodes to:
MPU9250 dev 4 bus 1 SPI
裝置ID編碼
根據此格式,裝置ID是一個24位的數字。注意,第一欄位是上述解碼示例中的最低有效位。
struct DeviceStructure {
enum DeviceBusType bus_type : 3;
uint8_t bus: 5; // which instance of the bus type
uint8_t address; // address on the bus (eg. I2C address)
uint8_t devtype; // device class specific device type
};
這裡bus_type
按以下方式解碼:
enum DeviceBusType {
DeviceBusType_UNKNOWN = 0,
DeviceBusType_I2C = 1,
DeviceBusType_SPI = 2,
DeviceBusType_UAVCAN = 3,
};
devtype
按以下方式解碼:
#define DRV_MAG_DEVTYPE_HMC5883 0x01
#define DRV_MAG_DEVTYPE_LSM303D 0x02
#define DRV_MAG_DEVTYPE_ACCELSIM 0x03
#define DRV_MAG_DEVTYPE_MPU9250 0x04
#define DRV_ACC_DEVTYPE_LSM303D 0x11
#define DRV_ACC_DEVTYPE_BMA180 0x12
#define DRV_ACC_DEVTYPE_MPU6000 0x13
#define DRV_ACC_DEVTYPE_ACCELSIM 0x14
#define DRV_ACC_DEVTYPE_GYROSIM 0x15
#define DRV_ACC_DEVTYPE_MPU9250 0x16
#define DRV_GYR_DEVTYPE_MPU6000 0x21
#define DRV_GYR_DEVTYPE_L3GD20 0x22
#define DRV_GYR_DEVTYPE_GYROSIM 0x23
#define DRV_GYR_DEVTYPE_MPU9250 0x24
#define DRV_RNG_DEVTYPE_MB12XX 0x31
#define DRV_RNG_DEVTYPE_LL40LS 0x32
裝置ID解碼示例
結合此圖,上面的24位ID編碼,不言自明。
By Fantasy
相關推薦
Pixhawk原生韌體PX4之驅動ID
歡迎交流~ 個人 Gitter 交流平臺,點選直達: 驅動ID PX4使用驅動ID將獨立感測器貫穿於整個系統。這些ID儲存於配置引數中,用於匹配感測器校正值,以及決定哪些感測器被記錄到log中。 感測器的順序(例如一個是/dev/mag0,
Pixhawk原生韌體PX4之自定義引數在QGC顯示
歡迎交流~ 個人 Gitter 交流平臺,點選直達: 新增引數定義 mc_att_control_params.c /* * 新增引數FANTASY * * 僅支援大寫 */
Pixhawk原生韌體PX4之串列埠新增讀取感測器實現
歡迎交流~ 個人 Gitter 交流平臺,點選直達: 本部落格承接前一篇,對FreeApe的串列埠新增超聲波感測器博文後半部分進行學習。 為什麼叫前奏呢,因為用了偽感測器,把微控制器用串列埠傳送的有規律的資料當作了感測器讀取到的資料。但是無礙的。
Pixhawk原生韌體PX4之offboard
offboard PX4中的offboard(暫譯作外部控制)是一個非常強大的功能。可以接受來自外部的控制指令,按照目前的瞭解來看,offboard搭配上MAVROS以及類似於TX1/NUC板載計算器,在PX4這個穩定的飛控平臺上加上視覺處理或者人工智慧,大有
Pixhawk原生韌體PX4之commander函式
歡迎交流~ 個人 Gitter 交流平臺,點選直達: commaner.cpp包含了PX4中狀態機的邏輯,特此對此段程式碼中的部分關鍵函式進行解析。 set_main_state_rc transition_result_t set_mai
Pixhawk原生韌體PX4之TAKEOFF的啟動流程
歡迎交流~ 個人 Gitter 交流平臺,點選直達: 以TAKEOFF為例說明PX4中一個飛航模式的啟動流程 眾所周知由遙控器或者地面站決定Main state作為使用者期望到達的飛航模式 然後有commander進行條件判斷後輸出一個Nav
Ubuntu作業系統下Pixhawk原生韌體PX4的編譯方法
在Ubuntu上搭建環境相對簡單許多,按照PX4中文維基官網的教程即可。 工具鏈安裝 許可權設定 把使用者新增到使用者組 “dialout”(如果這步沒做,會導致很多使用者許可權問題): .1 sudo usermod -a -G dialout $USER
PX4原生韌體SPI驅動動編寫與IMU感測器替換
適用於PX4原生韌體核心目標:完成XSENS的MTI3,IMU替換。MTI3是一款航姿參考系統,可以獨立的輸出四元數,加速度,磁力計等,角速度等航姿資訊。裡面有完整的卡爾曼濾波,可以替換飛控本身裡面的姿態估計部分。因為PX4裡面所用的感測器器件都是消費級的元器件,所以MTI3
PX4學習(2)——原生韌體框架分析
本文轉自阿木社群: 搭建好了編譯環境,裝上了QT,就迫不及待的想看看程式碼的內容,結果。。。一看框架是懵逼的狀態。。。怎麼辦,查閱資料慢慢梳理唄~ 一 原生韌體工程目錄原始碼分析 這是原生韌體的目錄檢視 總目錄結構 Src:目錄是原始碼目錄
Pixhawk(PX4)之驅動詳解篇(0)_前期準備(招賢令)
一、開篇 開源精神常在!!! 誰說軟體工程師看不懂硬體原理圖。 經過一段時間的考慮,加上綜合那麼多次培訓班學員的反饋問題,決定深入研究一下PX4系統的驅
esp8266編譯韌體問題之旅
console資訊: make clean /usr/bin/make -C app clean; make[1]: Entering directory '/cygdrive/e/esp8266/esp8266workspace/helloword/app' Makef
STM32韌體庫之GPIOx操作理解
關於使用韌體庫操作GPIO管腳,在配置時,使用了這樣的語句: GPIOx->BRR = GPIO_Pin; 韌體庫相關原始碼: typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __I
Pixhawk原生PX4韌體中的坑(2017.6.8TREE上的版本)
origin: http://www.cnblogs.com/fly2mato/p/6575556.html作為一名飛控開發的小學生:),最近入坑Pixhawk+PX4了。 基於Pixhawk硬體平臺進行二次開發,有兩
Ubuntu16.04下手動配置pixhawk飛控--PX4韌體版本開發環境(ROS+mavros版本,超級完整!)
參考px4官網流程: 配置過程中網速一定要好!!!!一定要好!!!!最好翻牆!!!不然會出很多莫名其妙的bug的!!!!! --------------------------------------------------------------------
STM32F407VET6之IAR之ewarm7.80.4工程建立(基於官方韌體庫1.6版本) 的工程檔案目錄
最後整理結構如下所示,├─cmsis│ startup_stm32f401xx.s│ startup_stm32f40xx.s│ startup_stm32f40_41xxx.s│ startup_stm32f410xx.s│ startup_stm32f411xe.s│ startup_stm32f427x
STM32F407VET6之IAR之ewarm7.80.4工程建立(基於官方韌體庫1.6版本)
今天把stm32F407的工程之IAR建立完成了,特此記錄下。 下載官方韌體庫,STM32F4xx_DSP_StdPeriph_Lib_V1.6.1,V1.8.0版本的同理。新建以下幾個檔案 src放官方的各個c檔案 inc放官方的各個h檔案,以及使用者的h檔案,這樣可以方便在options裡只需要一個
openwrt之18.06版本原始碼編譯mt7688平臺韌體說明
映象編譯說明: 新增nodejs功能,參照OpenWrt Node.js Packages (nodejs),遇到Illegal instruction問題,參照部落格openwrt 編譯node.js功能(解決Illegal instruction錯誤),最好是把networ
PX4下載指定版本程式碼和刷韌體的三種方式
由於之前下載的是1.7版本的程式碼,現在v5版本的px4需要最新的程式碼韌體,因此這裡記錄一下. 檢視自己程式碼版本 檢視自己倉庫程式碼版本的命令如下: git describe --always --tags 輸出: v1.7.0-rc3-9-g0e1c7eb 我之前
Esp8266 進階之路32【高階篇】當esp8266遇到 Html,該怎麼內建網頁控制裝置,理清內建網頁的實現過程,實現無需路由器手機也可以控制esp8266。(附帶韌體)
一、前言; 這個月也快結束了,時間真快,我伺服器知識自學依然在路途中,這幾天聽到熱點網頁配置esp8266連線路由器,那麼我想這個不是很複雜,不過需要一些通訊協議的基礎,以及對esp8266
韌體遠端更新之STARTUPE2原語(fpga控制flash)
作者:九章子 來源:CSDN 原文:https://blog.csdn.net/jiuzhangzi/article/details/79471365 有的專案需要遠端更新韌體,更新完成後斷電、重啟即可。那遠端更新是如何實現的呢?用的最多的應該是乙太網或者自定義的區域網為