機器人絕å°æ˜¯ç•¶å‰çš„一個熱門話題之一。從實驗室機器人到å„種創(chuà ng)新玩具機器人,越來越多的技術愛好者從關注到實è¸ï¼Œç´›ç´›æŠ•èº«æ©Ÿå™¨äººé–‹ç™¼(fÄ)的懷抱。
工欲善其事,必先利其器。
MATLAB/Simulink算法開發(fÄ)平臺作為汽車ã€è»å·¥ç‰è¡Œæ¥(yè)進行控制算法è¨è¨ˆçš„必備工具,基于Simulink模型的建模ã€ä»¿çœŸã€æ¸¬è©¦é©—è‰ä»¥åŠä»£ç¢¼ç”Ÿæˆçš„è¨è¨ˆç†å¿µä¹Ÿæ£åœ¨æ›¿ä»£å‚³çµ±(tÇ’ng)的手寫C代碼的開發(fÄ)æµç¨‹ï¼Œæˆç‚ºç®—法開發(fÄ)的主æµèˆ‡æœªä¾†çš„趨勢。
這å°äºŽé–‹ç™¼(fÄ)機器人æ„味著什么呢?
ä½ ä¸åƒ…å¯ä»¥æ“ºè„«ç¹å¾©çš„C代碼編程,還å¯ä»¥å€ŸåŠ©MATLAB強大的工具箱系列,通éŽä»¿çœŸä¾†å¹«åŠ©ä½ 測試算法ã€å„ª(yÅu)化åƒæ•¸(shù)ç‰ç‰ã€‚如果用戶購買了代碼生æˆå·¥å…·ç®±ï¼Œé‚„å¯ä»¥æå–所生æˆçš„嵌入å¼C/C++算法函數(shù),集æˆåˆ°è‡ªå·±å¤–éƒ¨çš„å·¥ç¨‹é …ç›®ä¸åŽ»ï¼Œé€™ä¹Ÿæ˜¯å•†æ¥(yè)產(chÇŽn)å“開發(fÄ)的主æµé¸æ“‡ã€‚
MATLAB/SimulinkSupportPackage
MATLAB/SimulinkSupportPackage為一系列所支æŒçš„æ¿å¡æ供了基本的驅動模塊,åªéœ€è¦åœ¨è»Ÿä»¶ç•Œé¢ä¸Šé€²è¡Œç°¡å–®çš„é…置,就å¯ä»¥å°‡å¯¦ç¾(xià n)框圖å¼çš„算法模型一éµä¸‹è¼‰åˆ°ç¡¬ä»¶æ¿å¡ä¸ŠåŽ»ï¼Œæœ‰åŠ©äºŽæˆ‘們快速實ç¾(xià n)早期創(chuà ng)æ„,縮çŸåŽŸåž‹é–‹ç™¼(fÄ)周期。
通éŽå®ƒï¼Œæˆ‘們å¯ä»¥å¾ˆå®¹æ˜“實ç¾(xià n)與這些硬件通訊,讀å–數(shù)æ“š(jù)到MATLABç’°(huán)境進行分æžå’Œè™•ç†ï¼Œè¼•æ¾ä¸‹è¼‰Simulink這種框圖å¼çš„算法來實ç¾(xià n)å„種有創(chuà ng)æ„的應用。
從模型到實ç¾(xià n)
使用MATLAB/SimulinkSupportPackage相當于鋪平了從Simulink到硬件實ç¾(xià n)的路,使得ä¸æ“…長寫C代碼的人å¯ä»¥å¾¹åº•æ“ºè„«ä»£ç¢¼å¯¦ç¾(xià n)的困擾,借助Simulink平臺也能輕易的開發(fÄ)出更多有趣的應用來。
案例介紹
使用光æ•é›»é˜»æŽ§åˆ¶LED燈
硬件:ArduinoMEGA2560
Step1:硬件連線
利用光æ•é›»é˜»èˆ‡å›ºå®šé›»é˜»ä¸²è¯(lián)å½¢æˆåˆ†å£“電路,并將分壓電壓讀入Arduino,然åŽç”¨é€™å€‹å€¼ä¾†è¼¸å‡ºæŽ§åˆ¶ç™¼(fÄ)光二極管的明暗。將分壓電壓值讀入Arduinoçš„A1引腳;將發(fÄ)光二極管的æ£æ¥µé€£æŽ¥PWM的第二個引腳,如下圖所示。
硬件連接圖
Step2:軟件準備
通éŽMATLAB主界é¢ä¸Šçš„Add-Onsçš„GetHardwareSupportPackageså‘導,é¸æ“‡æ‰€éœ€è¦å®‰è£çš„支æŒåŒ…。
安è£åŒ…下載入å£
é¸æ“‡Arduinoï¼Œæ ¹æ“š(jù)å‘å°Žæ示下載或安è£æ”¯æŒåŒ…。
下載安è£å‘å°Ž
安è£å®ŒæˆåŽï¼Œæ‰“é–‹SimulinkLibraryBrowserä¸çš„SimulinkSupportPackageforArduinoHardware庫,如下圖。我們å¯ä»¥çœ‹åˆ°ç‚ºArduinoæ供的一系列驅動模塊,從模塊的示æ„圖以åŠç«¯å£çš„符號,我們å¯ä»¥å¤§æ¦‚推測它的作用:從å„種類型的æ¿å¡æŽ¥å£è®€å–或輸出信號。
å¦å¤–從左å´æ¨¹ç‹€åœ–å¯ä»¥çœ‹åˆ°ï¼Œé‚„æ供了EthernetShield與WifiShield的驅動模塊。
分æ€æ©Ÿå™¨äººArduino支æŒåº«
Step3:建模
Simulink建??梢院唵蚊枋鰹槟K的拖拽與連線的éŽç¨‹ã€‚
物æµåˆ†æ€æ©Ÿå™¨äººipo我們需è¦å¾žA1端å£è®€å–分壓信號,所以從庫里拖入一個AnalogInput模塊,并雙擊è¨ç½®ç«¯å£è™Ÿç‚º1,è¨ç½®é‡‡æ¨£æ™‚間為0.01S。å¦å¤–還需è¦è¼¸å‡ºåˆ°PWM的第二個引腳,所以拖入一個PWM模塊,并雙擊è¨ç½®ç«¯å£è™Ÿç‚º2。
為了簡化整個下載éŽç¨‹ï¼Œæˆ‘們這里å°ä¿¡è™Ÿä¸åšä»»ä½•ç®—法處ç†ï¼Œç›´æŽ¥å°‡å…©å€‹æ¨¡å¡Šé€£æŽ¥èµ·ä¾†ï¼Œå¦‚下圖。這也就æ„味著LED的亮度與光æ•é›»é˜»ç‹€æ…‹(tà i)直接相關。
模型截圖
Step4:編è¯ä¸‹è¼‰
國產(chÇŽn)分æ€æ©Ÿå™¨äººæŽ’行榜SimulinkSupportPackageforArduinoHardware支æŒå¹¾ä¹Žæ‰€æœ‰çš„Arduino型號。在點擊紅色方框的按鈕編è¯ä¸‹è¼‰ä¹‹å‰ï¼Œéœ€è¦é€šéŽé…ç½®é é¢ä¾†æŒ‡å®šç•¶å‰æ‰€ä½¿ç”¨çš„Arduinoæ¿å¡é¡žåž‹ã€‚
è¨ç½®Arduinoæ¿å¡
確ä¿Arduino與電腦相連,點擊上圖模型截圖ä¸ç´…色方框的編è¯æŒ‰éˆ•ï¼Œæ¡†åœ–將會自動生æˆC/C++代碼,并åŽè‡ºè‡ªå‹•èª¿ç”¨ArduinoIDE進行編è¯ä¸‹è¼‰åˆ°Arduinoæ¿å¡ä¸ŠåŽ»ã€‚æ¤æ™‚ï¼Œä½ ç”¨æ‰‹æ‚ä½å…‰æ•é›»é˜»ï¼Œä¾¿æœƒçœ‹åˆ°LED燈亮度的變化。
Step5:在線調試
å°äºŽArduinoMEGA2560ç‰åž‹è™Ÿï¼Œé‚„支æŒåœ¨ç·šèª¿è©¦ã€‚在é…ç½®é é¢ï¼Œé™¤äº†é¸æ“‡åž‹è™Ÿå¤–,如下圖è¨ç½®ç‚ºâ€œExternalmodel"。
è¨ç½®åœ¨ç·šèª¿è©¦é‹è¡Œ
分æ€æ©Ÿå™¨äººæ‡‰ç”¨çš„ç¾(xià n)ç‹€é»žæ“Šç¶ è‰²æŒ‰éˆ•é–‹å§‹ä»¿çœŸã€‚
æ¤æ™‚,框圖åŒæ¨£è¢«ç”Ÿæˆä»£ç¢¼å¹¶ç·¨è¯ä¸‹è¼‰åˆ°Arduino上é‹è¡Œï¼ŒåŒæ™‚Simulink模型é‹è¡Œï¼Œé›™æ“Šæ‰“開示波器Scope模塊實時看到當å‰æ‰€è®€å–的傳感器信號。這個數(shù)æ“š(jù)也å¯ä»¥ä¿å˜ä¸‹è¼‰ï¼ŒåšåŽæœŸå‚³æ„Ÿå™¨æ¨™å®šèˆ‡åˆ†æžã€‚
生產(chÇŽn)分æ€æ©Ÿå™¨äººä¼æ¥(yè)信號波形
傳感器標定,也就是經(jÄ«ng)常都需è¦å°‡åŽŸå§‹å€¼é€²è¡Œç·šæ€§æˆ–éžç·šæ€§ç¸®æ”¾ä»¥åŠå¹³ç§»ï¼Œå¾—到有物ç†å«ç¾©çš„數(shù)值,比如自定義的光照強度ç‰ç´šã€‚如下圖,ä¸é–“接入一個簡單的查表模塊進行線性縮放。
支æŒä¸€éµä¸‹è¼‰çš„硬件除了舉例的Arduino之還有很多,算法的è¨è¨ˆä¹Ÿå¯ä»¥éžå¸¸å¾©é›œã€‚實際上,越是復雜的算法,æ‰è¶Šèƒ½é«”ç¾(xià n)框圖å¼ç®—法è¨è¨ˆæ–¹æ³•çš„優(yÅu)勢。
下載安è£å°æ‡‰çš„硬件支æŒåŒ…之åŽï¼Œå¹«åŠ©æ–‡æª”里都會æ供由淺入深的應用案例。如下圖是一個LEGO解é”方算法的一個案例。
LEGO解é”方算法模型
å¿«éžåˆ†æ€æ©Ÿå™¨äººç¾(xià n)å ´æ‰“é–‹é€™å€‹æ¨¡åž‹ï¼Œé»žæ“Šç·¨è¯ï¼Œå°±å¯ä»¥æŠŠé€™å€‹ç®—法完整下載到LEGO機器人上去了,有興趣的å¯ä»¥è‡ªå·±è¦ªè‡ªå‹•æ‰‹è©¦ä¸€è©¦ã€‚
垃圾分æ€æ©Ÿå™¨äººç ”制æˆåŠŸé †è±è‡ªå‹•åˆ†æ€æ©Ÿå™¨äººåˆ†æ€æ©Ÿå™¨äººæœ‰å“ªäº›