• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【國(guó)外開(kāi)源】手持照相機(jī)穩(wěn)定器

2017/12/05
78
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

步驟文件.zip

共1個(gè)文件

介紹

這是使用Digilent Zybo Zynq-7000開(kāi)發(fā)板為GoPro創(chuàng)建3軸手持照相機(jī)穩(wěn)定裝備的指南。此項(xiàng)目是為CPE實(shí)時(shí)操作系統(tǒng)課程(CPE 439)開(kāi)發(fā)的。穩(wěn)定器使用三個(gè)伺服器和一個(gè)IMU來(lái)糾正用戶的運(yùn)動(dòng),以保持相機(jī)的水平。

項(xiàng)目所需的部件

  • Digilent Zybo Zynq-7000開(kāi)發(fā)板
  • Sparkfun IMU Breakout - MPU 9250
  • 2 HiTec HS-5485HB伺服(購(gòu)買(mǎi)180度的運(yùn)動(dòng)或程序從90到180度)
  • 1臺(tái)HiTec HS-5685MH伺服(購(gòu)買(mǎi)90度到180度的180度運(yùn)動(dòng)或程序)
  • 2個(gè)標(biāo)準(zhǔn)伺服支架
  • 1面包板
  • 15根 male-to-male 跳線
  • 4對(duì)male-to-female跳線
  • 熱膠
  • 手柄或手柄
  • 直徑5毫米的木制銷釘
  • GoPro或其他相機(jī)和安裝硬件
  • 能夠輸出5V的電源
  • 訪問(wèn)3D打印機(jī)

步驟1:Vivado硬件設(shè)置

Vivado硬件設(shè)置的圖片

讓我們開(kāi)始為項(xiàng)目創(chuàng)建底層的塊設(shè)計(jì)。

  1. 打開(kāi)Vivado 2016.2,點(diǎn)擊“Create New Project”圖標(biāo),然后點(diǎn)擊“Next>”。
  2. 命名您的項(xiàng)目,然后點(diǎn)擊“下一步>”。
  3. 選擇RTL項(xiàng)目,然后點(diǎn)擊“下一步>”。
  4. 鍵入到搜索欄xc7z010clg400-1,然后選擇部分,然后點(diǎn)擊“下一步>”和“完成”。

第2步:設(shè)置模塊設(shè)計(jì)(相關(guān)文件見(jiàn)附件)

現(xiàn)在我們將開(kāi)始通過(guò)添加和設(shè)置Zynq IP模塊來(lái)生成模塊設(shè)計(jì)。

  1. 在左側(cè)面板的IP Integrator下,單擊“創(chuàng)建塊設(shè)計(jì)”,然后單擊“確定”。
  2. 右鍵單擊“圖表”選項(xiàng)卡,然后選擇“添加IP ...”。
  3. 鍵入“ZYNQ7處理系統(tǒng)”并單擊選擇。
  4. 雙擊出現(xiàn)的Zynq塊。
  5. 點(diǎn)擊“導(dǎo)入XPS設(shè)置”,導(dǎo)入提供的“ZYBO_zynq_def.xml”文件。
  6. 轉(zhuǎn)到“MIO配置”,選擇“應(yīng)用處理器單元”,并啟用定時(shí)器0和看門(mén)狗定時(shí)器。
  7. 在“I / O外圍設(shè)備”下的同一個(gè)選項(xiàng)卡中,選擇ENET 0(并將下拉菜單更改為“MIO 16 .. 27”,USB 0,SD 0,UART 1,I2C 0。
  8. 在“GPIO”下,檢查GPIO MIO,ENET復(fù)位,USB復(fù)位和I2C復(fù)位。
  9. 現(xiàn)在導(dǎo)航到“時(shí)鐘配置”。在PL結(jié)構(gòu)時(shí)鐘下選擇FCLK_CLK0。然后,點(diǎn)擊“確定”。

第3步:創(chuàng)建自定義PWM IP模塊(相關(guān)文件見(jiàn)附件)

這個(gè)IP模塊允許電路板發(fā)送一個(gè)PWM信號(hào)來(lái)控制舵機(jī)的運(yùn)動(dòng)。增加了邏輯來(lái)減慢時(shí)鐘,使脈沖以正確的速率輸出。該塊取0到180之間的一個(gè)數(shù)字,并將其轉(zhuǎn)換成一個(gè)750-2150的usec脈沖。

  1. 現(xiàn)在,在左上角附近的工具選項(xiàng)卡下,點(diǎn)擊“創(chuàng)建和打包IP ...”,然后點(diǎn)擊下一步。
  2. 然后選擇“創(chuàng)建一個(gè)新的AXI4外設(shè)”并點(diǎn)擊下一步。
  3. 命名您的PWM IP塊(我們將其命名為pwm_core),然后單擊下一步,然后單擊下一頁(yè)上的下一步。
  4. 現(xiàn)在點(diǎn)擊“編輯IP”,然后點(diǎn)擊完成。這將打開(kāi)一個(gè)新窗口來(lái)編輯pwm塊。
  5. 在“Sources”選項(xiàng)卡和“Design Sources”下,展開(kāi)“pwm_core_v1_0”(用您的名稱替換pwm_core ),然后打開(kāi)變得可見(jiàn)的文件。
  6. 將“pwm_core_v1_0_S00_AXI.v”下提供的代碼復(fù)制并粘貼到項(xiàng)目底部的zip文件中。按Ctrl + Shift + R,用你的名字替換“pwm_core” 。
  7. 接下來(lái)打開(kāi)“ name _v1_0”,并在文件“pwm_core_v1_0.v”中提供的代碼中復(fù)制。按Ctrl + Shift + R并用名稱替換“pwm_core” 。
  8. 現(xiàn)在導(dǎo)航到“Package IP - name ”選項(xiàng)卡并選擇“Customization Parameters”。
  9. 在這個(gè)標(biāo)簽中,頂部會(huì)有一個(gè)黃色的條形文字。選擇此項(xiàng),“隱藏參數(shù)”將顯示在框中。
  10. 現(xiàn)在進(jìn)入“Customization GUI”,右鍵點(diǎn)擊Pwm Counter Max,選擇“Edit Parameter ...”。
  11. 選中“在自定義GUI中可見(jiàn)”和“指定范圍”框。
  12. 將“類型:”下拉菜單更改為整數(shù)范圍,并將最小值設(shè)置為0,最大值設(shè)置為65535,然后選中“顯示范圍”框?,F(xiàn)在點(diǎn)擊OK。
  13. 在“Page 0”樹(shù)下拖動(dòng)Pwm Counter Max?,F(xiàn)在轉(zhuǎn)到“查看和打包”并點(diǎn)擊“重新打包IP”按鈕。

第4步:添加PWM IP模塊進(jìn)行設(shè)計(jì)

添加PWM IP模塊的設(shè)計(jì)的圖片

我們將IP塊添加到塊設(shè)計(jì)中,以允許用戶通過(guò)處理器訪問(wèn)PWM IP塊。

  1. 右鍵單擊圖表選項(xiàng)卡,然后單擊“IP設(shè)置...”。導(dǎo)航到“資源庫(kù)管理器”選項(xiàng)卡。
  2. 點(diǎn)擊綠色加號(hào)按鈕并選擇它。現(xiàn)在在文件管理器中找到ip_repo并將其添加到項(xiàng)目中。然后點(diǎn)擊應(yīng)用,然后確定。
  3. 右鍵單擊圖表選項(xiàng)卡,然后單擊“添加IP ...”。輸入您的PWM IP塊名稱并選擇它。
  4. 在屏幕頂部應(yīng)該有一個(gè)綠色的條,首先選擇“運(yùn)行連接自動(dòng)化”,然后單擊確定。然后單擊“運(yùn)行塊自動(dòng)化”,然后單擊確定。
  5. 雙擊PWM模塊并將Pwm Counter Max從128更改為1024。
  6. 將鼠標(biāo)指針懸停在PWM模塊的PWM0上。應(yīng)該有一個(gè)小鉛筆,當(dāng)你做的時(shí)候出現(xiàn)。右鍵單擊并選擇“創(chuàng)建端口...”,然后在打開(kāi)窗口時(shí)單擊確定。這為要傳遞的信號(hào)創(chuàng)建一個(gè)外部端口。
  7. 對(duì)PWM1和PWM2重復(fù)步驟6。
  8. 找到邊欄上的小圓形雙箭頭圖標(biāo),然后單擊該圖標(biāo)。它會(huì)重新生成布局,并且您的塊設(shè)計(jì)應(yīng)該看起來(lái)像上面的圖片。

步驟5:配置HDL包裝并設(shè)置約束文件(相關(guān)文件見(jiàn)附件)

配置HDL包裝和設(shè)置約束文件的圖片

我們現(xiàn)在要為我們的模塊設(shè)計(jì)生成高級(jí)設(shè)計(jì),然后將PWM0,PWM1和PWM2映射到Zybo板上的Pmod引腳。

  1. 轉(zhuǎn)到“來(lái)源”選項(xiàng)卡。右鍵點(diǎn)擊“Design Sources”下的塊設(shè)計(jì)文件,然后點(diǎn)擊“Create HDL Wrapper ...”。選擇“復(fù)制生成的包裝,以允許用戶編輯”,然后單擊確定。這將生成我們創(chuàng)建的塊設(shè)計(jì)的高級(jí)設(shè)計(jì)。
  2. 我們將輸出的Pmod是JE。
  3. 在“文件”下,選擇“添加源...”并選擇“添加或創(chuàng)建約束”,然后單擊“下一步”。
  4. 點(diǎn)擊添加文件,然后選擇包含的“ZYBO_Master.xdc”文件。如果你查看這個(gè)文件,你會(huì)注意到除了“## Pmod Header JE”下的六個(gè)“set_property”行之外,所有內(nèi)容都沒(méi)有注釋。您會(huì)注意到PWM0,PWM1和PWM2是這些行的參數(shù)。它們映射到JE Pmod的引腳1,引腳2和引腳3。

第6步:生成比特流

在我們繼續(xù)之前,我們需要生成硬件設(shè)計(jì)比特流以導(dǎo)出到SDK

  1. 在側(cè)欄的“程序和調(diào)試”下,選擇“生成位流”。這將運(yùn)行綜合,然后執(zhí)行,然后生成設(shè)計(jì)的比特流。
  2. 糾正彈出的任何錯(cuò)誤,但通常可以忽略警告。
  3. 轉(zhuǎn)到文件 - >啟動(dòng)SDK,然后單擊確定。這將打開(kāi)Xilinx SDK。

第7步:在SDK中設(shè)置項(xiàng)目

這部分可能有點(diǎn)令人沮喪。如有疑問(wèn),建立一個(gè)新的BSP并替換舊的BSP。這節(jié)省了我們一大堆的調(diào)試時(shí)間。

  1. 首先下載最新版本的FreeRTOS 。
  2. 通過(guò)單擊文件 - >導(dǎo)入,從FreeRTOS中提取所有內(nèi)容并將其導(dǎo)入到SDK中,然后在“常規(guī)”下單擊“現(xiàn)有項(xiàng)目進(jìn)入工作區(qū)”,然后單擊下一步。
  3. 在FreeRTOS文件夾中進(jìn)入“FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702”。只從這個(gè)位置導(dǎo)入“RTOSDemo”。
  4. 現(xiàn)在點(diǎn)擊File-> New Board Support Package生成一個(gè)Board Support Package(BSP)。
  5. 選擇“ps7_cortexa9_0”并選中“l(fā)wip141”,然后單擊確定。
  6. 右鍵單擊RTOSDemo藍(lán)色文件夾并選擇“Project References”。
  7. 取消選擇“RTOSDemo_bsp”并檢查剛剛創(chuàng)建的新BSP。

第8步:FreeRTOS代碼修改(相關(guān)文件見(jiàn)附件)

我們提供的代碼可以分成7個(gè)不同的文件。main.c,iic_main_thread.c,xil_printfloat.c,xil_printfloat.h,IIC_funcs.c,IIC_funcs.h和iic_imu.h。iic_main_thread.c中的代碼已經(jīng)從Kris Winer的庫(kù)中調(diào)用。我們主要改變了他的代碼,把任務(wù)合并到Zybo板上。我們還增加了計(jì)算相機(jī)方向校正的功能。我們留下了幾個(gè)對(duì)調(diào)試有用的打印語(yǔ)句。他們中的大多數(shù)被評(píng)論,但如果你覺(jué)得需要你可以取消他們的評(píng)論。

  1. 修改main.c文件最簡(jiǎn)單的方法是用我們包含的main.c文件中的代碼復(fù)制代碼。
  2. 要?jiǎng)?chuàng)建一個(gè)新文件,請(qǐng)右鍵點(diǎn)擊RTOSDemo下的src文件夾并選擇C Source File。將該文件命名為“iic_main_thread.c”。
  3. 復(fù)制包含的“iic_main_thread.c”中的代碼并將其粘貼到新創(chuàng)建的文件中。
  4. 用剩余的文件重復(fù)步驟2和3。
  5. 在gcc中需要一個(gè)鏈接指令。要將其添加到構(gòu)建路徑中,請(qǐng)右鍵單擊RTOSDemo并選擇“C / C ++構(gòu)建設(shè)置”。
  6. 一個(gè)新窗口將打開(kāi)。導(dǎo)航到ARM v7 gcc鏈接器 - >庫(kù)。選擇右上角的小文件,然后輸入“m”。這將包括項(xiàng)目中的數(shù)學(xué)庫(kù)。
  7. 使用Ctrl + B構(gòu)建項(xiàng)目來(lái)確認(rèn)一切正常。檢查生成的警告,但您可能會(huì)忽略它們。
  8. 有幾個(gè)地方需要修改,主要是你當(dāng)前位置的磁偏角。我們將解釋如何在教程的校準(zhǔn)部分中進(jìn)行更改。

第9步:穩(wěn)定器的3D打印(相關(guān)文件見(jiàn)附件)

您需要3D打印這個(gè)項(xiàng)目的幾個(gè)部分。可以購(gòu)買(mǎi)與我們的印刷部件具有相似尺寸/尺寸的部件。

  1. 使用提供的文件打印GoPro的手臂和托架。
  2. 您需要將腳手架添加到.stl文件。
  3. 一旦打印,修剪/清理多余腳手架的部分。
  4. 如果您愿意,可以用3D打印部件替換木制銷釘。

步驟10:組裝零件

組裝零件的圖片

這是安裝穩(wěn)定器的幾個(gè)部分。購(gòu)買(mǎi)的支架配有4個(gè)自攻螺釘和4個(gè)帶螺母的螺栓。由于有3個(gè)舵機(jī),其中一個(gè)伺服喇叭需要預(yù)先敲擊,以允許2個(gè)螺栓穿過(guò)。

  1. 將8個(gè)引腳焊接到IMU中,每邊4個(gè)。
  2. IMU連接到支架中央的GoPro 3D打印支架上。
  3. 調(diào)整支架的方向,使伺服安裝孔位于左側(cè)。將IMU放置在距離您最近的邊緣,引腳懸掛在邊緣上。然后,將GoPro安裝架放在IMU的頂部,將IMU和安裝架固定在支架上。
  4. 將HS-5485HB連接到集成在3D打印臂上的伺服支架。
  5. 將GoPro支架旋入連接到機(jī)械臂的伺服系統(tǒng),確保伺服機(jī)構(gòu)處于其運(yùn)動(dòng)范圍的中間位置。
  6. 接下來(lái),將HS-5685MH伺服器連接到伺服支架上。然后用其中一個(gè)螺絲輕敲伺服喇叭。現(xiàn)在將伺服器連接到最后一個(gè)伺服支架的底部。
  7. 現(xiàn)在將最后一個(gè)伺服器連接到HS-5685MH伺服器上的支架上。然后將手臂旋入該伺服器,確保手臂已擰緊,以便每個(gè)方向移動(dòng)90度。
  8. 為了完成萬(wàn)向節(jié)的結(jié)構(gòu),在GoPro支架和3D印刷臂之間加入一小塊木銷。你現(xiàn)在已經(jīng)組裝了穩(wěn)定器。
  9. 最后,您可以添加連接到底部伺服支架的手柄。

步驟11:將Zybo連接到穩(wěn)定器

這樣做時(shí)有幾件事要小心。你要確保電源的5V不會(huì)進(jìn)入Zybo板,因?yàn)檫@會(huì)導(dǎo)致板的問(wèn)題。確保仔細(xì)檢查你的跳線,確認(rèn)沒(méi)有電線被切換。

  1. 將Zybo附加到穩(wěn)定器上,您將需要15根male-to-male 跳線和4對(duì)male-to-female跳線。
  2. 首先,沿面包板的+和 - 導(dǎo)軌將兩個(gè)跳線連接到您的5V電源。這些將提供舵機(jī)的權(quán)力。
  3. 然后,將3對(duì)跳線連接到面包板的+和 - 導(dǎo)軌上。這將是每個(gè)舵機(jī)的動(dòng)力。
  4. 將+和 - 跳線的另一端插入每個(gè)舵機(jī)。
  5. 在面包板的導(dǎo)軌和Zybo JE Pmod的一個(gè)GND引腳之間連接跳線(見(jiàn)步驟5的圖片)。這將在Zybo電路板和電源之間建立一個(gè)共同點(diǎn)。
  6. 接下來(lái)將信號(hào)線連接到JE Pmod的引腳1,引腳2和引腳3。引腳1映射到底部伺服器,引腳2映射到手臂末端的伺服器,引腳3映射到中間伺服器。
  7. 將4根母線插入IMU分線的GND,VDD,SDA和SCL引腳。GND和VDD插入GND和JF引腳上的3V3。將SDA引腳插入引腳8,將SCL插入JF的引腳7(參見(jiàn)步驟5的圖片)。
  8. 最后,使用micro USB電纜將電腦連接到電路板。這將允許uart通信,并允許您編程Zybo板。

第十二步:真北校正

True North Correction的圖片

IMU中的磁強(qiáng)計(jì)的校準(zhǔn)對(duì)于裝置的正確操作是重要的。磁偏角將磁北向校正為正北。

  1. 為了糾正磁性和真北方的差異,你需要結(jié)合兩種服務(wù),谷歌地圖和NOAA的磁場(chǎng)計(jì)算器。
  2. 使用Google地圖查找您當(dāng)前位置的緯度和經(jīng)度。
  3. 把你當(dāng)前的經(jīng)緯度插入磁場(chǎng)計(jì)算器。
  4. 返回的是磁偏角。將此計(jì)算插入“iic_main_thread.c”行378中的代碼。如果你的赤緯是東,然后從偏航值減去,如果是西,那么增加偏航值。

*照片取自Sparkfun的MPU 9250連接指南。

第13步:運(yùn)行程序(相關(guān)文件見(jiàn)附件)

你一直在等待的那一刻!該項(xiàng)目的最好的部分是看到它的工作。我們注意到的一個(gè)問(wèn)題是,從IMU報(bào)告的數(shù)值有所偏離。低通濾波器可以幫助糾正這種漂移,并且用磁力計(jì)擺弄,加速度和陀螺儀校準(zhǔn)也將有助于糾正這種漂移。

  1. 首先,在SDK中構(gòu)建所有,這可以通過(guò)按Ctrl + B來(lái)完成。
  2. 確保電源已打開(kāi)并設(shè)置為5V。仔細(xì)檢查所有電線是否正確到位。
  3. 然后,要運(yùn)行該程序,請(qǐng)按任務(wù)欄上部中心的綠色三角形。
  4. 程序運(yùn)行時(shí),舵機(jī)全部復(fù)位到0位,準(zhǔn)備好鉆機(jī)移動(dòng)。程序初始化后,舵機(jī)將回到90度的位置。
  5. 一個(gè)磁力計(jì)校準(zhǔn)功能將運(yùn)行,方向?qū)⒈淮蛴〉経ART終端,您可以通過(guò)串行監(jiān)視器(如“putty”或SDK中提供的串行監(jiān)視器)連接到該終端。
  6. 校準(zhǔn)將使您將圖8中的設(shè)備移動(dòng)大約10秒鐘。你可以通過(guò)注釋“iic_main_thread.c”的第273行來(lái)刪除這一步。如果你注釋掉,你需要取消注釋行323 - 325“iic_main_thread.c”。這些值最初是從上面的磁力儀校準(zhǔn)中收集的,然后作為值插入。
  7. 校準(zhǔn)后,穩(wěn)定碼將被初始化,設(shè)備將保持相機(jī)穩(wěn)定。
  • 步驟文件.zip
    下載
    描述:各個(gè)步驟文件

相關(guān)推薦