0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Crazyflie和TOF傳感器的自旋停效果實(shí)現(xiàn)

柴火創(chuàng)客空間 ? 來源:柴火創(chuàng)客空間 ? 2024-01-25 18:20 ? 次閱讀

今天小編給大家?guī)淼氖切录悠碌腗aker Chathuranga Liyanage使用TOF傳感器讓Crazyflie實(shí)現(xiàn)高度自保持的項(xiàng)目。

557c918c-bb69-11ee-8b88-92fbcf53809c.jpg

設(shè)備列表

硬件:

Crazyflie2.0

Bitcraze Crazyradio PA

Z-ranger deck

軟件:

AdaCore GNAT Community

558a0c0e-bb69-11ee-8b88-92fbcf53809c.jpg

無人機(jī)有多個傳感器可以飛行,但是他們都無法識別出近距離的障礙物或與地面的實(shí)際距離。這就是無人機(jī)需要測距傳感器的原因。它們提供到途中最近物體的準(zhǔn)確距離讀數(shù)。此外,這些對于地圖繪制目的很有用,允許路徑規(guī)劃和自主導(dǎo)航。

幾年來,我一直在使用Crazyflie進(jìn)行我的大學(xué)項(xiàng)目,并使用庫存固件。在發(fā)現(xiàn)使用 Ada 實(shí)現(xiàn)的 Certyflie 固件后,由于它的簡單性,我開始對其進(jìn)行測試。由于沒有大量的文件,我很容易在短時間內(nèi)熟悉固件,并實(shí)現(xiàn)自己的函數(shù)和庫。在這里,我計(jì)劃解釋以下主題。

粗略了解 Certyflie 固件的主要功能。

集成ToF傳感器以測量高度

實(shí)現(xiàn)自主起飛序列

使用ToF傳感器實(shí)現(xiàn)高度保持功能。

介紹如何實(shí)現(xiàn)ToF傳感器甲板以映射環(huán)境。

讓我們開始為這些設(shè)置背景。

設(shè)置背景

這些對我來說是有用的,而不會給使用 Ada 開始編程 CF 帶來太多麻煩。

操作系統(tǒng) - Windows 8.1

GNAT 版本 - 2018 arm elf

固件 - Certyflie (ravenscar-cf-stable)

若要設(shè)置編譯器路徑,請打開命令提示符,導(dǎo)航到克隆存儲庫的根目錄,然后鍵入以下命令。我們需要設(shè)置 GNAT bin 文件夾的路徑。根據(jù)您的安裝目錄更改路徑。

path C:GNAT2018in;%path%

要將固件上傳到 CF,我們需要 DFU-util。簡單地說,我們可以使用 CLI 安裝程序?qū)⑵浒惭b在 Windows 上。安裝后,您可以在 命令提示符下鍵入以檢查安裝。它應(yīng)該返回已安裝的版本。dfu-util -l

Certyflie 存儲庫的 Readme 部分提供了有關(guān)上傳編譯文件的明確說明。由于 Windows 沒有 sudo 命令,因此請確保在最后一個命令中刪除該部分。

dfu-util -d 0483:df11 -a 0 -s 0x08000000 -D obj/cflie.bin

添加 ZRangerDeck

CF平臺帶有幾個可拆卸的傳感器拓展版,以擴(kuò)展其功能。Z ranger 甲板有一個飛行時間傳感器,它是一種距離測量傳感器,可幫助無人機(jī)保持與地面的恒定高度。

Z ranger 配備 VL53L0X 傳感器,最大感應(yīng)距離為 2m。此傳感器的庫包含在 CertyflieAda_Drivers_Librarycomponentssrc ange_sensor 內(nèi)的克隆存儲庫中。但是,此庫的新版本在 https://github.com/AdaCore/Ada_Drivers_Library 中可用。在此實(shí)現(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通電后,它會初始化所有傳感器和組件。此過程在 內(nèi)部 過程中可用。為了將我們的傳感器添加到這個初始化過程中,我們首先導(dǎo)入VL53L0X、STM32.board和STM32。I2C 庫。然后我們在初始化過程中添加以下部分。

crazyflie_system.adbSystem_Init

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的電源,并用手機(jī)攝像頭檢查ToF傳感器,以檢查其是否正常工作。如果傳感器已成功初始化并開始工作,您會注意到紫燈亮起。

55a47058-bb69-11ee-8b88-92fbcf53809c.jpg

P.S. - 這里我們使用光流甲板,而不是Z ranger甲板。因此,如果您的 Z 游俠套牌看起來不同,請不要擔(dān)心。pmw3901 傳感器由于在飛行無人機(jī)時發(fā)生了一些嚴(yán)重的墜機(jī)事故而損壞。

添加到日志

CF 有一個 python 庫來執(zhí)行各種任務(wù)。使用原始固件,我們可以通過CF無線電模塊使用筆記本電腦與無人機(jī)進(jìn)行通信。檢索數(shù)據(jù)日志是該庫最重要的功能之一。它可以訪問傳感器讀數(shù)、無人機(jī)狀態(tài)、電池電量和許多其他參數(shù)。幸運(yùn)的是,Certyflie 固件的數(shù)據(jù)日志數(shù)量有限,并且可以與 CF python 庫一起使用。

在 examples 文件夾內(nèi)打開。此代碼在運(yùn)行時打印實(shí)時滾動、俯仰和偏航值。

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ù)類型,數(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)您運(yùn)行 python 代碼時,它將連接到 CF 并開始打印值。更改無人機(jī)的方向,看看值是如何變化的。

現(xiàn)在,讓我們將ToF傳感器測量值添加到日志中。這樣,我們就有機(jī)會看到當(dāng)我們改變無人機(jī)的高度時,該值是如何變化的。

首先,我們需要在傳感器可用時從傳感器獲取測量值。初始化后,系統(tǒng) 在 .這將更新無人機(jī)的狀態(tài)參數(shù)。我們在此功能中添加了高度測量部分。接收距離以毫米為單位。在這里,我們將其轉(zhuǎn)換為 m。

Stabilizer_Update_Attitudestabilizer.adb
if Range_Value_Available (Z_Ranger_Device) then


   Z_Height := 0.001 * Float (Read_Range_Millimeters (Z_Ranger_Device));
end if;

我添加了一個名為“Range_Measurements”的單獨(dú)狀態(tài)變量組來保留此變量。然后,將以下日志添加到 函數(shù)中。

Stabilizer_Init
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')

實(shí)現(xiàn)高度保持功能

Certyflie 固件已具有高度保持功能。它使用預(yù)定義的推力作為基值。您可以在 中找到此值。我假設(shè)這個值幾乎等于 CF 的重量,沒有額外的傳感器甲板。

commander.ads
ALT_HOLD_THRUST_F : constant := 32_767.0;

由于現(xiàn)在我們有了測量分辨率為 1mm 的離地距離的方法,因此我們可以使用 z 測量實(shí)現(xiàn)單獨(dú)的高度保持功能。為此,我們需要找到一種方法來使用我們自己的函數(shù)設(shè)置推力值。

為穩(wěn)定器功能提供推力、滾轉(zhuǎn)、俯仰和偏航值,以運(yùn)行電機(jī)使無人機(jī)飛行。如果仔細(xì)觀察,我們可以確定無人機(jī)是通過兩種方法激活的。

Stabilizer_Control_Loop

從飛行員命令

當(dāng)檢測到自由落體時

飛行員命令是使用 CrazyFlie 移動應(yīng)用程序發(fā)送的。您可以使用移動應(yīng)用程序中的虛擬操縱桿連接藍(lán)牙并駕駛無人機(jī)。這些命令被無人機(jī)捕獲為CRTP數(shù)據(jù)包,并對消息進(jìn)行解碼以獲取相關(guān)參數(shù)。

55af840c-bb69-11ee-8b88-92fbcf53809c.jpg

使用IMU測量的Z加速度值檢測自由落體。一旦檢測到自由落體,無人機(jī)就會開始產(chǎn)生推力以從墜毀中恢復(fù)過來,并運(yùn)行一個循環(huán)以減少推力以降低高度。起始推力和遞減值可以在 free_fall.ads 中找到。您可以減少遞減值以獲得平穩(wěn)著陸。

MAX_RECOVERY_THRUST       : constant T_Uint16 := 48_000;
RECOVERY_THRUST_DECREMENT : constant T_Uint16 := 100;

通過模仿這些函數(shù)中的任何一個,我們可以傳遞推力值來制作我們自己的高度保持函數(shù)。但我更喜歡在我的實(shí)現(xiàn)中模仿試點(diǎn)命令。

首先,我注釋掉了 Commander_Get_RPY、FF_Get_Recovery_Commands、Commander_Get_Thrust 和 FF_Get_Recovery_Thrust 函數(shù)調(diào)用。然后,我在指令器文件中實(shí)現(xiàn)了一個名為“Autonomous_Sequence”的單獨(dú)函數(shù),該函數(shù)打開電機(jī)并運(yùn)行 PID 算法以將高度保持在所需水平。添加以下部分,以確保無人機(jī)在運(yùn)行此功能之前處于水平位置。

Stabilizer_Control_Loop
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)整過無人機(jī)的 PID,您可能知道這是一個非常麻煩的過程。沒有精確的水平位置控制器會使這變得更加困難,因?yàn)闊o人機(jī)開始橫向漂移。為了避免這種情況,我從左右兩側(cè)在無人機(jī)上系了兩根繩子。這允許無人機(jī)在有限的區(qū)域內(nèi)移動,同時我們調(diào)整 PID 值。

以下是高度保持功能的初始測試。該函數(shù)運(yùn)行 8 秒??梢酝ㄟ^增加循環(huán)計(jì)數(shù)來增加此時間。所需高度設(shè)置為0.1米。

在調(diào)整PID時,我決定升級電機(jī)以獲得更高的有效載荷能力,以連接更多的傳感器并包括更大的電池。CF電機(jī)驅(qū)動器的N溝道MOSFET的最大額定電流為6A,為我們提供了更大的空間來增加電機(jī)尺寸。如封面圖所示,現(xiàn)有的 0716 空心杯電機(jī)被 0720 電機(jī)取代。

以下視頻顯示了使用新電機(jī)和進(jìn)一步調(diào)諧的 PID 的高度保持功能。在本實(shí)驗(yàn)中,所需的高度為0.8m。(Kp - 2000,Kd - 0,Ki - 500)。繩子被綁在兩把椅子上,以獲得更高的位置。

VL35LOX和VL35L1X

VL53L1X的最大感應(yīng)距離為4m,而我們在這個項(xiàng)目中使用的VL53L0X的最大范圍為2m。如上圖所示,VL53L1X的鏡頭比其他傳感器大。

Z Ranger deck V2 配備了這款新傳感器。在瀏覽了兩個數(shù)據(jù)表后,我注意到VL53L1X具有相同的默認(rèn) I2C 地址 (0x29),這也是VL53L0X的地址。此外,大多數(shù)重要寄存器在兩個傳感器中具有相同的地址。因此,Ada 中的 VL53L0X 庫可以與VL53L1X一起使用來運(yùn)行基本功能,這些功能足以滿足我們的需求。

使用多個TOF傳感器

很明顯,我們需要在無人機(jī)上安裝更多的傳感器來覆蓋周圍環(huán)境。但問題是我們?nèi)绾闻c具有相同 I2C 地址的多個傳感器進(jìn)行通信。

CF 上的 STM32 芯片主要有 2 個 I2C 端口。但一個端口僅用于內(nèi)部傳感器,例如 IMU。其他端口連接到擴(kuò)展引腳,以便與傳感器卡座通信。因此,我們需要找到一種使用這個 I2C 端口與多個 ToF 傳感器進(jìn)行通信的方法。

55c79fce-bb69-11ee-8b88-92fbcf53809c.jpg

兩種ToF傳感器型號都能夠更改其I2C地址。當(dāng)我們將新地址寫入傳感器時,它存儲在易失性存儲器中。因此,我們每次打開設(shè)備并寫入 I2C 地址時,都需要一個接一個地連接傳感器。為了避免這個過程,ToF傳感器附帶了一個額外的引腳,稱為XSHUT。

55da8788-bb69-11ee-8b88-92fbcf53809c.jpg

要打開傳感器,我們需要拉起這個引腳。在Z ranger卡座中,該引腳通過電阻器永久連接到Vcc。解決方案是編寫一個程序,使除 z ranger 之外的所有其他傳感器的 XSHUT 引腳保持低電平,寫入不同的 I2C 地址,將一個 XSHUT 引腳設(shè)置為高電平,寫入不同的 I2C 地址,依此類推。這看起來是一個很好的方法,直到您有足夠的GPIO引腳來連接所有ToF傳感器。

為了克服GPIO引腳的不足,具有5個ToF傳感器的CF Multiranger卡座配備了一個8位GPIO擴(kuò)展IC,PCA9534 。該芯片通過不同的 I2C 地址與無人機(jī)通信。當(dāng)我們將值寫入其注冊表時,它會根據(jù)給定的值將其 8 個 GPIO 引腳設(shè)置為高低。這樣,我們就有機(jī)會僅通過 I2C 端口控制所有 ToF 傳感器。因此,可以毫無困難地使用上述XSHUT引腳的相同過程。

55e57bd4-bb69-11ee-8b88-92fbcf53809c.jpg

da 庫附帶了多個 IO 擴(kuò)展器庫。但不幸的是,它沒有配置芯片PCA9534庫。目前,我正在為這個芯片實(shí)現(xiàn)一個庫。beta 庫位于附加存儲庫的 Ada 庫文件夾中,但它需要更多的工作來實(shí)現(xiàn)所有可用的功能。同樣,我計(jì)劃在實(shí)現(xiàn)取得進(jìn)展時更新存儲庫。

實(shí)現(xiàn)此結(jié)果后,我們可以使用所有距離測量值實(shí)現(xiàn)避障功能。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    355980
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84682
  • IMU
    IMU
    +關(guān)注

    關(guān)注

    6

    文章

    312

    瀏覽量

    45746
  • 無線電模塊
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6659
  • tof傳感器
    +關(guān)注

    關(guān)注

    2

    文章

    106

    瀏覽量

    14784

原文標(biāo)題:創(chuàng)客項(xiàng)目秀|基于Crazyflie和TOF傳感器的自旋停效果實(shí)現(xiàn)

文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    iOS如何抽獎輪盤效果實(shí)現(xiàn)思路

    iOS 抽獎輪盤效果實(shí)現(xiàn)思路
    發(fā)表于 04-28 07:19

    走進(jìn)飛行時間傳感技術(shù)揭秘TOF傳感器工作原理及應(yīng)用領(lǐng)域

    TOF是飛行時間(Time of Flight)技術(shù)的縮寫,即傳感器發(fā)出經(jīng)調(diào)制的近紅外光,遇物體后反射,傳感器通過計(jì)算光線發(fā)射和反射時間差或相位差,來換算被拍攝景物的距離,以產(chǎn)生深度信息,此外再結(jié)合
    發(fā)表于 11-14 15:00

    氮化鋁(AlN)陶瓷電路板技術(shù)應(yīng)用——ToF傳感器

    什么是“ToF”?“ToF”也就是所謂的飛行時間(Time of Flight)技術(shù),即傳感器發(fā)出經(jīng)調(diào)制的近紅外光,遇物體后反射,傳感器通過計(jì)算光線發(fā)射和反射時間差或相位差,來換算被拍
    發(fā)表于 02-23 11:16

    組裝設(shè)計(jì)一個CrazyFlie避障傳感器甲板

    CrazyFlie 平臺正確配置,固件將驅(qū)動這些 ToF 傳感器中的每一個以捕獲周圍環(huán)境中的距離信息。此掃描的速率可高達(dá)每個傳感器 20 毫秒?;谶@些范圍信息,我們可以生成周圍環(huán)境
    發(fā)表于 07-08 07:59

    RT-Thread VL53L0X TOF傳感器驅(qū)動設(shè)計(jì)資料實(shí)現(xiàn)

    1、RT-Thread VL53L0X TOF傳感器驅(qū)動實(shí)現(xiàn)  Time of flight(TOF),中文翻譯為“飛行時間”。飛行時間技術(shù)在廣義上可理解為通過測量物體、粒子或波在固定
    發(fā)表于 09-15 17:08

    Tof傳感器是如何進(jìn)行校準(zhǔn)的?

    您好,我是 Tof 傳感器領(lǐng)域的新手,我想知道您是如何進(jìn)行校準(zhǔn)的?是否有任何軟件操作可以執(zhí)行?我在你談到函數(shù)和變量 Xtalk 的對話中讀到。如果是這樣,請告訴我要修改哪些文件。謝謝
    發(fā)表于 02-01 08:29

    ToF傳感器將取代IR傳感器,并應(yīng)用于臉部識別

    在光傳感器市場,飛行時間(ToF)傳感器將占主導(dǎo)地位,其中,ST擁有大部份的市占率,而Apple則將ToF傳感器用于取代部檢測的IR
    發(fā)表于 10-31 16:07 ?4539次閱讀

    TDK的MEMS超聲波ToF傳感器解決方案與光學(xué)ToF傳感器相比具有很多優(yōu)勢

    TDK 公司(TSE:6762)宣布現(xiàn)在可以選擇擴(kuò)大了感應(yīng)范圍的基于Chirp CH-201 MEMS的超聲波飛行時間(ToF傳感器的原始設(shè)備制造商(OEM)。此款ToF傳感器利用微
    的頭像 發(fā)表于 01-08 15:22 ?6886次閱讀

    ToF傳感器的市場需求迎來爆發(fā)

    什么是ToF傳感器ToF傳感器又名飛行傳感器,是一種接近傳感器。簡單來說,
    的頭像 發(fā)表于 11-26 14:31 ?3461次閱讀

    ToF傳感器正在成為手機(jī)上的標(biāo)配

    隨著ToF傳感器技術(shù)在智能手機(jī)、平板電腦上的普遍應(yīng)用,ToF一詞也正在被大眾所熟知。實(shí)際上,這項(xiàng)技術(shù)擁有廣闊的應(yīng)用領(lǐng)域,作為此前已成功為智能手機(jī)廠商提供ToF
    發(fā)表于 12-04 09:55 ?1912次閱讀

    CrazyFlie 避障傳感器飛行

    電子發(fā)燒友網(wǎng)站提供《CrazyFlie 避障傳感器飛行.zip》資料免費(fèi)下載
    發(fā)表于 06-15 15:28 ?9次下載
    <b class='flag-5'>CrazyFlie</b> 避障<b class='flag-5'>傳感器</b>飛行<b class='flag-5'>器</b>

    ToF傳感器究竟有多神奇?

    ToF是飛行時間(Time of Flight)的縮寫,ToF傳感器的工作原理與聲納探測非常相似,它是通過測量光從物體上反射所需的時間來進(jìn)行物體的定位和通信。ToF
    的頭像 發(fā)表于 05-18 09:48 ?7133次閱讀
    <b class='flag-5'>ToF</b><b class='flag-5'>傳感器</b>究竟有多神奇?

    具有光流和ToF傳感器的自主Crazyflie

    電子發(fā)燒友網(wǎng)站提供《具有光流和ToF傳感器的自主Crazyflie.zip》資料免費(fèi)下載
    發(fā)表于 06-27 14:39 ?0次下載
    具有光流和<b class='flag-5'>ToF</b><b class='flag-5'>傳感器</b>的自主<b class='flag-5'>Crazyflie</b>

    ToF傳感器的原理及優(yōu)缺點(diǎn)分析

    ToF傳感器使用微小的發(fā)射發(fā)射紅外光或者激光,其中產(chǎn)生的光會從任何物體反彈并返回到傳感器。根據(jù)光的發(fā)射與被物體反射后返回傳感器之間的時間差
    發(fā)表于 08-22 09:52 ?4080次閱讀
    <b class='flag-5'>ToF</b><b class='flag-5'>傳感器</b>的原理及優(yōu)缺點(diǎn)分析

    tof原理介紹 ToF傳感器的優(yōu)缺點(diǎn)

    ToF傳感器使用微小的發(fā)射發(fā)射紅外光或者激光,其中產(chǎn)生的光會從任何物體反彈并返回到傳感器。根據(jù)光的發(fā)射與被物體反射后返回傳感器之間的時間差
    發(fā)表于 08-23 11:21 ?6429次閱讀
    <b class='flag-5'>tof</b>原理介紹 <b class='flag-5'>ToF</b><b class='flag-5'>傳感器</b>的優(yōu)缺點(diǎn)