機(jī)器人綜合項(xiàng)目實(shí)踐教程 課件 第6、7章 STM32平臺(tái)機(jī)器人實(shí)戰(zhàn)、Norstar平臺(tái)機(jī)器人實(shí)戰(zhàn)_第1頁(yè)
機(jī)器人綜合項(xiàng)目實(shí)踐教程 課件 第6、7章 STM32平臺(tái)機(jī)器人實(shí)戰(zhàn)、Norstar平臺(tái)機(jī)器人實(shí)戰(zhàn)_第2頁(yè)
機(jī)器人綜合項(xiàng)目實(shí)踐教程 課件 第6、7章 STM32平臺(tái)機(jī)器人實(shí)戰(zhàn)、Norstar平臺(tái)機(jī)器人實(shí)戰(zhàn)_第3頁(yè)
機(jī)器人綜合項(xiàng)目實(shí)踐教程 課件 第6、7章 STM32平臺(tái)機(jī)器人實(shí)戰(zhàn)、Norstar平臺(tái)機(jī)器人實(shí)戰(zhàn)_第4頁(yè)
機(jī)器人綜合項(xiàng)目實(shí)踐教程 課件 第6、7章 STM32平臺(tái)機(jī)器人實(shí)戰(zhàn)、Norstar平臺(tái)機(jī)器人實(shí)戰(zhàn)_第5頁(yè)
已閱讀5頁(yè),還剩320頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第六章STM32平臺(tái)機(jī)器人實(shí)戰(zhàn)6.1

STM32基礎(chǔ)簡(jiǎn)介6.2

STM32開(kāi)發(fā)基礎(chǔ)知識(shí)6.3單個(gè)關(guān)節(jié)的倒立擺控制器實(shí)戰(zhàn)6.4多個(gè)關(guān)節(jié)的機(jī)器人實(shí)戰(zhàn)

6.1

STM32基礎(chǔ)簡(jiǎn)介6.1.1

STM32概述意法半導(dǎo)體(ST)集團(tuán)于1988年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成的。1998年5月,SGS-THOMSONMicroelectronics將公司名稱(chēng)改為意法半導(dǎo)體有限公司,是世界最大的半導(dǎo)體公司之一。STM32產(chǎn)品廣泛應(yīng)用于工業(yè)控制、消費(fèi)電子、物聯(lián)網(wǎng)、通訊設(shè)備、醫(yī)療服務(wù)、安防監(jiān)控等應(yīng)用領(lǐng)域,其優(yōu)異的性能進(jìn)一步推動(dòng)了生活和產(chǎn)業(yè)智能化的發(fā)展。

STM32是ARM?Cortex?內(nèi)核單片機(jī)和微處理器市場(chǎng)及技術(shù)方面的領(lǐng)先者,目前STM32提供17大產(chǎn)品線(F0、G0、F1、F2、F3、G4、F4、F7、H7、MP1、L0、L1、L4、L4+、L5、WB、WL),超過(guò)1000個(gè)型號(hào)。STM32F1屬于Cortex-M系列中的Cortex-M3內(nèi)核,采用ARMv7-M架構(gòu)。

STM32的產(chǎn)品定位及命名規(guī)則分別如圖6.1和圖6.2所示。圖6.1

STM32的產(chǎn)品定位圖6.2

STM32產(chǎn)品型號(hào)的命名規(guī)則

6.1.2

STM32資源與應(yīng)用

1)?CPU芯片資源

關(guān)于CPU芯片內(nèi)部資源,我們以STM32F103系列器件為例介紹。STM32F103Rx、STM32F103Vx和STM32F103Zx器件功能和配置如表6.1所示。

2)?STM32開(kāi)發(fā)板資源

ALIENTEK戰(zhàn)艦STM32開(kāi)發(fā)板(廣州市星翼電子科技有限公司(正點(diǎn)原子))的資源圖如圖6.3所示。圖6.3戰(zhàn)艦STM32開(kāi)發(fā)板資源圖

ALIENTEK戰(zhàn)艦STM32開(kāi)發(fā)板板載資源有:

?CPU:STM32F103ZET6,LQFP144;FLASH:512?KB;SRAM:64?KB。

外擴(kuò)SRAM:IS62WV51216,1?MB。

外擴(kuò)SPIFLASH:W25Q64,8?MB。

?1個(gè)電源指示燈(藍(lán)色)。

?2個(gè)狀態(tài)指示燈(DS0:紅色,DS1:綠色)。

1個(gè)紅外接收頭,并配備一款小巧的紅外遙控器;1個(gè)EEPROM芯片(24C02),其容量為256B。

?1個(gè)重力加速度傳感器芯片(ADXL345)。

?1個(gè)高性能音頻編解碼芯片(VS1053)。

?1個(gè)FM立體聲收發(fā)芯片(RDA5820)。

1個(gè)2.4?GB無(wú)線模塊接口(NRF24L01)。

?1路CAN接口,采用TJA1050芯片。

?1路485接口,采用SP3485芯片。

?1路RS232接口,采用SP3232芯片。

1個(gè)PS/2接口,可外接鼠標(biāo)、鍵盤(pán)。

?1個(gè)游戲手柄接口,可以直接插FC(紅白機(jī))游戲手柄。

1路數(shù)字溫濕度傳感器接口,支持DS18B20/DHT11等。

?1個(gè)標(biāo)準(zhǔn)的2.4/2.8/3.5英寸(1英寸=2.54厘米)LCD接口,支持觸摸屏。

?1個(gè)攝像頭模塊接口。

2個(gè)OLED模塊接口。

1個(gè)USB串口,可用于程序下載和代碼調(diào)試(USMART調(diào)試)。

1個(gè)USBSLAVE接口,用于USB通信。

1個(gè)有源蜂鳴器。

1個(gè)FM收發(fā)天線接口,并配天線。

?1個(gè)RS232/RS485選擇接口。

1個(gè)CAN/USB選擇接口。

1個(gè)串口選擇接口。

1個(gè)SD卡接口(在板子背面,支持SPI/SDIO)。

?1個(gè)SD卡/網(wǎng)絡(luò)模塊選擇接口。

?1個(gè)標(biāo)準(zhǔn)的JTAG/SWD調(diào)試下載口。

?1個(gè)VS1053的IIS輸出接口。

?1個(gè)MIC/LINEIN選擇接口。

?1個(gè)錄音頭(MIC/咪頭)。

?1路立體聲音頻輸出接口。

?1路立體聲錄音輸入接口。

?1組多功能端口(DAC/ADC/PWMDAC/AUDIOIN/TPAD)。

?1組5V電源供應(yīng)/接入口。

?1組3.3V電源供應(yīng)/接入口。

?1個(gè)參考電壓設(shè)置接口。

?1個(gè)直流電源輸入接口(輸入電壓范圍為6~16?V)。

?1個(gè)啟動(dòng)模式選擇配置接口。

?1個(gè)RTC后備電池座,并帶電池。

?1個(gè)復(fù)位按鈕,可用于復(fù)位MCU和LCD。

?4個(gè)功能按鈕,其中WK_UP兼具喚醒功能。

?1個(gè)電容觸摸按鍵。

?1個(gè)電源開(kāi)關(guān),控制整個(gè)板的電源。

獨(dú)創(chuàng)的一鍵下載功能以及除晶振占用的IO口外,其余所有IO口全部引出。

6.2

STM32開(kāi)發(fā)基礎(chǔ)知識(shí)

6.2.1

C語(yǔ)言基礎(chǔ)

1.?位操作對(duì)于C語(yǔ)言位操作,相信學(xué)過(guò)C語(yǔ)言的人都不陌生了,簡(jiǎn)而言之,位操作就是對(duì)基本類(lèi)型變量可以在位級(jí)別進(jìn)行操作。這節(jié)的內(nèi)容很多朋友都應(yīng)該很熟練了,這里我們點(diǎn)到為止,不深入探討。下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語(yǔ)言支持如表6.2中所示的6種位操作。

1)?設(shè)置某幾個(gè)位的值

不改變其他位的值的狀況下,對(duì)某幾個(gè)位進(jìn)行設(shè)置。這個(gè)場(chǎng)景在單片機(jī)開(kāi)發(fā)中經(jīng)常使用,其方法就是先對(duì)需要設(shè)置的位用&操作符進(jìn)行清零操作,然后用?|?操作符進(jìn)行設(shè)置。比如我們要改變GPIOA的狀態(tài),可以先對(duì)寄存器的值進(jìn)行&清零操作:

GPIOA->CRL&=0XFFFFFF0F;//將第4~7位清0

然后再與需要設(shè)置的值進(jìn)行|或運(yùn)算:

GPIOA->CRL?|?=0X00000040; //設(shè)置相應(yīng)位的值,不改變其他位的值

2)?移位操作提高代碼的可讀性

移位操作在單片機(jī)開(kāi)發(fā)中也非常重要,下面我們看看固件庫(kù)的GPIO初始化的函數(shù)里的一行代碼:

GPIOx->BSRR=(((uint32_t)0x01)<<pinpos);

這個(gè)操作就是將BSRR寄存器的第pinpos位設(shè)置為1,為什么要通過(guò)左移設(shè)置而不是直接設(shè)置一個(gè)固定的值呢?其實(shí),這是為了提高代碼的可讀性及可重用性。這行代碼可以讓你很直觀明了地知道,是將第pinpos位設(shè)置為1。如果你寫(xiě)成

GPIOx->BSRR=0x0030;

這樣的代碼可讀性差且不便于重用。類(lèi)似這樣的代碼很多:

GPIOA->ODR|=1<<5; //PA.5輸出高電平,不改變其他位

這樣我們一目了然,5告訴我們是第5位也就是第6個(gè)端口,1告訴我們是將第6個(gè)端口設(shè)置為1了。

3)?~取反操作使用技巧

SR寄存器的每一位都代表一個(gè)狀態(tài),如某個(gè)時(shí)刻我們希望去設(shè)置某一位的值為0,同時(shí)其他位都保留為1,簡(jiǎn)單的做法是直接給寄存器設(shè)置一個(gè)值:

TIMx->SR=0xFFF7;

這樣的做法設(shè)置第3位為0,但是這樣的做法同樣不好理解,并且可讀性很差??纯聪旅鎺?kù)函數(shù)代碼中是怎樣使用的:

TIMx->SR=(uint16_t)~TIM_FLAG;

2.?define宏定義

define是C語(yǔ)言中的預(yù)處理命令,它用于宏定義,可以提高源代碼的可讀性,為編程提供方便。define常見(jiàn)的格式:

#define標(biāo)識(shí)符

字符串

“標(biāo)識(shí)符”為所定義的宏名?!白址笨梢允浅?shù)、表達(dá)式、格式串等。例如:

#defineSYSCLK_FREQ_72MHz72000000

定義標(biāo)識(shí)符SYSCLK_FREQ_72MHz的值為72000000。

3.?ifdef條件編譯

單片機(jī)程序開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到一種情況,當(dāng)滿足某條件時(shí)對(duì)一組語(yǔ)句進(jìn)行編譯,而當(dāng)該條件不滿足時(shí)則編譯另一組語(yǔ)句。條件編譯命令最常見(jiàn)的形式為:

#ifdef標(biāo)識(shí)符

程序段1

#else

程序段2

#endif

上述命令的作用是:當(dāng)標(biāo)識(shí)符已經(jīng)被定義過(guò)(一般是用#define命令定義),則對(duì)程序段1進(jìn)行編譯,否則編譯程序段2。

其中#else部分也可以沒(méi)有,即:

#ifdef

程序段1

#endif

這種條件編譯語(yǔ)句在MDK開(kāi)發(fā)環(huán)境中比較常用,在stm32f10x.h這個(gè)頭文件中經(jīng)常會(huì)看到這樣的語(yǔ)句:

#ifdefSTM32F10X_HD

程序段/*大容量芯片需要的一些變量定義*/

#end

而STM32F10X_HD則是我們通過(guò)#define來(lái)定義的。

4.?extern變量申明

C語(yǔ)言中extern可以置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。這里需要注意,對(duì)于extern,變量申明可以多次,但定義只有一次。在我們的代碼中你會(huì)看到這樣的語(yǔ)句:

externu16USART_RX_STA;

這個(gè)語(yǔ)句是申明USART_RX_STA變量在其他文件中已經(jīng)定義了,在這里要使用到。所以,你肯定可以找到在某個(gè)地方有變量定義的語(yǔ)句,即:

u16USART_RX_STA;

下面通過(guò)一個(gè)例子說(shuō)明一下變量申明的使用方法。

在Main.c中定義全局變量id,id的初始化都是在Main.c里進(jìn)行的,如

Main.c文件

u8id;//全局變量id的初始化只允許在Main.C里面定義一次

main()

{

id=1;

printf("d%",id);//id=1

test();

printf("d%",id);//id=2

}

但是我們希望在test.c的changeId(void)函數(shù)中使用變量id,這個(gè)時(shí)候我們就需要在test.c里申明變量id是外部定義的了,因?yàn)槿绻簧昝?,變量id的作用域是到不了test.c文件中的。看下面test.c中的代碼:

externu8id;//申明變量id是在外部定義的,申明可以在很多個(gè)文件中進(jìn)行

voidtest(void)

{

id=2;

}

在test.c中申明變量id在外部定義,然后在test.c中就可以使用變量id了。對(duì)于extern申明函數(shù)在外部定義的應(yīng)用,這里不多講解。

5.?typedef類(lèi)型別名

typedef用于為現(xiàn)有類(lèi)型創(chuàng)建一個(gè)新的名字,或稱(chēng)為類(lèi)型別名,用來(lái)簡(jiǎn)化變量的定義。typedef在MDK開(kāi)發(fā)環(huán)境中用得最多的就是定義結(jié)構(gòu)體的類(lèi)型別名和枚舉類(lèi)型了。例如下列語(yǔ)句:

struct_GPIO

{

__IOuint32_tCRL;

__IOuint32_tCRH;

};

定義了一個(gè)結(jié)構(gòu)體GPIO,這樣我們定義變量的方式為:

struct_GPIOGPIOA;//定義結(jié)構(gòu)體變量GPIOA

但是這樣很繁瑣,MDK中有很多這樣的結(jié)構(gòu)體變量需要定義。這里我們可以為結(jié)構(gòu)體定義一個(gè)別名GPIO_TypeDef,這樣我們就可以在其他地方通過(guò)別名GPIO_TypeDef來(lái)定義結(jié)構(gòu)體變量了。方法如下:

typedefstruct

{

__IOuint32_tCRL;

__IOuint32_tCRH;

}GPIO_TypeDef;

Typedef為結(jié)構(gòu)體定義一個(gè)別名GPIO_TypeDef,這樣我們就可以通過(guò)GPIO_TypeDef來(lái)定義結(jié)構(gòu)體變量:

GPIO_TypeDef_GPIOA,_GPIOB;

這里的GPIO_TypeDef與struct_GPIO的作用相同。

6.結(jié)構(gòu)體

MDK開(kāi)發(fā)環(huán)境中太多地方會(huì)使用結(jié)構(gòu)體以及結(jié)構(gòu)體指針,這容易導(dǎo)致初學(xué)者學(xué)習(xí)STM32的積極性降低。其實(shí),結(jié)構(gòu)體并不是那么復(fù)雜,合理利用結(jié)構(gòu)體能使我們便利高效地處理復(fù)合類(lèi)型數(shù)據(jù)。

聲明結(jié)構(gòu)體類(lèi)型:

Struct結(jié)構(gòu)體名{

成員列表;

}變量名列表;

在結(jié)構(gòu)體申明的時(shí)候可以定義變量,也可以申明之后再定義變量,方法是:

Struct結(jié)構(gòu)體名字結(jié)構(gòu)體變量列表;

例如:structU_TYPEusart1,usart2;

結(jié)構(gòu)體成員變量的引用方法是:

結(jié)構(gòu)體變量名字.成員名

比如要引用usart1的成員BaudRate,方法是:usart1.BaudRate;結(jié)構(gòu)體指針變量定義也是一樣的,跟其他變量沒(méi)有什么區(qū)別。

例如:structU_TYPE*usart3;//定義結(jié)構(gòu)體指針變量usart1;

結(jié)構(gòu)體指針成員變量引用方法是通過(guò)“->”符號(hào)來(lái)實(shí)現(xiàn),比如要訪問(wèn)usart3結(jié)構(gòu)體指針指向的結(jié)構(gòu)體的成員變量BaudRate,方法是:

Usart3->BaudRate;

在單片機(jī)程序開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到要初始化一個(gè)外設(shè)比如串口,它的初始化狀態(tài)是由幾個(gè)屬性來(lái)決定的,比如串口號(hào)、波特率、極性以及模式等。對(duì)于這種情況,在沒(méi)有

學(xué)習(xí)結(jié)構(gòu)體的時(shí)候,我們采用的一般方法是:

voidUSART_Init(u8usartx,u32u32BaudRate,u8parity,u8mode);

這種方式有效的同時(shí)在一定場(chǎng)合是可取的。但是若希望往這個(gè)函數(shù)里再傳入一個(gè)參數(shù),那么勢(shì)必我們需要修改這個(gè)函數(shù)的定義,重新加入字長(zhǎng)這個(gè)入口參數(shù)。于是我們的定義被修改為:

voidUSART_Init(u8usartx,u32BaudRate,u8parity,u8mode,u8wordlength);

于是,我們?cè)诔跏蓟诘臅r(shí)候入口參數(shù)就可以是USART_InitTypeDef類(lèi)型的變量或者指針變量了,MDK中是這樣做的:

voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct);

6.2.2

STM32系統(tǒng)架構(gòu)

STM32的系統(tǒng)架構(gòu)比51單片機(jī)強(qiáng)大很多。為了讓讀者在學(xué)習(xí)STM32之前對(duì)系統(tǒng)架構(gòu)有一個(gè)初步的了解,本部分內(nèi)容對(duì)STM32系統(tǒng)架構(gòu)僅作基本介紹,下文所述的STM32系統(tǒng)架構(gòu)主要針對(duì)的是STM32F103等非互聯(lián)型芯片。STM32的系統(tǒng)架構(gòu)如圖6.4所示。圖6.4

STM32系統(tǒng)架構(gòu)

STM32主系統(tǒng)主要由四個(gè)驅(qū)動(dòng)單元和四個(gè)被動(dòng)單元構(gòu)成。

(1)?四個(gè)驅(qū)動(dòng)單元是:

內(nèi)核DCode總線;

系統(tǒng)總線;

通用DMA1;

通用DMA2。

(2)?四個(gè)被動(dòng)單元是:

?AHB到APB的橋:連接所有的APB設(shè)備;

內(nèi)部FlASH閃存;

內(nèi)部SRAM;

?FSMC。

圖6.4中幾個(gè)總線的相關(guān)知識(shí)介紹如下:

①I(mǎi)Code總線:該總線將M3內(nèi)核指令總線和閃存指令接口相連,指令的預(yù)取在該總線上面完成。

②DCode總線:該總線將M3內(nèi)核的DCode總線與閃存存儲(chǔ)器的數(shù)據(jù)接口相連接,常量加載和調(diào)試訪問(wèn)在該總線上面完成。

系統(tǒng)總線:該總線連接M3內(nèi)核的系統(tǒng)總線到總線矩陣,總線矩陣協(xié)調(diào)內(nèi)核和DMA間相互訪問(wèn)。

④DMA總線:該總線將DMA的AHB主控接口與總線矩陣相連,總線矩陣協(xié)調(diào)CPU的DCode和DMA到SRAM、閃存和外設(shè)的相互訪問(wèn)。

總線矩陣:總線矩陣協(xié)調(diào)內(nèi)核系統(tǒng)總線和DMA主控總線之間的訪問(wèn)仲裁,仲裁利用輪換算法。

⑥AHB/APB橋:這兩個(gè)橋在AHB和2個(gè)APB總線間提供同步連接,APB1操作速度限于36?MHz,APB2操作速度為全速。

6.2.3系統(tǒng)時(shí)鐘

眾所周知,時(shí)鐘系統(tǒng)是CPU的脈搏,就像人的心跳一樣。所以時(shí)鐘系統(tǒng)的重要性就不言而喻了。STM32的時(shí)鐘系統(tǒng)比較復(fù)雜,不像簡(jiǎn)單的51單片機(jī)一個(gè)系統(tǒng)時(shí)鐘就可以解決一切時(shí)鐘問(wèn)題。于是有人要問(wèn),采用一個(gè)系統(tǒng)時(shí)鐘不是很簡(jiǎn)單嗎?為什么STM32要有多個(gè)時(shí)鐘源呢?

因?yàn)槭紫缺旧鞸TM32非常復(fù)雜,外設(shè)非常多,但是并不是所有外設(shè)都需要系統(tǒng)時(shí)鐘這么高的頻率,比如看門(mén)狗以及RTC只需要幾十千赫茲的時(shí)鐘即可。同一個(gè)電路,時(shí)鐘越快功耗越大,同時(shí)抗電磁干擾能力也會(huì)越弱,所以對(duì)于較為復(fù)雜的MCU,一般都是采取多時(shí)鐘源的方法來(lái)解決這些問(wèn)題。

下面我們來(lái)看看STM32的時(shí)鐘系統(tǒng)圖,如圖6.5所示。

在STM32中,有五個(gè)時(shí)鐘源,名稱(chēng)分別為HSI、HSE、LSI、LSE、PLL。根據(jù)時(shí)鐘源頻率可以將其分為高速時(shí)鐘源和低速時(shí)鐘源,在這5個(gè)時(shí)鐘源中,HIS、HSE和PLL是高速時(shí)鐘源,LSI和LSE是低速時(shí)鐘源。根據(jù)時(shí)鐘源的來(lái)源可將其分為外部時(shí)鐘源和內(nèi)部時(shí)鐘源,外部時(shí)鐘源就是以從外部通過(guò)接晶振的方式獲取時(shí)鐘信號(hào)的時(shí)鐘源,其中HSE和LSE是外部時(shí)鐘源,其他的是內(nèi)部時(shí)鐘源。圖6.5時(shí)鐘系統(tǒng)圖

具體而言,按圖中圓圈標(biāo)示的順序,分別為:

①HSI是高速內(nèi)部時(shí)鐘,為RC振蕩器,頻率為8?MHz。

②HSE是高速外部時(shí)鐘,可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4~16?MHz。本書(shū)介紹的開(kāi)發(fā)板接的是8?MHz的晶振。

③LSI是低速內(nèi)部時(shí)鐘,為RC振蕩器,頻率為40?kHz。獨(dú)立看門(mén)狗的時(shí)鐘源只能是LSI,同時(shí)LSI還可以作為RTC的時(shí)鐘源。

④LSE是低速外部時(shí)鐘,接頻率為32.768?kHz的晶振,其主要用于RTC時(shí)鐘源。

⑤PLL為鎖相環(huán)倍頻輸出,其時(shí)鐘輸入源可選擇HSI/2、HSE或者HSE/2,倍頻可為其的2~16倍,但是其輸出頻率最大不得超過(guò)72?MHz。

E處是指其他所有外設(shè)了。從時(shí)鐘圖上可以看出,其他所有外設(shè)的時(shí)鐘最終來(lái)源都是SYSCLK。SYSCLK通過(guò)AHB分頻器分頻后送給各模塊使用。這些模塊包括:

①AHB總線、內(nèi)核、內(nèi)存和DMA使用的HCLK時(shí)鐘。

通過(guò)8分頻后送給Cortex的系統(tǒng)定時(shí)器時(shí)鐘,也就是Systick。

直接送給Cortex的空閑運(yùn)行時(shí)鐘FCLK。

送給APB1分頻器。APB1分頻器輸出一路供APB1外設(shè)使用(PCLK1,最大頻率為36?MHz),另一路送給定時(shí)器(Timer)2、3、4倍頻器使用。

送給APB2分頻器。APB2分頻器分頻輸出一路供APB2外設(shè)使用(PCLK2,最大頻率為72?MHz),另一路送給定時(shí)器(Timer)1倍頻器使用。

6.2.4

STM32NVIC中斷優(yōu)先級(jí)管理

CM3內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。但STM32并沒(méi)有使用CM3內(nèi)核的全部東西,而是只用了它的一部分。STM32有84個(gè)中斷,包括16個(gè)內(nèi)核中斷和68個(gè)可屏蔽中斷,具有16級(jí)可編程的中斷優(yōu)先級(jí)。常用的就是這68個(gè)可屏蔽中斷,但是STM32的68個(gè)可屏蔽中斷,真正在STM32F103系列上只有60個(gè),在107系列上才有68個(gè)。因?yàn)槲覀冮_(kāi)發(fā)板選擇的芯片是STM32F103系列的,所以我們就只針對(duì)STM32F103系列這60個(gè)可屏蔽中斷進(jìn)行介紹。

具體的分配關(guān)系如表6.3所示。

結(jié)合實(shí)例說(shuō)明一下:假定設(shè)置中斷優(yōu)先級(jí)組為2,然后設(shè)置中斷3(RTC中斷)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為1;中斷6(外部中斷0)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為0;中斷7(外部中斷1)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為0。那么這3個(gè)中斷的優(yōu)先級(jí)順序?yàn)椋褐袛?>中斷3>中斷6。上面例子中的中斷3和中斷7都可以打斷中斷6的中斷。而中斷7和中斷3卻不可以相互打斷。

通過(guò)以上介紹,我們熟悉了STM32中斷設(shè)置的大致過(guò)程。接下來(lái)我們介紹如何使用“庫(kù)函數(shù)”進(jìn)行以上中斷分組設(shè)置以及中斷優(yōu)先級(jí)管理,使得以后的中斷設(shè)置可以簡(jiǎn)單化。NVIC中斷

管理函數(shù)主要在misc.c文件里。

首先要講解的是中斷優(yōu)先級(jí)分組函數(shù)

NVIC_PriorityGroupConfig,其函數(shù)申明如下:

voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup);

這個(gè)函數(shù)的作用是對(duì)中斷的優(yōu)先級(jí)進(jìn)行分組,該函數(shù)在系統(tǒng)中只能被調(diào)用一次,一旦分組確定就最好不要更改。該函數(shù)的實(shí)現(xiàn)為:

voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)

{

assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));

SCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;

}

從該函數(shù)體可以看出,這個(gè)函數(shù)的唯一目的就是通過(guò)設(shè)置SCB->AIRCR寄存器來(lái)設(shè)置中斷優(yōu)先級(jí)分組,這在前講解面寄存器的過(guò)程中已經(jīng)講到。而其入口參數(shù)通過(guò)雙擊選中函數(shù)體里面的“IS_NVIC_PRIORITY_GROUP”然后右鍵單擊“Gotodefitionof…”可以查看到,如下所示:

#defineIS_NVIC_PRIORITY_GROUP(GROUP)

(((GROUP)==NVIC_PriorityGroup_0)||

((GROUP)==NVIC_PriorityGroup_1)||\

((GROUP)==NVIC_PriorityGroup_2)||\

((GROUP)==NVIC_PriorityGroup_3)||\

((GROUP)==NVIC_PriorityGroup_4))

這也是我們之前講解的分組范圍為0~4。比如我們?cè)O(shè)置整個(gè)系統(tǒng)的中斷優(yōu)先級(jí)分組值為2,那么方法是:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

這樣就確定了一共為“2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)”。設(shè)置好系統(tǒng)中斷分組后,對(duì)于每個(gè)中斷我們又怎么確定它的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)呢?下面我們講解一個(gè)重要的函數(shù)——中斷初始化函數(shù)NVIC_Init,其函數(shù)申明為:

voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)

比如我們要使能串口1的中斷,同時(shí)設(shè)置搶占優(yōu)先級(jí)為1,子優(yōu)先級(jí)為2,其初始化方法如下:

這里我們講解了中斷的分組的概念以及設(shè)定優(yōu)先級(jí)值的方法,至于每種優(yōu)先級(jí)還有一些關(guān)于清除中斷、查看中斷狀態(tài)等方法,后面講解每個(gè)中斷的時(shí)候會(huì)詳細(xì)講解。最后我們總結(jié)一下中斷優(yōu)先級(jí)設(shè)置的步驟:

(1)系統(tǒng)運(yùn)行開(kāi)始的時(shí)候設(shè)置中斷分組。確定組號(hào),也就是確定搶占優(yōu)先級(jí)和子優(yōu)先級(jí)的分配位數(shù)。調(diào)用函數(shù)為NVIC_PriorityGroupConfig();

(2)設(shè)置所用到的中斷的中斷優(yōu)先級(jí)別。對(duì)每個(gè)中斷調(diào)用函數(shù)為NVIC_Init()。

6.3單個(gè)關(guān)節(jié)的倒立擺控制器實(shí)戰(zhàn)

6.3.1倒立擺系統(tǒng)倒立擺系統(tǒng)被認(rèn)為是研究關(guān)節(jié)機(jī)器人控制理論中的典型實(shí)驗(yàn)設(shè)備,也是抽象關(guān)節(jié)機(jī)器人的典型物理模型,它本身是一個(gè)自然不穩(wěn)定體,在控制過(guò)程中能夠有效地反映控制中的許多關(guān)鍵問(wèn)題。一級(jí)倒立擺硬件框圖如圖6.6所示,包括倒立擺本體、電控箱及由STM32控制器和計(jì)算機(jī)組成的控制功能模塊等三大部分。圖6.6固高倒立擺系統(tǒng)硬件框圖

為了實(shí)現(xiàn)倒立擺擺桿的穩(wěn)定控制,在STM32平臺(tái)上位機(jī)開(kāi)發(fā)環(huán)境中進(jìn)行倒立擺控制程序的開(kāi)發(fā),如圖6.7所示為倒立擺系統(tǒng)控制程序流程圖。如圖6.7(a)所示,系統(tǒng)上電后,首先對(duì)STM32平臺(tái)微控制器的串口、中斷、定時(shí)器等進(jìn)行初始化,同時(shí)對(duì)STM32平臺(tái)控制的倒立擺系統(tǒng)的編碼器、電機(jī)及顯示器進(jìn)行初始化,然后進(jìn)入定時(shí)器中斷,如圖6.7(b)所示為定時(shí)器中斷的程序流程框圖,可在中斷中實(shí)現(xiàn)相應(yīng)倒立擺的各控制參數(shù)的檢測(cè)控制功能。圖6.7倒立擺擺桿的穩(wěn)定控制流程圖

由圖6.7(b)所示定時(shí)器中斷的程序流程圖設(shè)計(jì)出的具體操作命令的執(zhí)行過(guò)程是:首先,STM32平臺(tái)控制器讀取AD轉(zhuǎn)換模塊采集到的擺桿傾角信息,并通過(guò)兩路編碼器讀取滑塊的相對(duì)位置信息;然后,STM32平臺(tái)控制器根據(jù)所獲得的實(shí)時(shí)信息,計(jì)算保持?jǐn)[桿平衡所需的滑塊位移,并將其轉(zhuǎn)換為相應(yīng)的電機(jī)的控制信號(hào),從而控制滑塊向相應(yīng)方向進(jìn)行移動(dòng),達(dá)到保持?jǐn)[桿平衡的目的。采用上述方法實(shí)現(xiàn)一級(jí)倒立擺平穩(wěn)地控制在擺體初始位置附近,如圖6.8所示為倒立擺實(shí)物控制圖。圖6.8倒立擺實(shí)物控制圖

6.3.2四種智能機(jī)器人控制器的倒立擺實(shí)戰(zhàn)

1.?模糊控制器的倒立擺實(shí)戰(zhàn)

基于MATLAB/Simulink軟件環(huán)境中的模糊控制器編輯調(diào)試的一般操作步驟如下:

(1)?在Simulink環(huán)境的命令行窗口輸入“fuzzy”,按回車(chē)鍵,或輸入fuzzysltank,這樣調(diào)出對(duì)應(yīng)軟件中的工程范例,進(jìn)入如圖6.9所示的模糊系統(tǒng)仿真控制工具箱進(jìn)行編輯設(shè)計(jì),從而分析系統(tǒng)的輸出及控制性能參數(shù)。

(2)?如圖6.9中數(shù)字“1”表示菜單,允許你使用5個(gè)基本GUI工具中的任何一個(gè)保存、打開(kāi)或編輯模糊系統(tǒng);數(shù)字“2”表示系統(tǒng)名顯示在這里,可以使用saveas……菜單項(xiàng)改變它;數(shù)字“3”表示這些下拉式菜單用于選擇模糊推理函數(shù),例如選擇反模糊化(Defuzzification),一般采用面積中心(重心)法(centroid);數(shù)字“4”表示此狀態(tài)行描述了最近的當(dāng)前操作;數(shù)字“5”表示雙擊輸入變量圖標(biāo)打開(kāi)隸屬度函數(shù)編輯器;數(shù)字“6”表示雙擊系統(tǒng)方框圖標(biāo)打開(kāi)規(guī)則編輯器;數(shù)字“7”表示雙擊輸出變量圖標(biāo)打開(kāi)隸屬度函數(shù)編輯器;數(shù)字“8”表示此編輯框域,用于命名并編輯輸入和輸出變量的名字。圖6.9模糊控制器的調(diào)用編輯

(3)?在Matlab主窗口命令行中輸入命令fuzzy,打開(kāi)編輯好的fis文件,順序單擊菜單file-export-toworkspace,將模糊控制器程序文件存入工作空間中,進(jìn)行下一步連接操作。這里強(qiáng)調(diào)一下,只有嵌入成功才能實(shí)現(xiàn)模糊控制,檢查方法就是如圖6.10所示,通過(guò)選擇“FuzzyLogicController”模塊,進(jìn)入“模型編輯器”;再用鼠標(biāo)右鍵單擊它,會(huì)彈出一個(gè)菜單;單擊彈出菜單中的“LookUnderMask”,就顯現(xiàn)出它的內(nèi)部結(jié)構(gòu),如上寫(xiě)著“sffis”,表明未嵌入FIS結(jié)構(gòu)文件;如這時(shí)“sffis”變成“fis”,表明已嵌入FIS結(jié)構(gòu)文件。

(4)?將模糊邏輯添加到Simulink中,打開(kāi)Simulink,新建model(.mdl文件),如圖6.10所示為搭建Simulink程序;這時(shí)在命令窗口中敲入命令代碼:fuzzy=readfis('fuzzycontrol.fis'?),進(jìn)入圖6.10所示的一階T-S型模糊控制器程序編輯界面。設(shè)置模糊控制器的輸入激勵(lì)信號(hào),采用連接多路復(fù)用的mux模塊,如圖6.10中的復(fù)用模塊里面集成了多路輸入激勵(lì)信號(hào)連接零階保持器(Zero-OrderHold模塊)。

(5)?在做仿真的時(shí)候,仿真結(jié)束后,彈出一個(gè)對(duì)話框,若顯示的是“SolverStepsizeisbecominglessthanspecifedminimumstepsize.”,則說(shuō)明是步長(zhǎng)的問(wèn)題,不要選變步長(zhǎng)選項(xiàng),應(yīng)采用定步長(zhǎng)方式。你可以在SimulationParameters設(shè)置參數(shù)窗口中將BooleanLogicSignalsOption設(shè)置為off,讓Matlab在仿真運(yùn)行中自動(dòng)轉(zhuǎn)換變量類(lèi)型就可以了。

如圖6.10所示為模糊控制器程序編輯運(yùn)行界面,來(lái)自Matlab自帶的一階T-S型模糊控制器slcp.mdl。其中圖6.10(a)為模糊控制器程序編輯運(yùn)行界面,圖6.10(b)為一階T-S型模糊控制器仿真運(yùn)行效果圖。圖6.10一階T-S型模糊控制器的調(diào)用編輯圖6.10一階T-S型模糊控制器的調(diào)用編輯

2.?BP神經(jīng)網(wǎng)絡(luò)控制器的倒立擺實(shí)戰(zhàn)

1)?BP神經(jīng)網(wǎng)絡(luò)概述

BP(BackPropagation)神經(jīng)網(wǎng)絡(luò)是一種利用誤差反向傳播訓(xùn)練算法的前饋型網(wǎng)絡(luò),BP學(xué)習(xí)算法實(shí)質(zhì)是求取網(wǎng)絡(luò)總誤差函數(shù)的最小值問(wèn)題。這種算法采用非線性規(guī)劃中的最速下降方法,按誤差函數(shù)的負(fù)梯度方向修改權(quán)系數(shù),這是梯度下降法在多層前饋網(wǎng)絡(luò)中的應(yīng)用。具體學(xué)習(xí)算法包括兩大過(guò)程,其一是輸入信號(hào)的正向傳播過(guò)程,其二是輸出誤差信號(hào)的反向傳播過(guò)程。

BP神經(jīng)網(wǎng)絡(luò)具有以下三方面的主要優(yōu)點(diǎn):

第一,只要有足夠多的隱含層,BP神經(jīng)網(wǎng)絡(luò)即可逼近任意的非線性映射關(guān)系。

第二,BP學(xué)習(xí)算法是一種全局逼近方法,因而它具有較好的泛化能力。

第三,BP神經(jīng)網(wǎng)絡(luò)具有一定的容錯(cuò)能力,因?yàn)锽P神經(jīng)網(wǎng)絡(luò)輸入輸出間的關(guān)聯(lián)信息分布存儲(chǔ)于連接權(quán)中,由于連接權(quán)的個(gè)數(shù)眾多,個(gè)別神經(jīng)元的損壞對(duì)輸入輸出關(guān)系只有較小影響。

2)基于BP神經(jīng)網(wǎng)絡(luò)的控制器設(shè)計(jì)

神經(jīng)網(wǎng)絡(luò)控制器可通過(guò)采集和分析實(shí)物系統(tǒng)其他控制器的數(shù)據(jù)訓(xùn)練得到,也可利用仿真實(shí)驗(yàn)中的控制器得到,但要注意模型參數(shù)是否匹配。這里神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)來(lái)源于Matlab自帶的一階T-S型模糊控制slcp.mdl模塊,如圖6.11所示。在上面的控制系統(tǒng)中提取擺角、角速度、位移、速度的初始條件分別為0.5rad、1rad/s、0和0,在此條件下采集的輸入輸出對(duì)作為樣本。

使用Matlab實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的步驟是首先根據(jù)應(yīng)用創(chuàng)建一個(gè)神經(jīng)網(wǎng)絡(luò);其次進(jìn)行訓(xùn)練樣本的準(zhǔn)備與處理,然后設(shè)定神經(jīng)網(wǎng)絡(luò)的訓(xùn)練參數(shù),利用給定樣本對(duì)創(chuàng)建的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練;最后輸入測(cè)試數(shù)據(jù),測(cè)試訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)的性能。如圖6.11所示是BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)的提取過(guò)程的示意圖,利用“SignalToWorkspace”模塊獲取一階T-S型模糊控制仿真過(guò)程的控制器輸入輸出數(shù)據(jù)對(duì),并將其保存到工作區(qū)中,可以直接將其用到神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中。圖6.11神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)提取過(guò)程示意圖

3)?BP神經(jīng)網(wǎng)絡(luò)控制的實(shí)現(xiàn)

用語(yǔ)句gensim(net,-1)可以在simulink里生成控制器并使用其進(jìn)行控制,其中-1的意思是系統(tǒng)是實(shí)時(shí)的,生成神經(jīng)網(wǎng)絡(luò)控制器結(jié)構(gòu)。如圖6.12所示為BP神經(jīng)網(wǎng)絡(luò)控制器輸入輸出結(jié)構(gòu)示意。圖6.12BP神經(jīng)網(wǎng)絡(luò)控制器輸入輸出結(jié)構(gòu)

如圖6.13所示為直線一級(jí)機(jī)械臂神經(jīng)網(wǎng)絡(luò)控制器,使用訓(xùn)練后的BP神經(jīng)網(wǎng)絡(luò)控制器代替原模糊控制器便可進(jìn)行仿真試驗(yàn)。單擊模型窗口上的“run”,運(yùn)行以上的仿真實(shí)驗(yàn),通過(guò)“scope”模塊觀察機(jī)械臂的運(yùn)動(dòng)狀態(tài)曲線。隱含層函數(shù)嵌在神經(jīng)網(wǎng)絡(luò)控制器里。圖6.13直線一級(jí)機(jī)械臂神經(jīng)網(wǎng)絡(luò)控制器

3.?LQR控制器的倒立擺實(shí)戰(zhàn)

LQR(LinearQuadraticRegulator)即線性二次型調(diào)節(jié)器,其研究對(duì)象是現(xiàn)代控制理論中狀態(tài)空間形式的線性系統(tǒng),而且目標(biāo)函數(shù)為對(duì)象狀態(tài)和控制輸入的二次型函數(shù)。在Matlab/Simulink軟件環(huán)境中“LQRController”是一個(gè)封裝好的模塊,在Simulink中建立直線一級(jí)機(jī)械臂的模型。如圖6.14所示為一級(jí)機(jī)械臂LQR控制器。圖6.14一級(jí)機(jī)械臂LQR控制器

LQR理論是現(xiàn)代控制理論中發(fā)展最早也是最為成熟的一種狀態(tài)空間設(shè)計(jì)理論。采用LQR最優(yōu)設(shè)計(jì)可以得到狀態(tài)線性反饋的最優(yōu)控制量。對(duì)于一級(jí)機(jī)械臂的線性定常系統(tǒng)而言,任何平衡狀態(tài)通過(guò)線性變換可轉(zhuǎn)化為零狀態(tài)。為了方便起見(jiàn),通常將系統(tǒng)的零狀態(tài)取為平衡狀態(tài)。如式(6.1)所示為以狀態(tài)方程組給出的一級(jí)機(jī)械臂線性反饋系統(tǒng)迭代控制策略結(jié)構(gòu)。

(6.1)

式(6.1)中,A為線性時(shí)變系統(tǒng)矩陣,B為增益矩陣,C為反映系統(tǒng)狀態(tài)對(duì)輸出影響的系數(shù)矩陣,D為反映系統(tǒng)輸入對(duì)輸出直接作用的系數(shù)矩陣。

通過(guò)最佳控制量的矩陣K,使性能指標(biāo)J的值極小。LQR最優(yōu)設(shè)計(jì)是設(shè)計(jì)出的狀態(tài)反饋控制器K要使二次型目標(biāo)函數(shù)J取最小值,而K由權(quán)重矩陣Q和R唯一決定。性能指標(biāo)J的給定形式如式(6.2)所示。

(6.2)

式(6.2)中,Q為半正定的加權(quán)矩陣,是用來(lái)平衡狀態(tài)變量的權(quán)重;R為對(duì)稱(chēng)正定矩陣,是用來(lái)平衡輸入變量的權(quán)重。在這里平衡狀態(tài)方程的形式為,根據(jù)該方程可以獲得P的值,然后用公式找到最優(yōu)反饋矩陣K,調(diào)節(jié)Q和R可以找到不同的K。不一樣的反饋矩陣的控制效果也不一樣。通過(guò)不斷地調(diào)節(jié)找出最合適的K值。令Q=1求得K=[-1-1.785525.4224.6849]。

“LQRcontroller”是一個(gè)封裝好的模塊,在Matlab軟件Simulink環(huán)境的嵌入式系統(tǒng)模塊Invertedpendulumtoolbox內(nèi)部,含有一個(gè)SinglependulumLQRcontroldemo的模型,單擊可以打開(kāi)這個(gè)單級(jí)機(jī)械臂LQR控制模型,雙擊LQR控制器可以調(diào)節(jié)參數(shù)。同時(shí)配合打開(kāi)硬件控制箱,慢慢地將機(jī)械臂擺桿推到平衡位置附近(動(dòng)作一定要慢)。當(dāng)擺桿很接近平衡位置的機(jī)器人小車(chē)時(shí)就會(huì)開(kāi)始突然移動(dòng)并且保持?jǐn)[桿的平衡。雙擊startrealpendulumcontrol進(jìn)入如圖6.15所示調(diào)節(jié)狀態(tài),可以調(diào)節(jié)反饋矩陣K,也可以通過(guò)利用示波器(scope)觀察機(jī)械臂擺桿的角速度、擺桿角度以及擺桿速度的變化。圖6.15

LQR控制器內(nèi)部參數(shù)調(diào)節(jié)結(jié)構(gòu)

說(shuō)明:軟件中實(shí)時(shí)調(diào)節(jié)求解K值的操作方法是:選擇“Lookundermask”,在其上點(diǎn)擊鼠標(biāo)右鍵,打開(kāi)如圖6.15所示為L(zhǎng)QR控制器內(nèi)部參數(shù)調(diào)節(jié)結(jié)構(gòu)。點(diǎn)擊MatrixGainK可以調(diào)節(jié)K的值,先輸入理論計(jì)算最優(yōu)值K=[-1-1.7855?25.422?4.6849];后增加Q值使得控制倒立擺的穩(wěn)定時(shí)間和上升時(shí)間變短,以及擺桿的角度變化減小。經(jīng)過(guò)多次嘗試,調(diào)節(jié)參數(shù)K=[-32.7928?-23.8255?81.6182?14.7098],將這個(gè)新參數(shù)K值輸入運(yùn)行系統(tǒng)。通過(guò)不斷地調(diào)整反饋矩陣K,即可得到最理想的反饋矩陣K=[-16?-6?50?5]。

4.?RBF神經(jīng)網(wǎng)絡(luò)控制器實(shí)戰(zhàn)

這里提出機(jī)器人關(guān)節(jié)控制策略,采用RBF神經(jīng)網(wǎng)絡(luò)逼近不確定項(xiàng)的自適應(yīng)控制策略,以動(dòng)力學(xué)為基礎(chǔ),在計(jì)算了力矩的基礎(chǔ)上,設(shè)計(jì)符合相應(yīng)條件的魯棒控制器,將所建立的二關(guān)節(jié)機(jī)械手模型用RBF(徑向基神經(jīng)網(wǎng)絡(luò))對(duì)其中的不確定項(xiàng)f進(jìn)行不斷逼近,使跟蹤誤差(理想位置與實(shí)際位置的差值)逐步縮小。

1)?RBF網(wǎng)絡(luò)特點(diǎn)及結(jié)構(gòu)

RBF網(wǎng)絡(luò)的特點(diǎn)如下:

(1)?RBF網(wǎng)絡(luò)的作用函數(shù)為高斯函數(shù),是局部的,BP網(wǎng)絡(luò)的作用函數(shù)為S函數(shù),是全局的;

(2)?如何確定RBF網(wǎng)絡(luò)的隱層節(jié)點(diǎn)中心及基寬度參數(shù)是一個(gè)困難的問(wèn)題;

(3)?已證明RBF網(wǎng)絡(luò)具有唯一最佳逼近的特性,且無(wú)局部極小。

RBF網(wǎng)絡(luò)是一種三層前向網(wǎng)絡(luò),由于輸入到輸出映射是非線性的,而隱含層空間到輸出空間的映射是線性的,從而可以大大加快學(xué)習(xí)速度并避免局部極小問(wèn)題。

采用RBF網(wǎng)絡(luò)可以逼近一對(duì)象的結(jié)構(gòu)。如圖6.16所示為RBF網(wǎng)絡(luò)逼近對(duì)象結(jié)構(gòu)示意圖。圖6.16

RBF網(wǎng)絡(luò)逼近結(jié)構(gòu)

2)?RBF神經(jīng)網(wǎng)絡(luò)函數(shù)newrbe及其參數(shù)介紹

應(yīng)用newrbe()函數(shù)可以快速設(shè)計(jì)一個(gè)徑向基函數(shù)網(wǎng)絡(luò),且使得設(shè)計(jì)誤差為0,調(diào)用方式如式(6.3)所示。

式(6.3)中P為輸入向量,T為期望輸出向量(目標(biāo)值),SPREAD為徑向基層的散布常數(shù),缺省值為1。輸出為一個(gè)徑向基網(wǎng)絡(luò),其權(quán)值和閾值完全滿足輸入和期望值關(guān)系要求。

3)?建立RBF神經(jīng)網(wǎng)絡(luò)控制模型

利用Matlab自帶的一階T-S型模糊控制slcp.mdl模塊加載設(shè)計(jì)RBF神經(jīng)網(wǎng)絡(luò)控制器,將如圖6.11所示的擺桿控制系統(tǒng)中提取擺角、角速度、位移、速度初始條件參數(shù)分別設(shè)置為0.5rad、1rad/s、0和0,利用SignalToWorkspace模塊獲取一階T-S型模糊控制在此條件下擺桿響應(yīng)的輸入輸出數(shù)據(jù)對(duì),并保存到工作區(qū)中,它們可以直接用到建立RBF神經(jīng)網(wǎng)絡(luò)控制模型訓(xùn)練中,工作原理如前面圖6.13所示的BP神經(jīng)網(wǎng)絡(luò)控制器的數(shù)據(jù)提取過(guò)程,詳細(xì)操作如下面步驟所示。

首先將提取出的訓(xùn)練數(shù)據(jù)變?yōu)闃?biāo)準(zhǔn)的訓(xùn)練數(shù)據(jù)形式。標(biāo)準(zhǔn)的訓(xùn)練數(shù)據(jù)分為輸入和目標(biāo)輸出兩部分。輸入部分是一個(gè)形式為輸入個(gè)數(shù)×訓(xùn)練數(shù)據(jù)個(gè)數(shù)的矩陣,這里輸入個(gè)數(shù)為4。目標(biāo)輸出為一個(gè)輸出個(gè)數(shù)×訓(xùn)練數(shù)據(jù)個(gè)數(shù)的矩陣,這里輸出個(gè)數(shù)為1。而經(jīng)signaltoworkspace模塊提取出的數(shù)據(jù)為一個(gè)訓(xùn)練數(shù)據(jù)個(gè)數(shù)×輸入(或輸出)個(gè)數(shù)的矩陣,因此分別將u、v轉(zhuǎn)置后就得到標(biāo)準(zhǔn)訓(xùn)練數(shù)據(jù)集u'、v'。使用下面語(yǔ)句應(yīng)用newrbe()函數(shù)設(shè)計(jì)一個(gè)RBF神經(jīng)網(wǎng)絡(luò),如式(6.4)所示。

對(duì)網(wǎng)絡(luò)進(jìn)行檢測(cè),對(duì)于輸入向量input應(yīng)用函數(shù)sim()進(jìn)行仿真,觀察RBF對(duì)樣本向量的逼近效果,如式(6.5)所示。

y=sim(net,input)(6.5)

調(diào)用函數(shù)gensim()生成上述網(wǎng)絡(luò)的Simulink模型。設(shè)定st=-1,生成一個(gè)連續(xù)采樣的網(wǎng)絡(luò)模塊。用下面語(yǔ)句可以在Simulink里生成控制器并使用其進(jìn)行控制,如式(6.6)所示。

gensim(net,-1)(6.6)

其中-1的意思是系統(tǒng)是實(shí)時(shí)的。最后生成RBF神經(jīng)網(wǎng)絡(luò)控制器。如圖6.17所示為RBF神經(jīng)網(wǎng)絡(luò)控制器結(jié)構(gòu)原理圖。圖6.17

RBF神經(jīng)網(wǎng)絡(luò)控制器結(jié)構(gòu)原理圖6.17

RBF神經(jīng)網(wǎng)絡(luò)控制器結(jié)構(gòu)原理

4)?RBF神經(jīng)網(wǎng)絡(luò)模型的穩(wěn)定控制

使用這個(gè)RBF神經(jīng)網(wǎng)絡(luò)控制器代替原模糊控制器,運(yùn)行程序,比較結(jié)果。如圖6.18所示為RBF神經(jīng)網(wǎng)絡(luò)控制器結(jié)構(gòu)框圖。圖6.18RBF神經(jīng)網(wǎng)絡(luò)控制器結(jié)構(gòu)框圖

為了更直觀地研究RBF網(wǎng)絡(luò)逼近的效果,首先采用訓(xùn)練RBF神經(jīng)網(wǎng)絡(luò)控制策略,利用上節(jié)所求解的逆運(yùn)動(dòng)方程和MatlabRobotics工具箱的fkine語(yǔ)句,可以獲得末端機(jī)械手位姿所對(duì)應(yīng)的齊次變換矩陣,用ikine函數(shù)求解對(duì)應(yīng)的關(guān)節(jié)轉(zhuǎn)角。在實(shí)際仿真中,使用newrb函數(shù)時(shí),函數(shù)格式為net=newrb(P,T,GOAL,SPREAD,MN,DF),選擇徑向基神經(jīng)元層散布常數(shù)spread(=1.25),P是輸入向量,用Matlab自帶的模糊控制器仿真來(lái)獲取。T是目標(biāo)向量,GOAL是均方誤差,當(dāng)網(wǎng)絡(luò)誤差目標(biāo)(goal)為0.01時(shí),能夠得到很好的仿真結(jié)果。

源程序語(yǔ)句如式(6.7)所示。

RBF仿真模型基本上跟BP網(wǎng)絡(luò)模型相似,但是仿真效果不太理想。因?yàn)镽BF網(wǎng)絡(luò)比較適用于分類(lèi)問(wèn)題而不是控制問(wèn)題。與BP神經(jīng)網(wǎng)絡(luò)的函數(shù)比較,RBF的訓(xùn)練函數(shù)相對(duì)簡(jiǎn)單一點(diǎn),參數(shù)也不是很多,且大部分參數(shù)是系統(tǒng)默認(rèn)的。

6.4多個(gè)關(guān)節(jié)的機(jī)器人實(shí)戰(zhàn)

6.4.1多個(gè)關(guān)節(jié)機(jī)器人仿真關(guān)節(jié)機(jī)器人,也稱(chēng)關(guān)節(jié)手臂機(jī)器人或關(guān)節(jié)機(jī)械手臂,是當(dāng)今工業(yè)領(lǐng)域中最常見(jiàn)的工業(yè)機(jī)器人的形態(tài)之一,適用于諸多工業(yè)領(lǐng)域的機(jī)械自動(dòng)化作業(yè)。比如,自動(dòng)裝配、噴漆、搬運(yùn)、焊接等工作。這里介紹STM32平臺(tái)多個(gè)關(guān)節(jié)機(jī)器人的仿真分析,其具體內(nèi)容包括關(guān)節(jié)機(jī)器人的數(shù)學(xué)表示、關(guān)節(jié)機(jī)械臂軟件建模、關(guān)節(jié)機(jī)械臂的仿真控制等。

1.?多個(gè)關(guān)節(jié)機(jī)器人的數(shù)學(xué)表示

機(jī)器人運(yùn)動(dòng)學(xué)作為理論力學(xué)的分支學(xué)科,運(yùn)用幾何學(xué)方法來(lái)研究物體的運(yùn)動(dòng),從幾何角度描述和研究物體的位置隨時(shí)間的變化規(guī)律。它主要研究物體的位置、速度和加速度之間的關(guān)系。

1)?正運(yùn)動(dòng)學(xué)

已知桿件的長(zhǎng)度等幾何參數(shù)和關(guān)節(jié)角度矢量,求機(jī)械臂末端執(zhí)行器的位置和姿態(tài),稱(chēng)為正運(yùn)動(dòng)學(xué)。兩連桿平面旋轉(zhuǎn)關(guān)節(jié)機(jī)械臂如圖6.19所示,圖中兩連桿平面旋轉(zhuǎn)關(guān)節(jié)變量主要通過(guò)連桿長(zhǎng)度L1和L2及關(guān)節(jié)角θ1和θ2等參數(shù)來(lái)定義。表示關(guān)節(jié)位置的變量θ1和θ2稱(chēng)為關(guān)節(jié)變量。對(duì)于旋轉(zhuǎn)關(guān)節(jié),關(guān)節(jié)變量通常用關(guān)節(jié)角度θ表示;而對(duì)于移動(dòng)關(guān)節(jié),關(guān)節(jié)變量通常用關(guān)節(jié)移動(dòng)距離d來(lái)表示。圖6.19兩連桿平面旋轉(zhuǎn)關(guān)節(jié)變量表示示意圖

定義矢量R和θ為表示機(jī)械臂末端的位置和關(guān)節(jié)變量,如式(6.8)所示。

其中x和y是機(jī)械臂末端在xOy坐標(biāo)系中的坐標(biāo),θ1和θ2為兩個(gè)桿件的轉(zhuǎn)動(dòng)角度。

根據(jù)幾何學(xué)知識(shí)不難得出如式(6.9)所示關(guān)節(jié)變量間關(guān)系式:

式(6.9)可以采用矢量函數(shù)的形式表示,如式(6.10)所示:

2)逆運(yùn)動(dòng)學(xué)

已知桿件的長(zhǎng)度等幾何參數(shù)和機(jī)械臂末端執(zhí)行器的位置姿態(tài),研究達(dá)到給定的位置姿態(tài)所需的機(jī)械臂關(guān)節(jié)角度矢量的,稱(chēng)為逆運(yùn)動(dòng)學(xué)。

對(duì)于兩連桿平面旋轉(zhuǎn)關(guān)節(jié)機(jī)械臂,假定末端執(zhí)行器的位置B(x,y)已知。將其進(jìn)行簡(jiǎn)化,如圖6.20所示。圖6.20兩連桿平面旋轉(zhuǎn)關(guān)節(jié)機(jī)械臂簡(jiǎn)圖

根據(jù)幾何關(guān)系可知,在△AOB中,利用余弦定理可求得α,如式(6.11)所示。

從而可得:θ2?=π-α。

3)機(jī)器人動(dòng)力學(xué)

作為物體的力和物體運(yùn)動(dòng)之間關(guān)系的力學(xué)分支,機(jī)器人動(dòng)力學(xué)是研究如何根據(jù)物體質(zhì)量、物體運(yùn)動(dòng)狀態(tài)以及物體當(dāng)前受力情況,根據(jù)物體運(yùn)動(dòng)與驅(qū)動(dòng)力之間關(guān)系的規(guī)律,實(shí)現(xiàn)在其關(guān)節(jié)軸上施以驅(qū)動(dòng)力來(lái)實(shí)現(xiàn)相應(yīng)運(yùn)動(dòng)效果。與機(jī)器人運(yùn)動(dòng)學(xué)問(wèn)題類(lèi)似,機(jī)器人動(dòng)力學(xué)問(wèn)題也分為正動(dòng)力學(xué)問(wèn)題和逆動(dòng)力學(xué)問(wèn)題兩類(lèi):已知作用在機(jī)器人上的驅(qū)動(dòng)力隨時(shí)間變化的規(guī)律,求機(jī)器人的位置、速度和加速度軌跡等運(yùn)動(dòng)規(guī)律,稱(chēng)為機(jī)器人正動(dòng)力學(xué)問(wèn)題;已知機(jī)器人隨時(shí)間的運(yùn)動(dòng)規(guī)律,求期望的驅(qū)動(dòng)力隨時(shí)間變化的規(guī)律,稱(chēng)為機(jī)器人逆動(dòng)力學(xué)問(wèn)題。正動(dòng)力學(xué)問(wèn)題和逆動(dòng)力學(xué)問(wèn)題的研究對(duì)于機(jī)器人的仿真與控制都是非常重要的。

2.?關(guān)節(jié)機(jī)械臂的建模

利用RoboticsToolbox創(chuàng)建機(jī)械臂模型需調(diào)用程序6.1關(guān)節(jié)機(jī)械臂建模調(diào)用語(yǔ)句命令集。首先由公式R=f?(θ)可知,由機(jī)械臂關(guān)節(jié)變量θ求機(jī)械臂末端位置R,建立二關(guān)節(jié)機(jī)械臂模型;其次,要構(gòu)建各個(gè)關(guān)節(jié)位置數(shù)學(xué)表示,通過(guò)設(shè)定D-H參數(shù)、關(guān)節(jié)類(lèi)型(移動(dòng)關(guān)節(jié)和旋轉(zhuǎn)關(guān)節(jié))、機(jī)械臂長(zhǎng)度和質(zhì)量、關(guān)節(jié)質(zhì)量、驅(qū)動(dòng)舵機(jī)的轉(zhuǎn)動(dòng)慣量等參數(shù),構(gòu)建二關(guān)節(jié)機(jī)械臂的操作對(duì)象。最后將各個(gè)關(guān)節(jié)以合適的連接方式加以組合,即構(gòu)建機(jī)械臂對(duì)象的核心在于順利構(gòu)建各個(gè)關(guān)節(jié)并實(shí)現(xiàn)關(guān)節(jié)之間的正確連接。

如程序6.1所示為MatlabR2014a軟件的機(jī)器人工具箱RoboticsToolboxV9.10中關(guān)節(jié)機(jī)械臂建模調(diào)用語(yǔ)句命令集的說(shuō)明和特定函數(shù)的調(diào)用格式。

3.關(guān)節(jié)機(jī)械臂的仿真控制

1)?關(guān)節(jié)機(jī)械臂仿真環(huán)境

關(guān)節(jié)機(jī)械臂模型構(gòu)建較多,這里采用Matlab軟件平臺(tái)進(jìn)行講解,介紹機(jī)器人、自動(dòng)控制系統(tǒng)領(lǐng)域的機(jī)械臂建模步驟,給出設(shè)置一般模型的過(guò)程。

一般線性系統(tǒng)的傳遞函數(shù)模型表示如式(6.18)所示。

將系統(tǒng)的分子和分母多項(xiàng)式的系數(shù)按降冪的方式以向量的形式輸入給兩個(gè)變量num和den,就可以將傳遞函數(shù)模型輸入到Matlab環(huán)境中,采用Matlab軟件控制系統(tǒng)工具箱,定義tf()函數(shù),由傳遞函數(shù)分子分母給出的變量構(gòu)造出單個(gè)傳遞函數(shù)對(duì)象。調(diào)用該函數(shù)的格式如式(6.19)所示

針對(duì)關(guān)節(jié)機(jī)械臂建模設(shè)計(jì),可以選擇Matlab軟件機(jī)器人工具箱,其中RoboticsToolBox在建模、軌跡規(guī)劃、控制及可視化等方面都非常實(shí)用,能提供一些如運(yùn)動(dòng)學(xué)、動(dòng)力學(xué)和生成機(jī)器人軌跡等功能,通過(guò)機(jī)器人工具箱的仿真分析可為機(jī)器人的設(shè)計(jì)和控制提供有效數(shù)據(jù)參考,以便使用者根據(jù)實(shí)際的機(jī)器人參數(shù)進(jìn)行對(duì)應(yīng)更改。下面介紹在MatlabR2014a中安裝機(jī)器人工具箱的具體方法:

(1)?下載V9.10版的機(jī)器人工具箱壓縮文件robot-9.10.zip,包含對(duì)工具箱中各函數(shù)使用進(jìn)行介紹的文檔說(shuō)明;

(2)?把robot-9.10.zip壓縮文件解壓,得到rvctools文件夾,將該文件夾復(fù)制到Matlab安裝目錄下的toolbox子目錄下;

(3)?在MatlabR2014a主界面下點(diǎn)擊“設(shè)置路徑”;

(4)?點(diǎn)擊“添加并包含子文件夾”;

(5)?找到toolbox子目錄下的rvctools子文件夾并選擇它;

(6)?在MatlabR2014a主界面的命令窗口鍵入“startup_rvc”安裝工具箱;

(7)?在命令窗口鍵入“ver”命令,則Matlab的所有工具箱都會(huì)被列出,可查看到RoboticsToolboxV9.10.0已在所列出的工具箱中。

至此,機(jī)器人工具箱安裝完成。

如圖6.21所示為機(jī)器人關(guān)節(jié)臂建模流程圖。

從圖6.21所示的建模流程圖中可以看出,程序開(kāi)始調(diào)用MatlabR2016a中的RoboticsToolbox工具箱中的Link函數(shù),從而建立機(jī)器人關(guān)節(jié)機(jī)械臂的控制對(duì)象,設(shè)置位姿,最后輸出三維圖像。圖6.21建模流程圖

2)?關(guān)節(jié)機(jī)械臂控制程序

程序6.2為關(guān)節(jié)機(jī)械臂的雙連桿組合控制程序代碼。兩個(gè)關(guān)節(jié)機(jī)械臂模型構(gòu)建使用了最新版本的Seriallink函數(shù)對(duì)機(jī)械臂bot進(jìn)行了定義,用bot.plot命令顯示出機(jī)械臂的三維圖形,用bot.teach命令調(diào)出機(jī)械臂的控制窗口,顯示出關(guān)節(jié)變量滑動(dòng)條,如圖6.22所示。通過(guò)滑動(dòng)窗口中的滑塊,實(shí)現(xiàn)對(duì)機(jī)械臂的運(yùn)動(dòng)控制。圖6.22兩自由度及多自由度關(guān)節(jié)建模示意圖

4.?關(guān)節(jié)模型仿真控制實(shí)現(xiàn)

機(jī)器人的連桿可看成是剛性的,可從剛體入手來(lái)描述它的位姿。剛體參考點(diǎn)的位置和剛體的姿態(tài)統(tǒng)稱(chēng)為剛體的位姿,其描述方法較多,有多元的齊次矩陣變換法、矢量法、旋量法和四元數(shù)法等。Matlab軟件RoboticsToolBox內(nèi)含多達(dá)數(shù)百個(gè)關(guān)于機(jī)械臂的函數(shù),可以充分滿足用戶對(duì)機(jī)械臂的計(jì)算要求,且工具箱提供Simulink模塊,實(shí)現(xiàn)用戶在Simulink環(huán)境下對(duì)工具箱的使用。

其中含有Puma560和Stanford機(jī)器人的仿真實(shí)例,Puma560機(jī)器人具有六自由度,在軟件命令行窗口輸入mdl_puma560,在文件mdl_puma560.m中可查看到Puma560機(jī)械臂的建立過(guò)程,且在文件中定義了相應(yīng)四個(gè)典型的位姿,其參數(shù)分別設(shè)置如下:

通過(guò)使用Plot函數(shù)可繪制機(jī)械臂的相應(yīng)位姿圖,如圖6.23所示為Puma560的機(jī)械臂仿真界面。圖6.23

Puma560的機(jī)械臂仿真界面

圖6.24為Matlab機(jī)械臂四個(gè)關(guān)節(jié)位置角度仿真程序運(yùn)行結(jié)果圖,其中,當(dāng)改變機(jī)械臂關(guān)節(jié)的任意控制角度后,在Matlab上可以根據(jù)所創(chuàng)建的可跟隨移動(dòng)機(jī)械臂模型進(jìn)行一些控制性能分析。如圖6.24(a)所示為Matlab機(jī)械臂仿真模型程序運(yùn)行生成的控制參數(shù)矩陣數(shù)據(jù),圖6.24(b)所示為四個(gè)不同轉(zhuǎn)動(dòng)關(guān)節(jié)角度位置值隨著控制時(shí)間的變化曲線,它們對(duì)應(yīng)生成可調(diào)控的機(jī)械臂末端軌跡。圖6.24

Matlab機(jī)械臂角速度仿真程序運(yùn)行結(jié)果圖

調(diào)用機(jī)器人聯(lián)動(dòng)關(guān)節(jié)模型,運(yùn)行程序6.3的關(guān)節(jié)機(jī)械臂的雙連桿組合控制程序代碼,先用toolbox中的Forwarddynamic進(jìn)行編譯,再用Animation進(jìn)行編譯,實(shí)現(xiàn)機(jī)械臂聯(lián)動(dòng)模型仿真控制。

最后,采用總體逼近控制器實(shí)現(xiàn)圖6.25的關(guān)節(jié)機(jī)械臂模型末端軌跡跟蹤控制的仿真,控制系統(tǒng)仿真曲線如圖6.25所示。圖6.25關(guān)節(jié)首端與末端位置跟蹤曲線

6.4.2多自由度關(guān)節(jié)機(jī)器人的書(shū)寫(xiě)實(shí)戰(zhàn)

一般認(rèn)為由單個(gè)或多個(gè)關(guān)節(jié)機(jī)械臂組合控制實(shí)現(xiàn)的多關(guān)節(jié)控制機(jī)器人,其機(jī)械臂的舵機(jī)組合控制策略設(shè)計(jì)方案流程圖如圖6.26所示,三種關(guān)節(jié)機(jī)器人末端控制數(shù)據(jù)方式具體內(nèi)容是:

方案一,采用有線數(shù)據(jù)線連接控制器與末端書(shū)寫(xiě)執(zhí)行器,控制器內(nèi)部發(fā)送輸出字符書(shū)寫(xiě)指令集,從而實(shí)現(xiàn)漢字的書(shū)寫(xiě);

方案二,采用無(wú)線通信方式實(shí)現(xiàn)機(jī)器人控制器與末端書(shū)寫(xiě)執(zhí)行器的命令傳達(dá),數(shù)據(jù)手套實(shí)時(shí)將數(shù)據(jù)命令輸入到控制器內(nèi)部,從而通過(guò)末端執(zhí)行器實(shí)時(shí)實(shí)現(xiàn)漢字的書(shū)寫(xiě);

方案三,可以采用有線或無(wú)線通信方式實(shí)現(xiàn)機(jī)器人上位機(jī)與末端書(shū)寫(xiě)執(zhí)行器的命令傳達(dá),而上位機(jī)的字體庫(kù)可以編輯大量漢字?jǐn)?shù)據(jù),從而通過(guò)末端執(zhí)行器實(shí)時(shí)實(shí)現(xiàn)漢字的書(shū)寫(xiě)。

圖6.26多關(guān)節(jié)舵機(jī)自主組合控制策略設(shè)計(jì)方案流程圖

1.?六自由度

這里給出的多關(guān)節(jié)機(jī)械臂末端控制實(shí)戰(zhàn)實(shí)例中,由六自由度舵機(jī)組合控制書(shū)寫(xiě)機(jī)器人書(shū)寫(xiě)模擬了復(fù)雜人類(lèi)書(shū)寫(xiě)漢字的控制行為,即末端筆尖運(yùn)行位置軌跡問(wèn)題;在完成調(diào)試信號(hào)調(diào)理、采樣速率、微定位平臺(tái)響應(yīng)速度等方面參數(shù)指標(biāo)后,多舵機(jī)組合控制策略的書(shū)寫(xiě)機(jī)器人設(shè)計(jì)在建模仿真的基礎(chǔ)上進(jìn)行實(shí)物關(guān)節(jié)舵機(jī)的組合,其中書(shū)寫(xiě)機(jī)器人設(shè)計(jì)的六個(gè)自由度軟筆與地面接觸產(chǎn)生摩擦力,使舵機(jī)轉(zhuǎn)向,這相當(dāng)于給筆尖一個(gè)向心力,在方向量不變時(shí),筆尖就能夠克服重力,考慮舵機(jī)控制脈寬不變,書(shū)寫(xiě)機(jī)器人能夠?qū)崿F(xiàn)利用摩擦力進(jìn)行筆尖勻速往復(fù)運(yùn)動(dòng)。

筆尖末端位置的運(yùn)動(dòng)學(xué)模型分析如圖6.27所示,模型運(yùn)動(dòng)學(xué)反解算的總體過(guò)程為:已知末端軟筆的目標(biāo)位姿—→求出對(duì)應(yīng)的六根繩子的長(zhǎng)度—→與初始長(zhǎng)度進(jìn)行比較,求出各繩的伸長(zhǎng)或縮短量—→解算各個(gè)伺服舵機(jī)應(yīng)轉(zhuǎn)過(guò)的角度,便可以通過(guò)上位機(jī)發(fā)送相應(yīng)的指令,使舵機(jī)轉(zhuǎn)動(dòng),從而控制軟筆運(yùn)動(dòng)。圖6.27六自由度的書(shū)法機(jī)器人運(yùn)動(dòng)模型

由P1、P2的坐標(biāo)以及Q1~Q6的坐標(biāo)即可計(jì)算得到6根繩子的長(zhǎng)度,如式(6.21)所示。

已知坐標(biāo)系中設(shè)置了軟筆控制點(diǎn)P1、P2和常量P3

的相對(duì)位置值,六自由度關(guān)節(jié)的固定支撐點(diǎn)為Q1~Q6,通過(guò)P1、P2坐標(biāo)值和

Q1~Q6坐標(biāo)值能計(jì)算出6根繩子的長(zhǎng)度,將各繩的長(zhǎng)度設(shè)為L(zhǎng)1=L2=L3=LU,L4=L5=L6=LD,將其代入如式(6.22)所示的等式進(jìn)行計(jì)算,可得

式(6.23)中,R為繞線輪的半徑,θ0是舵機(jī)的標(biāo)定位置初始角度(即150°),則各伺服舵機(jī)相對(duì)于初始位置的轉(zhuǎn)角即可計(jì)算得出。實(shí)際制作的軟筆書(shū)法機(jī)器人樣機(jī)上面三根繩與下面三根繩伸長(zhǎng)時(shí)舵機(jī)轉(zhuǎn)動(dòng)的方向是相反的,樣機(jī)結(jié)構(gòu)參數(shù)是:上三繩初始繩長(zhǎng)LU=209.045?mm,下三繩初始繩長(zhǎng)LD?=?186.671?mm,繞線輪半徑R?=?37.5?mm。兩控制點(diǎn)間距離:=?|P1P2|=180mm,6個(gè)支撐點(diǎn)坐標(biāo)(單位為mm)為:Q1(7.5,105.5,-174.7);Q2(-155.08,105.5,80.87);Q3(147.58,105.5,93.68);Q4(-7.5,105.5,-174.74);Q5(-147.58,105.5,93.68);Q6(155.08,105.5,80.87)。

最后設(shè)計(jì)出的六自由度書(shū)寫(xiě)機(jī)器人樣機(jī)的實(shí)物如圖6.28所示。

圖6.28六自由度書(shū)法機(jī)器人實(shí)物效果圖

2.二自由度

這里介紹的二自由度多舵機(jī)組合控制策略的書(shū)寫(xiě)機(jī)器人設(shè)計(jì)是在建模仿真分析的基礎(chǔ)上,進(jìn)行實(shí)物關(guān)節(jié)舵機(jī)組合控制。如圖6.29所示為書(shū)寫(xiě)機(jī)器人的執(zhí)行機(jī)構(gòu),主要由控制器、無(wú)線模塊和伺服舵機(jī)構(gòu)成,其中軸臂舵機(jī)組合的二自由度硬筆書(shū)寫(xiě)機(jī)器人實(shí)物包括只有抬起和放下兩個(gè)自由度控制動(dòng)作的書(shū)寫(xiě)末端、控制器和多個(gè)伺服舵機(jī)串聯(lián),如圖6.29所示。圖6.29二自由度書(shū)寫(xiě)機(jī)器人實(shí)物效果圖

6.4.3多關(guān)節(jié)機(jī)器人的仿生實(shí)戰(zhàn)

一般認(rèn)為,作為自動(dòng)化機(jī)器,能夠具備與人或生物相似的智能能力,如感知能力、規(guī)劃能力、動(dòng)作能力和協(xié)同能力等的,可以稱(chēng)之為仿生機(jī)器人。本節(jié)介紹仿生機(jī)器人實(shí)戰(zhàn)技術(shù),包括四足機(jī)器人的腿部結(jié)構(gòu)及步態(tài)設(shè)計(jì)分析、仿生動(dòng)作編寫(xiě)設(shè)置,最后完成四足機(jī)器人跟蹤光源行走起來(lái)的設(shè)計(jì),以及四足仿生貓形機(jī)器人的連貫動(dòng)作的設(shè)計(jì);還有仿生蛇形機(jī)器人爬行設(shè)計(jì)。

1.四足機(jī)器人的構(gòu)型

本小節(jié)介紹的四足機(jī)器人的構(gòu)型設(shè)計(jì)是采用實(shí)驗(yàn)室機(jī)器人套件中的STM32平臺(tái)控制器開(kāi)展的實(shí)踐工作。首先進(jìn)入STM32平臺(tái)控制器控制軟件工程設(shè)置界面,新建一個(gè)工程文件;接著在這個(gè)界面中的下方有一個(gè)構(gòu)型選項(xiàng)框,其中有多個(gè)選項(xiàng),已經(jīng)預(yù)定義構(gòu)型,如圖6.30所示。其中圖6.30(a)為“六足機(jī)器人”的構(gòu)型,圖6.30(b)為“多足機(jī)器人”的構(gòu)型,圖6.30(c)為“蛇形機(jī)器人”的構(gòu)型,圖6.30(d)為“四足機(jī)器人”的構(gòu)型。所有可以選擇的預(yù)定義構(gòu)型都帶有三維虛擬場(chǎng)景,并已經(jīng)對(duì)舵機(jī)進(jìn)行了編號(hào),這樣在使用時(shí)就會(huì)省去大量的準(zhǔn)備工作。

這里我們直接用系統(tǒng)控制軟件提供的四足機(jī)器人構(gòu)型進(jìn)行編程,構(gòu)型選擇“四足機(jī)器人”,如圖6.30(d)所示。最后點(diǎn)擊“下一步”進(jìn)入舵機(jī)參數(shù)設(shè)置窗口,設(shè)置舵機(jī)數(shù)量以及舵機(jī)的控制構(gòu)型。在舵機(jī)設(shè)置窗口中,通過(guò)修改“ID”欄內(nèi)的舵機(jī)ID,就可以改變舵機(jī)ID號(hào);參照窗口右邊圖示,設(shè)置ID與機(jī)器人關(guān)節(jié)之間的對(duì)應(yīng)關(guān)系。需要注意的是,如果按照平臺(tái)控制軟件提供的預(yù)定義構(gòu)型編程,搭建機(jī)器人時(shí)就必須嚴(yán)格按照?qǐng)D6.30所示的不同構(gòu)型的舵機(jī)設(shè)置界面設(shè)置的舵機(jī)ID和機(jī)器人關(guān)節(jié)對(duì)應(yīng)關(guān)系搭建,否則機(jī)器人無(wú)法正常執(zhí)行編寫(xiě)的程序。圖6.30不同構(gòu)型的舵機(jī)設(shè)置界面圖6.30不同構(gòu)型的舵機(jī)設(shè)置界面圖6.30不同構(gòu)型的舵機(jī)設(shè)置界面圖6.30不同構(gòu)型的舵機(jī)設(shè)置界面

2.讓四足機(jī)器人跟蹤光源的步態(tài)設(shè)計(jì)

在前面的任務(wù)里,我們完成了四足機(jī)器人行走步態(tài)的設(shè)計(jì),向機(jī)器人控制器燒寫(xiě)如圖6.31所示的邏輯程序代碼,可以完成機(jī)器人頭部跟蹤光源的實(shí)驗(yàn)。圖6.31程序邏輯設(shè)計(jì)流程圖

四足機(jī)器人步態(tài)設(shè)計(jì)的基本步驟如圖6.32所示。圖6.32(a)為初始步態(tài)起步動(dòng)作,圖6.32(b)為模仿烏龜形動(dòng)物向后劃水排水動(dòng)作的步態(tài)一,圖6.32(c)為模仿烏龜形動(dòng)物的右側(cè)劃水排水動(dòng)作的步態(tài)二,圖6.32(d)為模仿烏龜形動(dòng)物的右側(cè)前移劃水排水動(dòng)作的步態(tài)三、圖6.32(e)所示為模仿烏龜形動(dòng)物的右側(cè)后移劃水排水動(dòng)作的步態(tài)四。圖6.32步態(tài)設(shè)計(jì)圖6.32步態(tài)設(shè)計(jì)圖6.32步態(tài)設(shè)計(jì)圖6.32步態(tài)設(shè)計(jì)圖6.32步態(tài)設(shè)計(jì)

將如圖6.33所示的四足機(jī)器人的步態(tài)控制程序進(jìn)行編譯、下載程序文件到四足機(jī)器人的控制器里。然后將四足機(jī)器人放置到場(chǎng)地上,設(shè)置光源,查看機(jī)器人能不能發(fā)現(xiàn)并走近光源。然后移動(dòng)光源,查看機(jī)器人能不能跟蹤光源。我們可以根據(jù)機(jī)器人的表現(xiàn),修改光強(qiáng)傳感器的閾值,改進(jìn)機(jī)器人的步態(tài),實(shí)現(xiàn)機(jī)器人完美地走起來(lái)。圖6.33四足機(jī)器人的步態(tài)控制程序設(shè)計(jì)流程圖

3.?貓形機(jī)器人的連貫運(yùn)動(dòng)

對(duì)四足仿生貓形機(jī)器人的步態(tài)進(jìn)行分析可以發(fā)現(xiàn),主要是設(shè)計(jì)多個(gè)動(dòng)作的連接而形成連貫的運(yùn)動(dòng),其中包括貓形機(jī)器人的半蹲動(dòng)作,這個(gè)動(dòng)作是整個(gè)動(dòng)作的起始動(dòng)作,同時(shí)也是一個(gè)掌握平衡的動(dòng)作。貓形機(jī)器人在進(jìn)行所有動(dòng)作前都會(huì)先還原為半蹲動(dòng)作,達(dá)到平衡后再進(jìn)行以后的動(dòng)作,圖6.34所示是貓形機(jī)器人初始站立動(dòng)作實(shí)物圖。圖6.34貓形機(jī)器人初始站立動(dòng)作實(shí)物圖

貓形機(jī)器人共有24個(gè)舵機(jī),ID是每個(gè)舵機(jī)的編號(hào)。初始站立結(jié)果是每個(gè)動(dòng)作的基礎(chǔ),整體速度都設(shè)為300。初始動(dòng)作數(shù)據(jù)如表6.4所示。

貓?zhí)煨院闷?,遇到其他生物總?huì)試探、捕捉。貓形機(jī)器人的前進(jìn)捕捉動(dòng)作就是根據(jù)此設(shè)計(jì)出來(lái)的。貓形機(jī)器人整體成匍匐姿勢(shì),以左前爪的抬起、落下來(lái)模仿捕捉動(dòng)作,如圖6.35所示。圖6.35前進(jìn)捕捉動(dòng)作實(shí)物圖

貓形機(jī)器人的前進(jìn)捕捉動(dòng)作中,整體舵機(jī)速度都設(shè)置為350;貓形機(jī)器人前進(jìn)捕捉動(dòng)作的24個(gè)舵機(jī)數(shù)據(jù)角度實(shí)驗(yàn)參數(shù)設(shè)置如表6.5所示。

4.?蛇形機(jī)器人的連貫運(yùn)動(dòng)

在自然界中,蛇類(lèi)有蜿蜒運(yùn)動(dòng)、伸縮運(yùn)動(dòng)、直線運(yùn)動(dòng)和側(cè)向運(yùn)動(dòng)等四種運(yùn)動(dòng)方式,其中蜿蜒運(yùn)動(dòng)是最常見(jiàn)也是效率最高的運(yùn)動(dòng)方式。本節(jié)主要介紹蛇形機(jī)器人運(yùn)動(dòng)的動(dòng)作規(guī)劃和編程實(shí)現(xiàn)。仿生蛇形機(jī)器人的系統(tǒng)舵機(jī)個(gè)數(shù)為16個(gè),如圖6.36所示,舵機(jī)的ID號(hào)為1~16,全部采用舵機(jī)模式;將各個(gè)舵機(jī)相連,模擬蛇形機(jī)器人的各個(gè)關(guān)節(jié),達(dá)到仿生運(yùn)動(dòng)的效果。

1)?爬行運(yùn)動(dòng)

蛇形機(jī)器人的爬行動(dòng)作屬于蛇類(lèi)的蜿蜒運(yùn)動(dòng),爬行運(yùn)動(dòng)調(diào)試完成的十四種動(dòng)作如圖6.36所示。圖6.36(a)為“左側(cè)弓形”動(dòng)作狀態(tài)1,圖6.36(b)為“頭部伸直”動(dòng)作狀態(tài)2,圖6.36(c)為“頸部反向運(yùn)動(dòng)”動(dòng)作狀態(tài)3,圖6.36(d)為“身體伸直”動(dòng)作狀態(tài)4,圖6.36(e)為“腰部微微彎曲”動(dòng)作狀態(tài)5,圖6.36(f)為“腰部伸直”動(dòng)作狀態(tài)6,圖6.36(g)為“尾部彎曲”動(dòng)作狀態(tài)7,圖6.36(h)為“右側(cè)弓形”動(dòng)作狀態(tài)8,圖6.36(i)為“頭部彎曲”動(dòng)作狀態(tài)9,圖6.36(j)為“頭部前伸”動(dòng)作狀態(tài)10,圖6.36(k)為“腰部彎曲”動(dòng)作狀態(tài)11,圖6.36(l)為“腰部伸直”動(dòng)作狀態(tài)12,圖6.36(m)為“尾部伸直”動(dòng)作狀態(tài)13,圖6.36(n)為“尾部彎曲”動(dòng)作狀態(tài)14。圖6.36蛇形機(jī)器人爬行動(dòng)作圖6.36蛇形機(jī)器人爬行動(dòng)作圖6.36蛇形機(jī)器人爬行動(dòng)作

蛇形機(jī)器人的爬行動(dòng)作中,為保證機(jī)器人整體的協(xié)調(diào)性,16個(gè)舵機(jī)速度設(shè)定在180或200;16個(gè)舵機(jī)數(shù)據(jù)角度參數(shù)設(shè)置如表6.6所示。

2)?翻滾動(dòng)作

如圖6.37所示為蛇形機(jī)器人翻滾動(dòng)作的四個(gè)狀態(tài)。翻滾動(dòng)作的實(shí)現(xiàn)要使蛇形機(jī)器人有一定的彎曲,然后再固定兩個(gè)點(diǎn),調(diào)試其余的舵機(jī)。翻滾動(dòng)作需要的速度設(shè)定為180~200,每個(gè)動(dòng)作完成后延時(shí)2?s,使其可以360°地翻滾。圖6.37蛇形機(jī)器人翻滾動(dòng)作

蛇形機(jī)器人翻滾動(dòng)作的各個(gè)舵機(jī)速度及角度設(shè)置如表6.7所示。

3)?盤(pán)起、攻擊動(dòng)作

蛇形機(jī)器人盤(pán)起、攻擊的動(dòng)作是比較綜合的一個(gè)動(dòng)作,因?yàn)椴煌男枰?,每個(gè)動(dòng)作中每個(gè)舵機(jī)的速度要求也不一樣,仿生蛇形機(jī)器人完成的三個(gè)動(dòng)作情況如圖6.38所示。圖6.38盤(pán)起、攻擊動(dòng)作

如表6.8所示為蛇形機(jī)器人做盤(pán)起、攻擊各個(gè)動(dòng)作時(shí)每個(gè)舵機(jī)的速度和角度數(shù)據(jù)。蛇形機(jī)器人慢慢盤(pán)起的動(dòng)作的速度設(shè)定為

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論