機器人技術(shù)處于工業(yè) 4.0、人工智能和邊緣革命的前沿。讓我們看看如何創(chuàng)建 FPGA 控制的機器人手臂。
介紹
機器人技術(shù)與人工智能和機器學(xué)習(xí)一起處于工業(yè) 4.0 和邊緣革命的最前沿。
因此,我認為創(chuàng)建一個基礎(chǔ)機器人手臂項目會很有趣,我們可以回過頭來添加幾個功能,例如:
逆運動學(xué) - 確定末端執(zhí)行器的位置。
AI / ML - 操作期間的對象分類。
網(wǎng)絡(luò)控制——實現(xiàn)邊緣遠程控制。
此示例將使用一個機器人手臂,該機器人手臂在 Zynq SoC 的控制六個伺服系統(tǒng)。可以使用簡單的軟件界面或使用兩個操縱桿進行直接控制。
伺服控制
我們需要做的第一件事是弄清楚如何控制伺服位置。伺服電機是最簡單的驅(qū)動電機之一,也是機器人技術(shù)的理想選擇,因為只要我們保持相同的驅(qū)動信號,它們就能保持相對位置。
那么伺服的驅(qū)動信號是什么呢?我們使用的同類伺服系統(tǒng)中的大多數(shù)都使用 60Hz PWM 波形。在 60Hz 波形的 16.66 ms 周期中,信號將在 0.5 ms 到 2.5 ms 之間為高電平。信號的持續(xù)時間將驅(qū)動伺服器在 0 到 180 度之間運動。
0.5 ms 脈沖驅(qū)動 0 度位置,而 2.5 ms 脈沖將驅(qū)動 180 度位置。因此,可以通過將信號驅(qū)動為 1.5 ms 脈沖來維持 90 度。
因此,增加或減少脈沖13.9 us寬度會使舵機移動 1 度。
接下來要解決的是如何生成驅(qū)動信號,PWM 擴展板(上圖)使用四個 8 位寄存器來驅(qū)動每個 PWM 信號。
on 寄存器定義信號變高的計數(shù),off 寄存器定義信號變低的計數(shù)。
因此,我們可以將開啟時間設(shè)置為 0,然后定義關(guān)閉信號的計數(shù),以獲得所需的信號寬度。
Vivado 構(gòu)建
Zynq PS - 這是 Zynq 處理系統(tǒng)
AXI IIC - 在 PL 中實現(xiàn)的 I2C 接口
一旦完成了PL設(shè)計,我們就可以構(gòu)建設(shè)計并將其導(dǎo)出到軟件。
軟件設(shè)計
我們將在軟件中開發(fā)大部分應(yīng)用程序。由于我們希望在多種模式下使用它,并在將來進行升級時使用它,因此我們需要一種模塊化方法。
因此,為每個關(guān)節(jié)開發(fā)了一個可以根據(jù)需要調(diào)用和使用的函數(shù)。每個關(guān)節(jié)都能夠接收無符號的 8 位值,然后將該 8 位值與 90 度 (1.5 ms) 脈沖寬度相加或相減,以獲得所需的角度。
我這樣做有幾個原因:
從操縱桿讀取的值也是 8 位。
因此,我們需要確保操縱桿和手臂之間的運動對齊。
兩個操縱桿中,第一個連接到 JA,第二個連接到 JB(JA和JB是PMOD接口,就是普通的GPIO)。
JA 當沿 X 方向移動時,將向前或向后移動手臂;當沿 Y 方向移動時,它將上下移動手臂。
JB 在 X 方向移動時會旋轉(zhuǎn)手腕,在 Y 方向移動時會上下移動手腕。
每個移動函數(shù)的代碼都非常相似,并且可以在后面提供的代碼找到,但是,下面提供了向上向下函數(shù)以供參考
voidup_dwn(u8YData){ SendBuffer[0]=0x0A; SendBuffer[1]=0x00; XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP); SendBuffer[0]=0x0B; SendBuffer[1]=0x00; XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP); SendBuffer[0]=0x0C; u16signal; if(YData128?){ ??signal?=?122?+?(YData?*?1.91); ?} ?else?if?(YData?==?128){ ??signal?=?369; ?} ?else{ ??signal?=?369?+?((YData?-?128)?*?1.91); ?} ?u8?cent_l_off,?cent_h_off; ?cent_l_off?=?(u8)signal; ?cent_h_off?=?(u8)?(signal>>8); SendBuffer[1]=cent_l_off; XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP); SendBuffer[0]=0x0D; SendBuffer[1]=cent_h_off; XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP); }
軟件應(yīng)用程序結(jié)構(gòu)的其余部分是:
初始化 PWM 擴展板和 Pmod 操縱桿。
對手臂進行自檢并將所有伺服系統(tǒng)定位在 90 度。
通過 RS232 接收命令或來自操縱桿的命令。
當然,如果我們希望在命令中進行硬編碼來執(zhí)行重復(fù)任務(wù),我們也可以。
初步測試
一旦 Vivado 構(gòu)建和初始軟件可用,下一步就是確保軟件能夠正確移動伺服系統(tǒng)。
當移動操縱桿時,可以使用示波器測量 PWM 信號。
隨著操縱桿的移動,脈沖寬度逐漸從 0.5 ms 變?yōu)?2.5 ms。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21801瀏覽量
606353 -
機器人
+關(guān)注
關(guān)注
211文章
28688瀏覽量
208648 -
人工智能
+關(guān)注
關(guān)注
1796文章
47771瀏覽量
240511 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8444瀏覽量
133118
原文標題:FPGA/SoC控制機械臂
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
STM32的醫(yī)療康復(fù)機器人手臂控制系統(tǒng)
用意念控制的植入式機器人手臂
以ARM為傳感器 自動跟蹤機器人手臂相機位置
機器人手臂5種不同的運動組合
![<b class='flag-5'>機器人手臂</b>5種不同的運動組合](https://file.elecfans.com/web1/M00/4F/3E/o4YBAFrWpW6AQSpIAAAUUklN1O0362.jpg)
怎樣使用Android手機的藍牙控制機器人手臂
在未來機器人手臂將可以替代人類的雙手
Hibot機器人手臂Float Arm可用于哪些應(yīng)用環(huán)境
Arduino與樹莓派打造Chatbot語音控制機器人手臂
![Arduino與樹莓派打造Chatbot語音<b class='flag-5'>控制</b><b class='flag-5'>機器人手臂</b>](https://file.elecfans.com/web1/M00/E5/B3/pIYBAGBQStSANTkMAABs-QKSdwA338.png)
機器人手臂使用哪種型號的泰和承比較合適
Arduino機器人手臂
用于Arduino Due的DIY Braccio機器人手臂護罩
![用于Arduino Due的DIY Braccio<b class='flag-5'>機器人手臂</b>護罩](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論