資料介紹
描述
介紹
無人機有多個傳感器,可以讓它飛行。但他們都無法識別近距離的障礙物或與地面的實際距離。這就是無人機需要測距傳感器的原因。它們提供到途中最近物體的準(zhǔn)確距離讀數(shù)。此外,這些對于允許路徑規(guī)劃和自主導(dǎo)航的映射目的很有用。
多年來,我一直在為我的大學(xué)項目使用 Crazyflie 并使用庫存固件。在找到用 Ada 實現(xiàn)的 Certyflie 固件后,由于它的簡單性,我開始對其進行測試。沒有大量的文件,很容易在短時間內(nèi)熟悉固件并實現(xiàn)自己的函數(shù)和庫。在這里,我計劃解釋以下主題。
- 粗略介紹 Certyflie 固件的主要功能。
- 集成 ToF 傳感器以測量高度
- 實施自主起飛序列
- 使用 ToF 傳感器實現(xiàn)高度保持功能。
- 介紹如何使用 ToF 傳感器平臺來映射環(huán)境。
讓我們開始為這些設(shè)置背景。
設(shè)置背景
這些都是對我有用的東西,在開始使用 Ada 對 CF 進行編程時不會遇到太多麻煩。
- 操作系統(tǒng) - Windows 8.1
- GNAT版-2018手臂精靈
- 固件 - Certyflie (ravenscar-cf-stable)
要設(shè)置編譯器路徑,請打開命令提示符,導(dǎo)航到克隆存儲庫的根目錄并鍵入以下命令。我們需要設(shè)置 GNAT bin 文件夾的路徑。根據(jù)您的安裝目錄更改路徑。
path C:\GNAT\2018\bin;%path%
要將固件上傳到 CF,我們需要 DFU-util。簡單地說,我們可以使用CLI 安裝程序將其安裝在 windows 上。安裝后,您可以dfu-util -l
在命令提示符下鍵入以檢查安裝。它應(yīng)該返回已安裝的版本。
Certyflie 存儲庫的自述文件部分提供了有關(guān)上傳編譯文件的明確說明。由于 Windows 沒有 sudo 命令,請確保在最后一個命令中刪除該部分。
dfu-util -d 0483:df11 -a 0 -s 0x08000000 -D obj/cflie.bin
添加 Z 游俠甲板
CF 平臺帶有幾個可拆卸的傳感器板,以擴展其功能。Z ranger 甲板有一個飛行時間傳感器,它是一個距離測量傳感器,可幫助無人機保持與地面的恒定高度。
Z ranger 配備 VL53L0X 傳感器,最大感應(yīng)距離為 2m。此傳感器的庫包含在 Certyflie\Ada_Drivers_Library\components\src\range_sensor 內(nèi)的克隆存儲庫中。但是,此庫的新版本可在https://github.com/AdaCore/Ada_Drivers_Library 中找到。在這個實現(xiàn)中,我用新的庫替換了現(xiàn)有的庫。
要定義傳感器對象并設(shè)置 I2C 端口,請將庫添加到stm32-board.ads ,其中,
with VL53L0X; use VL53L0X;
并添加以下行。
Z_Ranger_Device : VL53L0X_Ranging_Sensor(I2C_EXT_Port'Access, Ravenscar_Time.Delays);
啟動 CF 后,它會初始化所有傳感器和組件。此過程在crazyflie_system.adb
內(nèi)部System_Init
過程中可用。為了將我們的傳感器添加到這個初始化過程中,我們首先導(dǎo)入 VL53L0X、STM32.board 和 STM32.I2C 庫。然后我們在初始化過程中添加以下部分。
Initialize_I2C_GPIO (STM32.I2C.I2C_Port (Z_Ranger_Device.Port.all));
Configure_I2C (STM32.I2C.I2C_Port (Z_Ranger_Device.Port.all));
Set_Device_Address (Z_Ranger_Device, 16#52#, Status);
Data_Init (Z_Ranger_Device, Status);
Static_Init (Z_Ranger_Device, New_Sample_Ready, Status);
Perform_Ref_Calibration (Z_Ranger_Device, Status);
Set_VCSEL_Pulse_Period_Pre_Range (Z_Ranger_Device, 18, Status);
Set_VCSEL_Pulse_Period_Final_Range (Z_Ranger_Device, 14, Status);
Start_Continuous (Z_Ranger_Device, 0 ,Status);
上傳后,您可以給CF上電,用手機攝像頭檢查ToF傳感器是否工作正常。如果傳感器已成功初始化并開始工作,您會注意到紫光。
PS - 這里我們使用光流甲板,而不是 Z 游俠甲板。因此,如果您的 Z 游俠套牌看起來不同,請不要擔(dān)心。pmw3901 傳感器由于飛行無人機時發(fā)生的一些嚴(yán)重碰撞而損壞。
添加到日志
CF 有一個python 庫來執(zhí)行各種任務(wù)。使用原始固件,我們可以通過CF 無線電模塊使用筆記本電腦與無人機進行通信。檢索數(shù)據(jù)日志是該庫最重要的功能之一。它可以訪問傳感器讀數(shù)、無人機狀態(tài)、電池電量和許多其他參數(shù)。幸運的是,Certyflie 固件的數(shù)據(jù)日志數(shù)量有限,并且可以與 CF python 庫一起使用。
在示例文件夾中打開。basiclogSync.py
此代碼在運行時打印實時滾動、俯仰和偏航值。
lg_stab.add_variable('stabilizer.roll', 'float')
lg_stab.add_variable('stabilizer.pitch', 'float')
lg_stab.add_variable('stabilizer.yaw','float')
在第一行中,“stabilizer”是日志組,“roll”是參數(shù),“float”是數(shù)據(jù)類型,它與 CF 記錄該特定參數(shù)的數(shù)據(jù)類型相同。stabilizer.adb,
您可以在其中找到已定義所有日志組的過程Stabilizer_Init
。例如,下面顯示了偏航日志是如何初始化的。
Log.Add_Log_Variable (Group => "stabilizer",
Name => "yaw",
Log_Type => Log.LOG_FLOAT,
Variable => Euler_Yaw_Actual'Address,
Success => Dummy)
當(dāng)您運行 python 代碼時,它將連接到 CF 并開始打印值。改變無人機的方向,看看值是如何變化的。
現(xiàn)在讓我們將 ToF 傳感器測量值添加到日志中。這樣我們就有機會看到當(dāng)我們改變無人機的高度時值是如何變化的。
首先,我們需要在可用時從傳感器獲取測量值。初始化后,系統(tǒng)Stabilizer_Update_Attitude
運行stabilizer.adb
. 這會更新無人機的狀態(tài)參數(shù)。我們在這個函數(shù)中添加了我們的高度測量部分。接收距離以毫米為單位。這里我們將其轉(zhuǎn)換為 m。
if Range_Value_Available (Z_Ranger_Device) then
Z_Height := 0.001 * Float (Read_Range_Millimeters (Z_Ranger_Device));
end if;
我添加了一個名為“Range_Measurements”的單獨狀態(tài)變量組來保留這個變量。然后將以下日志添加到Stabilizer_Init
函數(shù)中。
Log.Add_Log_Variable (Group => "range",
Name => "z_range",
Log_Type => Log.LOG_FLOAT,
Variable => Z_Height'Address,
Success => Dummy);
要通過 PC 查看這些值,可以在 python 腳本中添加以下行。
lg_stab.add_variable('stabilizer.yaw','float')
?
實現(xiàn)高度保持功能
Certyflie 固件已經(jīng)具有高度保持功能。它使用預(yù)定義的推力作為基礎(chǔ)值。你可以在里面找到這個值commander.ads
。我假設(shè)這個值幾乎等于沒有額外傳感器板的 CF 的重量。
ALT_HOLD_THRUST_F : constant := 32_767.0;
由于現(xiàn)在我們有了一種以 1mm 的分辨率測量距地面距離的方法,因此我們可以使用 z 測量來實現(xiàn)單獨的高度保持功能。為此,我們需要找到一種方法來使用我們自己的函數(shù)來設(shè)置推力值。
為穩(wěn)定器Stabilizer_Control_Loop
功能提供推力、滾動、俯仰和偏航值,以運行電機使無人機飛行。如果仔細(xì)觀察,我們可以確定無人機是通過兩種方法激活的。
- 從飛行員命令
- 當(dāng)檢測到自由落體時
Pilot 命令使用 CrazyFlie 移動應(yīng)用程序發(fā)送。您可以使用移動應(yīng)用程序中的虛擬操縱桿連接藍(lán)牙并駕駛無人機。這些命令被無人機捕獲為 CRTP 數(shù)據(jù)包,并對消息進行解碼以獲取相關(guān)參數(shù)。
使用 IMU 測量的 Z 加速度值檢測自由落體。一旦檢測到自由落體,無人機就會開始產(chǎn)生推力以從墜毀中恢復(fù)并運行一個循環(huán)以減少推力以降低高度。起始推力和減量值可以在 free_fall.ads 中找到。您可以減少遞減值以獲得平穩(wěn)著陸。
MAX_RECOVERY_THRUST : constant T_Uint16 := 48_000;
RECOVERY_THRUST_DECREMENT : constant T_Uint16 := 100;
通過模仿這些函數(shù)中的任何一個,我們可以傳遞推力值來實現(xiàn)我們自己的高度保持函數(shù)。但我更喜歡模仿飛行員的命令來實現(xiàn)。
首先,我在Stabilizer_Control_Loop
. 然后我在命令文件中實現(xiàn)了一個名為“Autonomous_Sequence”的單獨函數(shù),該函數(shù)打開電機并運行 PID 算法以將高度保持在所需的水平。添加以下部分以確保無人機在運行此功能之前處于水平位置。
if abs (Euler_Pitch_Actual) < 2.0 and abs (Euler_Roll_Desired) < 2.0 then
Activate_Autopilot := True;
end if;
PID 變量在commander.ads 中定義。
如果您曾經(jīng)調(diào)整過無人機的 PID,您可能知道這是一個非常麻煩的過程。由于無人機開始側(cè)向漂移,因此沒有精確的水平位置控制器使這變得更加困難。為了避免這種情況,我從左右兩側(cè)將兩條繩子連接到無人機上。這允許無人機在我們調(diào)整 PID 值時在有限區(qū)域內(nèi)移動。
以下是高度保持功能的初步測試。該函數(shù)運行 8 秒。這個時間可以通過增加循環(huán)計數(shù)來增加。所需的高度設(shè)置為 0.1 米。
在調(diào)整 PID 時,我決定升級電機以獲得更高的有效負(fù)載能力,以連接更多傳感器并包括更大的電池。在這個實驗中,期望的高度是 0.8m。(Kp - 2000,Kd - 0,Ki - 500)。繩子系在兩把椅子上以獲得升高的位置。
VL53L0X 和 VL53L1X
VL53L1X 的最大感應(yīng)范圍為 4m,而我們在本項目中使用的 VL53L0X 的最大感應(yīng)范圍為 2m。如上圖所示,VL53L1X 的鏡頭比其他傳感器大。
Z Ranger 甲板 V2配備了這個新傳感器。在瀏覽了兩個數(shù)據(jù)表之后,我注意到 VL53L1X 帶有相同的默認(rèn) I2C 地址 (0x29),這也是 VL53L0X 的地址。此外,大多數(shù)重要寄存器在兩個傳感器中具有相同的地址。因此,Ada 中的 VL53L0X 庫可以與 VL53L1X 一起運行基本功能,足以滿足我們的要求。
使用多個 ToF 傳感器
很明顯,我們需要無人機上更多的傳感器來覆蓋周圍的環(huán)境。但問題是我們?nèi)绾闻c具有相同 I2C 地址的多個傳感器進行通信。
CF上的STM32芯片主要有2個I2C口。但一個端口僅用于 IMU 等內(nèi)部傳感器。其他端口連接到擴展引腳以與傳感器板通信。所以我們需要想出一種方法來使用這個 I2C 端口與多個 ToF 傳感器進行通信。
兩種 ToF 傳感器型號都能夠更改其 I2C 地址。當(dāng)我們將新地址寫入傳感器時,它會存儲在易失性存儲器中。因此,我們每次打開設(shè)備并寫入I2C地址時都需要一個一個連接傳感器。為了避免這個過程,ToF 傳感器帶有一個稱為 XSHUT 的額外引腳。
要打開傳感器,我們需要拉起這個引腳。在 Z ranger 面板中,此引腳通過一個電阻器永久連接到 Vcc。解決方案是編寫一個程序,使除 z ranger 以外的所有其他傳感器中的 XSHUT 引腳保持低電平,寫入不同的 I2C 地址,將一個 XSHUT 引腳設(shè)置為高電平,寫入不同的 I2C 地址等等。在您有足夠的 GPIO 引腳來連接所有 ToF 傳感器之前,這看起來是一個不錯的方法。
為了克服缺少 GPIO 引腳的問題,具有 5 個 ToF 傳感器的 CF Multiranger 平臺配備了一個 8 位 GPIO 擴展 IC PCA9534。該芯片通過不同的 I2C 地址與無人機通信。當(dāng)我們將值寫入其注冊表時,它會根據(jù)給定值將其 8 個 GPIO 引腳設(shè)置為高電平和低電平。這樣,我們就有機會僅通過 I2C 端口控制所有 ToF 傳感器。因此,可以毫無困難地使用與上述 XSHUT 引腳相同的程序。
Ada 庫帶有幾個 IO 擴展器庫。但不幸的是,它沒有配置PCA9534芯片的庫。目前,我正在為這個芯片實現(xiàn)一個庫。附件庫的 Ada 庫文件夾中提供了一個 beta 庫,但它需要更多的工作來實現(xiàn)所有可用的功能。同樣,我計劃在實施取得??進展時更新存儲庫。
在這個實現(xiàn)之后,我們可以使用所有的距離測量來實現(xiàn)一個避障功能。
?
- 基于ToF 的 OPT3101 遠(yuǎn)距離接近和距離傳感器AFE數(shù)據(jù)手冊 3次下載
- XL5300TOF測距模塊規(guī)格書 0次下載
- 紅外ToF技術(shù)將大幅提升接近感應(yīng)傳感器的性能及可靠性
- 使用VL6180X ToF傳感器與Particle Argon控制伺服器
- CrazyFlie 避障傳感器飛行器
- TOF 圖像傳感器 NP2F1201簡版規(guī)格書
- 基于二維納米材料的電致敏化學(xué)傳感器詳細(xì)資料 6次下載
- 光傳感器及傳感器與信號處理等知識的解析 25次下載
- 用環(huán)境光傳感器封裝近距離傳感器的優(yōu)點 29次下載
- 基于光傳感器的概述 11次下載
- 光流傳感器英文資料 6次下載
- 光傳感器:概述 9次下載
- 微陣列光尋址生化傳感器系統(tǒng)設(shè)計研究
- 用PVDF傳感器測量梁的振動功率流
- 結(jié)構(gòu)光傳感器模型及特性分析
- 多區(qū)飛行時間(ToF)傳感器的特點 868次閱讀
- 采用數(shù)字微波傳感器、繼電器和Arduino控制板的自動光控系統(tǒng) 833次閱讀
- MEMS超聲波ToF傳感器 助力提高AR/VR真實感面臨 1781次閱讀
- dfrobotVL53L0X ToF激光測距傳感器簡介 7052次閱讀
- digilentPmodALS:環(huán)境光傳感器介紹 2698次閱讀
- 光幕傳感器工作原理及操作方法 9789次閱讀
- 英飛凌REAL3 ToF傳感器的背后技術(shù)揭秘 2178次閱讀
- 如何選擇合適的光傳感器 2136次閱讀
- TOF相機優(yōu)缺點分析及其應(yīng)用領(lǐng)域 1.2w次閱讀
- 不同的傳感器都具有哪些不同的效應(yīng) 3881次閱讀
- 智能傳感器相比傳統(tǒng)傳感器具有哪些優(yōu)點? 1.3w次閱讀
- 什么是光幕傳感器_光幕傳感器安裝及接線圖 2w次閱讀
- 拆解對比OPT8241和VL53L0X:關(guān)于TI和ST的ToF傳感器工藝最大不同之處的考究 4897次閱讀
- 索尼正式發(fā)布背照式ToF圖像傳感器IMX456QL 1.6w次閱讀
- 光傳感器是什么?光傳感器的六大指標(biāo) 3749次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多