機(jī)器人技術(shù)處于工業(yè) 4.0、人工智能和邊緣革命的前沿。讓我們看看如何創(chuàng)建 FPGA 控制的機(jī)器人手臂。
介紹
機(jī)器人技術(shù)與人工智能和機(jī)器學(xué)習(xí)一起處于工業(yè) 4.0 和邊緣革命的最前沿。
因此,我認(rèn)為創(chuàng)建一個(gè)基礎(chǔ)機(jī)器人手臂項(xiàng)目會(huì)很有趣,我們可以回過頭來添加幾個(gè)功能,例如:
- 逆運(yùn)動(dòng)學(xué) - 確定末端執(zhí)行器的位置。
- AI / ML - 操作期間的對象分類。
- 網(wǎng)絡(luò)控制——實(shí)現(xiàn)邊緣遠(yuǎn)程控制。
此示例將使用一個(gè)機(jī)器人手臂,該機(jī)器人手臂在 Zynq SoC 的控制六個(gè)伺服系統(tǒng)。可以使用簡單的軟件界面或使用兩個(gè)操縱桿進(jìn)行直接控制。
伺服控制
我們需要做的第一件事是弄清楚如何控制伺服位置。伺服電機(jī)是最簡單的驅(qū)動(dòng)電機(jī)之一,也是機(jī)器人技術(shù)的理想選擇,因?yàn)橹灰覀儽3窒嗤尿?qū)動(dòng)信號,它們就能保持相對位置。
那么伺服的驅(qū)動(dòng)信號是什么呢?我們使用的同類伺服系統(tǒng)中的大多數(shù)都使用 60Hz PWM 波形。在 60Hz 波形的 16.66 ms 周期中,信號將在 0.5 ms 到 2.5 ms 之間為高電平。信號的持續(xù)時(shí)間將驅(qū)動(dòng)伺服器在 0 到 180 度之間運(yùn)動(dòng)。
0.5 ms 脈沖驅(qū)動(dòng) 0 度位置,而 2.5 ms 脈沖將驅(qū)動(dòng) 180 度位置。因此,可以通過將信號驅(qū)動(dòng)為 1.5 ms 脈沖來維持 90 度。
因此,增加或減少脈沖13.9 us寬度會(huì)使舵機(jī)移動(dòng) 1 度。
接下來要解決的是如何生成驅(qū)動(dòng)信號,PWM 擴(kuò)展板(上圖)使用四個(gè) 8 位寄存器來驅(qū)動(dòng)每個(gè) PWM 信號。
on 寄存器定義信號變高的計(jì)數(shù),off 寄存器定義信號變低的計(jì)數(shù)。
因此,我們可以將開啟時(shí)間設(shè)置為 0,然后定義關(guān)閉信號的計(jì)數(shù),以獲得所需的信號寬度。
Vivado 構(gòu)建
一旦完成了PL設(shè)計(jì),我們就可以構(gòu)建設(shè)計(jì)并將其導(dǎo)出到軟件。
軟件設(shè)計(jì)
我們將在軟件中開發(fā)大部分應(yīng)用程序。由于我們希望在多種模式下使用它,并在將來進(jìn)行升級時(shí)使用它,因此我們需要一種模塊化方法。
因此,為每個(gè)關(guān)節(jié)開發(fā)了一個(gè)可以根據(jù)需要調(diào)用和使用的函數(shù)。每個(gè)關(guān)節(jié)都能夠接收無符號的 8 位值,然后將該 8 位值與 90 度 (1.5 ms) 脈沖寬度相加或相減,以獲得所需的角度。
我這樣做有幾個(gè)原因:
因此,我們需要確保操縱桿和手臂之間的運(yùn)動(dòng)對齊。
兩個(gè)操縱桿中,第一個(gè)連接到 JA,第二個(gè)連接到 JB(JA和JB是PMOD接口,就是普通的GPIO)。
JA 當(dāng)沿 X 方向移動(dòng)時(shí),將向前或向后移動(dòng)手臂;當(dāng)沿 Y 方向移動(dòng)時(shí),它將上下移動(dòng)手臂。
JB 在 X 方向移動(dòng)時(shí)會(huì)旋轉(zhuǎn)手腕,在 Y 方向移動(dòng)時(shí)會(huì)上下移動(dòng)手腕。
每個(gè)移動(dòng)函數(shù)的代碼都非常相似,并且可以在后面提供的代碼找到,但是,下面提供了向上向下函數(shù)以供參考
void up_dwn(u8 YData){
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;
u16 signal;
if( YData < 128 ){
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 擴(kuò)展板和 Pmod 操縱桿。
- 對手臂進(jìn)行自檢并將所有伺服系統(tǒng)定位在 90 度。
- 通過 RS232 接收命令或來自操縱桿的命令。
當(dāng)然,如果我們希望在命令中進(jìn)行硬編碼來執(zhí)行重復(fù)任務(wù),我們也可以。
初步測試
一旦 Vivado 構(gòu)建和初始軟件可用,下一步就是確保軟件能夠正確移動(dòng)伺服系統(tǒng)。
當(dāng)移動(dòng)操縱桿時(shí),可以使用示波器測量 PWM 信號。
隨著操縱桿的移動(dòng),脈沖寬度逐漸從 0.5 ms 變?yōu)?2.5 ms。
-
FPGA
+關(guān)注
關(guān)注
1650文章
22212瀏覽量
627630 -
機(jī)器人
+關(guān)注
關(guān)注
213文章
30287瀏覽量
218188 -
人工智能
+關(guān)注
關(guān)注
1812文章
49518瀏覽量
258900 -
伺服系統(tǒng)
+關(guān)注
關(guān)注
14文章
594瀏覽量
41153 -
驅(qū)動(dòng)電機(jī)
+關(guān)注
關(guān)注
9文章
428瀏覽量
31689
發(fā)布評論請先 登錄
STM32的醫(yī)療康復(fù)機(jī)器人手臂控制系統(tǒng)
用意念控制的植入式機(jī)器人手臂
以ARM為傳感器 自動(dòng)跟蹤機(jī)器人手臂相機(jī)位置
機(jī)器人手臂5種不同的運(yùn)動(dòng)組合

關(guān)于藍(lán)牙控制Atmel制造的機(jī)器人手臂的介紹
怎樣使用Android手機(jī)的藍(lán)牙控制機(jī)器人手臂
如何用手臂控制一個(gè)DOF機(jī)器人手臂

在未來機(jī)器人手臂將可以替代人類的雙手
Hibot機(jī)器人手臂Float Arm可用于哪些應(yīng)用環(huán)境
Arduino與樹莓派打造Chatbot語音控制機(jī)器人手臂

機(jī)器人手臂使用哪種型號的泰和承比較合適
Arduino機(jī)器人手臂
用于Arduino Due的DIY Braccio機(jī)器人手臂護(hù)罩

如何創(chuàng)建FPGA控制的機(jī)器人手臂

評論