【《基于STM32的無線感控小車方案設(shè)計實現(xiàn)》15000字(論文)】_第1頁
【《基于STM32的無線感控小車方案設(shè)計實現(xiàn)》15000字(論文)】_第2頁
【《基于STM32的無線感控小車方案設(shè)計實現(xiàn)》15000字(論文)】_第3頁
【《基于STM32的無線感控小車方案設(shè)計實現(xiàn)》15000字(論文)】_第4頁
【《基于STM32的無線感控小車方案設(shè)計實現(xiàn)》15000字(論文)】_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

第頁共27頁緒論無線感控小車研究背景和意義無線通信技術(shù)日臻成熟,無線感控小車的技術(shù)也得到了快速發(fā)展,目前市面上已經(jīng)涌現(xiàn)出各種各樣的多功能智能無線小車,其中通過WiFi技術(shù)通信的無線感控小車也越來越得到各個行業(yè)上的廣泛應(yīng)用。無線感控小車,通過外部傳感器不斷的感知小車外部環(huán)境信息,在有障礙物的復(fù)雜環(huán)境中,實現(xiàn)遠程靈活遙控運動的同時也能完成自主規(guī)避障礙物運動,從而完成在各個場景中的工作。無線感控小車系統(tǒng)中融合了傳感器、信息融合、通信接口、遠程智能控制以及自動控制等一系列高新技術(shù)REF_Ref8759\r\h[1]。物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,使得無線感控小車與物聯(lián)網(wǎng)技術(shù)相結(jié)合,能夠?qū)崿F(xiàn)遠程無人控制的功能。無線感控小車具有自動避障、可隨機規(guī)劃路徑運動和遠程可控行駛等功能。無線感控小車在各個行業(yè)都有很好的應(yīng)用價值。例如,在日常生活中,無線感控小車可以像訓(xùn)練有素的導(dǎo)盲犬一樣給盲人指引正確的行走路線。在軍事方面,無線感控小車可以代替軍人們在危險區(qū)域完成排雷和偵察任務(wù)。在科學(xué)研究中,無線感控小車可以在外星球上完成探索和返回照片的任務(wù)。此外,它還可以幫助人們在復(fù)雜的環(huán)境中執(zhí)行設(shè)備例行檢查和貨物處理等任務(wù)REF_Ref9478\r\h[2]。本文設(shè)計的基于WiFi的無線感控小車,相比于傳統(tǒng)的無線智能小車的基礎(chǔ)上增加了WiFi視頻監(jiān)控等諸多功能。該款無線感控小車通過WiFi的通信方式,與計算機上的的遠程控制程序進行實時通信,并且實時感知小車傳感器信息并對小車進行運動控制,具備有隨機規(guī)劃路徑運動、障礙物規(guī)避等功能。遠程控制小車的上位機中能實時看到安裝在小車上的攝像頭傳回的視頻畫面,這樣就能在上位機中實時地監(jiān)控小車的行駛,能夠方便地去檢測一些人類難以進入的環(huán)境。小車在運動過程中遇到障礙物時,通過提前設(shè)定好的算法實現(xiàn)自動規(guī)避障礙物功能。該項技術(shù)可以運用在物流中轉(zhuǎn)站中的智能搬運小車,也可以運用在智能家居中,所以有很高的應(yīng)用價值。無線感控小車國內(nèi)外發(fā)展及研究現(xiàn)狀對于智能小車的研究,最早是在上世紀(jì)50年代美國那邊開始研究的。全球首個自動控車系統(tǒng)是由美國巴雷特電子公司研發(fā)出來的,也是世界上第一個可以以固定路線運行的智能小車系統(tǒng),它具有智能小車最基本的功能REF_Ref12453\r\h[3]。這一革命性的發(fā)明拉開了屬于智能小車時代的序幕,智能小車系統(tǒng)的研究在發(fā)達國家中逐漸呈現(xiàn)蓬勃發(fā)展的趨勢。國外非常多的大型科技企業(yè)公司、研究所紛紛在智能小車領(lǐng)域的研發(fā)中投入了大量的財力、精力和人力。其中最具有代表性的有微軟、谷歌、以及IBM這三大巨頭公司,他們近幾年來已連續(xù)推出自己公司研發(fā)的新型智能小車REF_Ref14830\r\h[4],具有多種功能,其中包括有遠程操控、小車聯(lián)網(wǎng)、視頻監(jiān)控、基于機器視覺的障礙物規(guī)避、自主導(dǎo)航以及自主行進搬運等功能。相比于國外,我國是這近十幾年來才真正開始研究智能小車,但我國與國外的差距也在不斷地減少。在我國,目前主要是研究所、高等高校等具有豐富資源的機構(gòu)或者實驗室在研究智能小車,主要以清華大學(xué)、北京理工、中科院自動化研究所、國防科技大學(xué)、電子科技大學(xué)為代表。目前階段,智能小車的產(chǎn)業(yè)已得到國家政府部門的高度重視且制定了一系列政策來大力扶持這一行業(yè)。通過對國外相對成熟的智能小車產(chǎn)品進行研究,國內(nèi)的技術(shù)也已經(jīng)取得了較多的突破性進展REF_Ref14830\r\h[4]。論文主要內(nèi)容及章節(jié)安排本論文的研究目的是以STM32為基礎(chǔ)設(shè)計的多功能無線感控小車,電腦端的遠程控制程序通過WiFi與小車進行通信。無線感控小車能遠程操控、自主避障、隨機規(guī)劃行走路徑、實時采集小車周圍的圖像并在終端顯示。無線感控小車將采集到的數(shù)據(jù)信息通過WiFi發(fā)送到終端的上位機,用戶在終端通過操控界面對無線感控小車發(fā)送控制指令信息從而對小車進行靈活的控制。論文各章節(jié)主要內(nèi)容如下:闡述了論文的研究背景和意義,國內(nèi)外對無線智能小車的系統(tǒng)的研究及發(fā)展現(xiàn)狀。闡述了無線感控小車系統(tǒng)的總體設(shè)計,其中包括系統(tǒng)的總體設(shè)計思路和設(shè)計方案,另外也包括了方案的可行性分析。提出了無線感控小車系統(tǒng)的硬件設(shè)計方案,建立硬件總體框架,并對模塊選型進行了分析。闡述了無線感控小車的功能設(shè)計與實現(xiàn)方法,說明了無線感控小車所有設(shè)計的功能與其相應(yīng)的實現(xiàn)方法。闡述了無線感控小車系統(tǒng)的軟件設(shè)計,其中包括C#上位機應(yīng)用程序的設(shè)計和單片機硬件驅(qū)動程序的設(shè)計。系統(tǒng)測試。測試的主要內(nèi)容包括硬件測試、軟件測試、通信時延測試等對小車系統(tǒng)的多方面測試。對本論文的工作進行總結(jié)以及對后續(xù)工作的展望。無線感控小車系統(tǒng)的總體設(shè)計無線感控小車系統(tǒng)的總體設(shè)計思路本論文的主要設(shè)計思路是將STM32單片機選為無線感控小車的核心控制器,對小車的減速直流電機進行控制,從而對小車的行駛狀況進行控制。在小車車模的最前端安裝超聲波模塊,通過超聲波實時測距來判斷小車正前方是否有障礙物,從而判斷小車當(dāng)前是否需要避障;將WiFi模塊通過串口與STM32進行通信,進而讓小車能通過WiFi的方式與終端的上位機進行通信;在小車上安裝一個網(wǎng)絡(luò)攝像頭進行圖像采集,并通過WiFi的方式實時將圖像信息傳給上位機,最終能夠讓用戶在計算機上發(fā)送控制指令,實現(xiàn)遠程靈活的控制小車。本論文設(shè)計的無線感控小車預(yù)期能實現(xiàn)的功能如下:1、運動功能:包括無線感控小車的前進、后退、右轉(zhuǎn)、左轉(zhuǎn)以及電機調(diào)速等關(guān)鍵的基礎(chǔ)運動功能;2、自主避障功能:無線感控小車在遇到障礙物時能進行有效規(guī)避;3、隨機規(guī)劃路徑功能:在上位機的畫板中繪制小車的行走路徑,之后將路線信息發(fā)送給小車,小車隨后做出與繪制路徑相應(yīng)的運動;4、無線通信功能:終端的上位機與無線感控小車通過WiFi無線信號進行通信,對小車進行遠程實時控制和圖像畫面顯示。無線感控小車系統(tǒng)的總體設(shè)計方案無線感控小車系統(tǒng)的總體設(shè)計主要包括兩個部分:硬件設(shè)計部分和軟件設(shè)計部分。硬件設(shè)計部分的核心是選用一個性能滿足應(yīng)用需要的單片機—STM32,然后在使用STM32最小系統(tǒng)板為基礎(chǔ)下添加一些必要的功能模塊,其中包括有電機驅(qū)動模塊、WiFi模塊、超聲波模塊等。STM32通過對電機驅(qū)動模塊進行控制從而對電機進行正反轉(zhuǎn)以及調(diào)速的控制;STM32通過自身串口與WiFi模塊進行通信,從而獲取到遠端控制程序發(fā)送過來的數(shù)據(jù)信息;超聲波模塊與STM32的輸入捕獲通道相連,不斷進行測距從而判斷小車與前方障礙物的距離;網(wǎng)絡(luò)攝像頭則利用樹莓派ZEROW與USB攝像頭進行搭建。軟件設(shè)計部分包括STM32的硬件驅(qū)動程序和終端上的C#上位機的軟件設(shè)計。STM32硬件驅(qū)動程序的核心是將從WiFi模塊得到的上位機發(fā)來的數(shù)據(jù)進行相應(yīng)解析,從而得到正確的控制指令,進而驅(qū)動小車的直流電機;C#上位機的軟件設(shè)計核心是在一個局域網(wǎng)內(nèi)開啟一個TCP服務(wù)器讓小車上的WiFi模塊作為客戶端進行通信連接,從而實時接收小車端發(fā)送過來的數(shù)據(jù),并在控制界面處做相應(yīng)的顯示。上位機接收數(shù)據(jù)的同時也在實時檢測當(dāng)前是否有鍵盤按鍵按下,若有則將相應(yīng)的控制數(shù)據(jù)發(fā)送給小車端。無線感控小車的總體設(shè)計框圖如圖2.1。圖STYLEREF1\s2.SEQ圖\*ARABIC\s11無線感控小車總體設(shè)計框圖方案的可行性分析本設(shè)計選用的主控制器是目前市場上比較主流的主處理器—STM32F103系列,其性價比明顯優(yōu)越于同價位的ARM系列的處理器。此控制器采用的是高度集成的結(jié)構(gòu)方式,很大程度上的減少了很多不需要的外設(shè),提高芯片的整體性能的同時也減少了功耗。電機驅(qū)動模塊使用的芯片是L298N,使用的控制信號分別是TTL和CMOS邏輯電平,以對外部的電阻進行檢測并反饋控制電路的變化量,小車電機的速度可由PWM脈沖編碼信號對其控制。網(wǎng)絡(luò)攝像頭是使用樹莓派ZEROW和一個USB攝像頭組合起來進行搭建的。樹莓派ZEROW搭載博通BCM2853芯片,且板載WiFi芯片,具有更小尺寸,低功耗,發(fā)熱量低等多個優(yōu)點。能直接與USB攝像頭相連接,即插即用,使用簡單。STM32的程序是用KeiluVision5軟件編寫的,使用的編程語言為C語言,且該開發(fā)軟件具有在線仿真與調(diào)試功能,還有一鍵下載程序到單片機的功能,所以很大程度上提高了我們的開發(fā)效率;終端的上位機是在VisualStudio平臺上開發(fā)的,使用的編程語言是C#,在C#的winform程序設(shè)計中,上位機的UI界面開發(fā)相對比較方便,直接在工具欄中拖動需要使用的控件即可,這也極大的提高了終端上位機的開發(fā)效率。無線感控小車的設(shè)計主要包括有硬件和軟件系統(tǒng)的設(shè)計。在硬件上,用的基本都是市場上現(xiàn)成的模塊,然后再將每個模塊搭建在小車上,這樣能較大的減小了因模塊硬件設(shè)計的問題導(dǎo)致小車不能正常工作的幾率;軟件設(shè)計主要是STM32單片機硬件驅(qū)動程序設(shè)計和終端C#上位機的程序設(shè)計。硬件驅(qū)動程序設(shè)計主要是對整個無線感控小車系統(tǒng)中各個模塊設(shè)計的相應(yīng)的驅(qū)動程序;上位機的程序設(shè)計是讓用戶可以通過控制界面來遠程控制小車以及實時顯示小車的實況數(shù)據(jù)和視頻畫面信息。無線感控小車系統(tǒng)的硬件設(shè)計系統(tǒng)硬件設(shè)計無線感控小車硬件結(jié)構(gòu)設(shè)計框圖如圖3.1。圖STYLEREF1\s3.SEQ圖\*ARABIC\s11無線感控小車硬件結(jié)構(gòu)設(shè)計框圖無線感控小車硬件系統(tǒng)各模塊主要功能如下:小車整體是由3節(jié)鋰電池串聯(lián)后進行供電的,電池型號為18650,容量為2000mAh。每節(jié)電池充滿電后電壓為4.1V左右,因此串聯(lián)的供電輸出電壓為12.3V左右。WiFi通信模塊主要的工作是不斷地接收上位機發(fā)送過來的數(shù)據(jù),然后將這些數(shù)據(jù)通過串口再發(fā)送給STM32控制器進行解析。WiFi模塊在整個小車系統(tǒng)中起到了通信橋梁的作用。JTAG調(diào)試下載電路的作用是將STM32的下載引腳引出來,以便于在下載程序的時候可以使用J-Link高速下載器進行下載和在線調(diào)試。電機驅(qū)動模塊的主要作用是控制小車電機的正反轉(zhuǎn)、停止和調(diào)速,其次就是將3節(jié)鋰電池串聯(lián)后的輸出電壓12.3V通過模塊上的線性穩(wěn)壓芯片降壓到5V,給STM32最小系統(tǒng)板和小車上的其他模塊進行供電。超聲波模塊的作用是進行測距,不斷測量小車與前方障礙物之間的距離,以便于讓STM32控制器來判斷小車當(dāng)前是否需要進行避障控制。LCD串口彩屏的主要作用是將用戶輸入的服務(wù)器的IP地址和端口號發(fā)送給STM32控制器,從而控制WiFi模塊連接到終端上位機開啟的TCP服務(wù)器。因為每次在一個局域網(wǎng)內(nèi)開啟一個TCP服務(wù)器時IP地址基本都會發(fā)生改變,所以WiFi模塊每次連接服務(wù)器時都需要重新設(shè)置IP地址;同時串口屏也實時顯示當(dāng)前鋰電池剩余電量。系統(tǒng)硬件模塊選型微處理器模塊選型本論文設(shè)計的無線感控小車選用的微處理器模塊是STM32F103C8T6最小系統(tǒng)板。此模塊的芯片是Cortex-M3的內(nèi)核,采用了與系統(tǒng)相統(tǒng)一的嵌入式設(shè)計,這種結(jié)構(gòu)使得系統(tǒng)具有較低的功耗、性能高和成本低等顯著優(yōu)點,而且系統(tǒng)的集成度大大提升,降低了開發(fā)難度REF_Ref14830\r\h[4]。該芯片資源豐富,有3個串口,且內(nèi)置有多個ADC通道,還有多路PWM通道。在本設(shè)計中,使用的是現(xiàn)成的STM32最小系統(tǒng)板,而不是用單獨一個芯片再去設(shè)計STM32最小系統(tǒng)電路,因此在節(jié)省了開發(fā)時間的同時也能更好的保證小車系統(tǒng)的穩(wěn)定運行。因為近期國內(nèi)ST系列的芯片在大幅度的漲價,導(dǎo)致了現(xiàn)如今STM32F103C8T6芯片的價格已經(jīng)是去年的30倍,因此直接用現(xiàn)成的最小系統(tǒng)板模塊能很大程度上的減少成本。STM32F103C8T6最小系統(tǒng)板的實物圖如圖3.2。圖STYLEREF1\s3.SEQ圖\*ARABIC\s12STM32F103C8T6最小系統(tǒng)板電機驅(qū)動模塊選型本設(shè)計選用的電機驅(qū)動模塊為L298N電機驅(qū)動模塊,是目前運用在智能小車中較為常用的電機驅(qū)動模塊。此模塊使用的驅(qū)動芯片是ST公司的L298N芯片,具有驅(qū)動能力強,發(fā)熱量低等特點,且該模塊上還在驅(qū)動芯片上安裝了一個較大體積的散熱片,這樣能為芯片起到很好的散熱作用,保證了芯片在工作過程中不會因為自身溫度過高而導(dǎo)致芯片燒壞的現(xiàn)象;該模塊上還有線性穩(wěn)壓芯片M7805與其外圍電路,可以對鋰電池輸入的12V電壓進行降壓,且其輸出的電流最大能達500mA。將輸入電壓降壓到5V后以便于給STM32最小系統(tǒng)板和無線感控小車上的其他模塊進行供電。L298N電機驅(qū)動模塊的實物圖如圖3.3。圖STYLEREF1\s3.SEQ圖\*ARABIC\s13L298N電機驅(qū)動模塊WiFi通信模塊選型在本設(shè)計中的WiFi通信模塊選用的是正點原子公司的ATK-ESP8266串口轉(zhuǎn)WIFI模塊,該模塊采用串口與MCU進行通信,且還內(nèi)置了TCP/IP通信協(xié)議棧,能實現(xiàn)MCU串口與WiFi之間的轉(zhuǎn)換。模塊支持串口轉(zhuǎn)WiFi接入、串口轉(zhuǎn)AP與WiFi接入+WiFi熱點模式,因此能夠快速構(gòu)建串口-WiFi數(shù)據(jù)的傳輸方案。在本設(shè)計中使用的是模塊的WiFiSTA接入模式。ATK-ESP8266串口轉(zhuǎn)WiFi模塊的實物圖如圖3.4。圖STYLEREF1\s3.SEQ圖\*ARABIC\s14ATK-ESP8266串口轉(zhuǎn)WiFi模塊測量鋰電池電壓的ADC電路設(shè)計整個無線感控小車系統(tǒng)都是由3節(jié)18650鋰電池串聯(lián)后進行供電的,充滿電時的電壓是12.3V左右。為了讓MCU計算出鋰電池當(dāng)前的剩余電量,就必須進行ADC轉(zhuǎn)換。在本設(shè)計中,ADC使用的是STM32F103C8T6內(nèi)置的ADC通道,但輸入的模擬電壓不能超過3.3V,若超過則會燒壞芯片的ADC通道。因為要測量的鋰電池電壓最大為12.3V左右,遠遠超過了3.3V,因此要用電阻進行串聯(lián)分壓。本設(shè)計用了2個電阻進行串聯(lián)分壓,阻值分別是3K和1K,再用STM32的ADC去測量阻值為1K的電阻兩端的電壓即可計算出鋰電池當(dāng)前的電壓,最后推算出鋰電池當(dāng)前的剩余電量。STM32的ADC最大承受的輸入電流為50mA,由歐姆定律I=U/R可算出當(dāng)鋰電池滿電時ADC電路中的電流為3mA左右,因此不會燒壞STM32芯片。測量鋰電池總電壓的ADC電路如圖3.5。圖STYLEREF1\s3.SEQ圖\*ARABIC\s15ADC采樣電路網(wǎng)絡(luò)攝像功能集成本次設(shè)計的無線感控小車加上了網(wǎng)絡(luò)攝像的功能,而其中網(wǎng)絡(luò)攝像頭是使用樹莓派ZREOW和一個USB攝像頭進行搭建的。選用樹莓派ZREOW搭建攝像頭能保證傳輸視頻的質(zhì)量,體積小巧,功耗低且成本不高。在無線感控小車系統(tǒng)中使用樹莓派ZREOW還可以增加了整個系統(tǒng)功能的可擴展性,方便日后增加上其他擴展功能,如目標(biāo)跟蹤、圖像識別以及自動行駛等擴展功能。樹莓派ZEROW的實物圖如圖3.6。圖STYLEREF1\s3.SEQ圖\*ARABIC\s16樹莓派ZEROW無線感控小車的功能設(shè)計與實現(xiàn)遠程遙控小車運動的功能設(shè)計無線感控小車可以通過終端上上位機進行遠程遙控控制,通信方式為WiFi通信。上位機是用C#編程語言開發(fā)的,在上位機的程序編寫中,將一些特定的鍵盤按鍵的按下事件編寫好之后,當(dāng)這些按鍵被按下時就會觸發(fā)這些事件。在這些按下事件中,都編寫了相對應(yīng)的發(fā)送字符串的指令,所以說當(dāng)這些按鍵被按下時上位機就會通過WiFi信號發(fā)送相對應(yīng)的字符串給小車,小車端接收到這些字符串后進行相應(yīng)的處理,最終實現(xiàn)上位機控制小車運動的功能;總的來說,上位機程序在與小車通過WiFi進行通信連接后,就會不斷的檢測當(dāng)前是否有鍵盤按鍵被按下,若有相應(yīng)的按鍵按下就會發(fā)送控制小車運動的字符串信息給小車的MCU,每種字符串信息代表一種運動方式,MCU接收數(shù)據(jù)做處理之后再控制小車做相應(yīng)的運動。值得一提的是,MCU每次接收數(shù)據(jù)之后都要做清空串口接收緩沖區(qū)的處理,因為不做清空緩存的處理的話,MCU會將上次接收到的字符串信息作為當(dāng)前的控制信息,這樣小車則會失控,不會按照用戶的控制意愿進行運動。每次小車接收到正確的控制信息后都會給上位機發(fā)送已接收到控制指令的信息,這樣就能在上位機中實時觀察小車是否正常運行,而且上位機中每次發(fā)送和接收數(shù)據(jù)都會顯示時間戳,且精確到毫秒級,這樣就能方便計算出上位機與小車的通信時延是多少。因為本次設(shè)計的無線感控小車車模用的是安裝麥克納姆輪的車模,因此小車可以做多個方向的運動,比如向右平移。上位機控制小車運動的字符串信息與小車運動方式的對應(yīng)關(guān)系如下表4.1。表STYLEREF1\s4.SEQ表\*ARABIC\s11字符串信息與小車運動方式的對應(yīng)關(guān)系字符串信息小車運動方式up前進down后退left左轉(zhuǎn)right右轉(zhuǎn)stop停止PR向右平移PL向左平移自動規(guī)避障礙物的功能設(shè)計在本設(shè)計在中,無線感控小車不僅具有遠程手動遙控的模式,還具有自主規(guī)避障礙物模式。在自動規(guī)避障礙物的模式中,當(dāng)無線感控小車在運動過程中正前方遇到障礙物時,會自動避開正前方的障礙物繼續(xù)前進。而無線感控小車避開障礙物的方式設(shè)計有三種,分別是小車?yán)名溈思{姆輪的特殊功能性向右平移避開障礙物、小車向右轉(zhuǎn)90度繞開障礙物之后后繼續(xù)直行,小車遇到障礙物時調(diào)頭后直行這三種規(guī)避障礙物模式。無線感控小車是通過超聲波模塊不斷地進行測距來判斷小車的前方是否有障礙物,一旦小車的正前方出現(xiàn)障礙物時,超聲波模塊測出的距離值就會較小,一旦這個值小于程序中預(yù)設(shè)值時,無線感控小車就知道進行避開障礙物的操作,至于是以那種方式去避開障礙物的,這個就得看用戶在控制小車進入自動規(guī)避障礙物模式時選用的是哪種規(guī)避模式,這些模式的設(shè)定都是需要用戶在終端的上位機中進行設(shè)定的。當(dāng)超聲波模塊測出的距離值小于設(shè)定值時,小車開始自動避障,而這個設(shè)定值就需要在MCU的程序中進行設(shè)定,因為考慮到小車遇到障礙物進行避障動作時不能馬上停止,其中存在慣性,所以這個設(shè)定值就不能設(shè)得太小,否則小車會撞上障礙物。經(jīng)過多次調(diào)試之后,將這個設(shè)定值設(shè)為45厘米較為合適。也就是說到小車與前方障礙物之間的距離小于45厘米時,小車將進行規(guī)避障礙物操作。而在后期調(diào)試過程中,考慮到用戶的使用體驗,則設(shè)計成不斷的將小車與前方障礙物的距離值發(fā)送給服務(wù)端的上位機,上位機上實時顯示這個距離值。因為超聲波模塊的測距距離有限,則將距離值小于100厘米的時候發(fā)送給上位機,而當(dāng)這個距離值大于100厘米時就不做任何處理。路徑規(guī)劃功能設(shè)計在本設(shè)計中,無線感控小車不僅具有自動規(guī)避障礙物的功能,還具有路徑規(guī)劃小車運動的功能。在此功能中,用戶可以在上位機的畫板中進行路徑軌跡的繪制,繪制完成后上位機會發(fā)送與之對應(yīng)的路徑軌跡坐標(biāo)信息給小車,小車接收到后進行解析處理,隨后做出跟用戶在上位機繪制的路徑軌跡一樣的運動。總的來說,就是用戶在上位機中繪制小車的行走路線,隨后小車就會做出跟這路線一樣的運動,比如說畫一條直線,小車就會往前直走,直走的距離與繪制的直線長度成正比,繪制得越長,小車則會運動得越遠。在此功能設(shè)計中,原本打算是想設(shè)計成無論在上位機中繪制的路線是直線還是曲線,小車都能按著繪制路線的軌跡進行運動,但后期在設(shè)計過程中遇到了較大的技術(shù)瓶頸,無法讓小車精確的走出曲線的軌跡,因此拋棄了讓小車能走曲線的功能,所以后期改成繪制的小車行走路線只能是直線或斜線。因為在小車運行的過程中,繪制完規(guī)劃的路線后上位機只發(fā)送路線的起點坐標(biāo)和終點坐標(biāo),小車的MCU接收到這些坐標(biāo)信息數(shù)據(jù)之后就會進行數(shù)據(jù)處理,從而解析出起點坐標(biāo)和終點坐標(biāo)的X值和Y值,最終根據(jù)這兩個坐標(biāo)的X、Y值通過算法來計算出小車該走的距離和轉(zhuǎn)向的方向以及角度值。樹莓派搭建網(wǎng)絡(luò)攝像頭傳輸視頻設(shè)計在本設(shè)計中,無線感控小車系統(tǒng)上還安裝有攝像頭,因此用戶可以在上位機中實時觀察到攝像頭拍攝到的視頻畫面,這樣更有助于讓用戶方便地遠程遙控小車,也能讓用戶有更好的使用體驗。而且傳輸視頻的質(zhì)量要高,在保證足夠高清的同時也要把傳輸延遲控制在用戶的可接受范圍內(nèi)。要利用樹莓派ZEROW和一個USB攝像頭來搭建一個網(wǎng)絡(luò)攝像頭,就必須先對樹莓派進行一些配置。樹莓派是體積只有信用卡大小的微型電腦,而樹莓派ZEROW的體積更是只有信用卡一半的大小,其系統(tǒng)都是基于Linux的,功能豐富且易于開發(fā)。把燒好樹莓派官方系統(tǒng)鏡像文件的內(nèi)存卡插進樹莓派后,樹莓派開機后再進到設(shè)置界面將攝像頭功能開啟,這樣樹莓派就能成功使用與之相連的USB攝像頭了。樹莓派網(wǎng)絡(luò)傳輸視頻的設(shè)計方案一般用得較多的是在樹莓派中運行Motion和MJPG-streamer這兩個軟件。這兩個方案都是將攝像頭拍攝到的畫面信息轉(zhuǎn)換成視頻流的形式推送到網(wǎng)頁中,而這個網(wǎng)頁的IP地址和端口號都是要提前配置好的。這兩個方案的區(qū)別就是使用Motion時配置比較簡單方便,但傳輸視頻的圖片質(zhì)量比較差,時延也比較高。而使用MJPG-streamer時配置相對較為麻煩,但傳輸視頻的圖片質(zhì)量比較高清,時延也比較低,因此比較適合運用在本設(shè)計中,能很好的實現(xiàn)網(wǎng)絡(luò)視頻傳輸?shù)墓δ堋漭膳渲贸砷_機自啟MJPG-streamer,這樣就不用樹莓派每次開機后再去手動運行MJPG-streamer了??刂菩≤嚨腃#上位機要獲取MJPG-streamer推送的視頻流數(shù)據(jù),就要在上位機工程中調(diào)用MJPG-streamer插件,然后再將顯示視頻畫面的控件拖到UI界面中,并且上位機與樹莓派是連接在同一個局域網(wǎng)時,這樣才能在上位機中看到樹莓派網(wǎng)絡(luò)攝像頭傳回的畫面。無線感控小車系統(tǒng)的軟件設(shè)計C#上位機應(yīng)用程序設(shè)計在整個無線感控小車系統(tǒng)的設(shè)計過程中,C#上位機應(yīng)用程序的設(shè)計占整個系統(tǒng)設(shè)計的核心部分。上位機的主要功能是負(fù)責(zé)開啟一個TCP服務(wù)器讓無線感控小車作為客戶端通過Socket套接字的方式進行通信連接,建立通信連接后上位機在實時控制小車的同時也實時接收小車端發(fā)送過來的信息并且做相應(yīng)的顯示,這是一個雙向通信的過程。在控制小車的過程中,上位機可以連接小車上的樹莓派網(wǎng)絡(luò)攝像頭,這樣就可以在上位機看到攝像頭拍攝的畫面。上位機的程序設(shè)計部分包括UI設(shè)計和程序設(shè)計。上位機的UI設(shè)計C#上位機的UI設(shè)計是用VisualStudio平臺開發(fā)的,在平臺中創(chuàng)建C#的winform工程。在此工程中,設(shè)計UI界面比較方便,窗口的大小可以隨意拖動,需要用到的控件也可以從工具欄中直接拖動出來放到窗口里合適的位置,其中用的較多的控件有按鈕、文本標(biāo)簽、文本框、圖片框等控件。C#上位機的UI界面如圖5.1。圖STYLEREF1\s5.SEQ圖\*ARABIC\s11C#上位機的UI界面其中上位機UI界面中劃分區(qū)域如下:通信數(shù)據(jù)監(jiān)控區(qū)域:而上位機在發(fā)送和接收控制信息的時候,會在通信數(shù)據(jù)監(jiān)控區(qū)域顯示收發(fā)信息的內(nèi)容,且還能看到收發(fā)信息的時間戳,這個時間是精確到毫秒級的。而上位機給小車發(fā)送控制指令信息的同時,小車也會給上位機回一條接收到控制指令的信息,以便于讓用戶得知上位機程序和無線感控小車系統(tǒng)是否已正常運行,同時也方便計算出上位機與小車之間的通信時延。在此區(qū)域還放置了啟動服務(wù)器和連接樹莓派網(wǎng)絡(luò)攝像頭的按鈕。小車實況數(shù)據(jù)顯示區(qū)域:在該區(qū)域中,顯示了小車系統(tǒng)當(dāng)前剩余電量的百分比以及與前方障礙物之間的距離。另外還有代表電池剩余電量的電池樣式的圖片,當(dāng)電池剩余電量發(fā)送一定范圍的變化時,電池圖片中的電池格數(shù)也會減少。小車控制區(qū)域:在該區(qū)域中,放置了設(shè)置小車速度檔位的按鈕和顯示小車速度檔位的圖片。小車速度檔位總共設(shè)置有4個檔位,當(dāng)設(shè)置小車檔位時,顯示小車速度檔位的圖片中的指針也會發(fā)生變化,會去指向與檔位相對應(yīng)的儀表位置;該區(qū)域也還放置了設(shè)定小車運動模式的按鈕,分別可以設(shè)置成手動遙控模式、自動避障模式,路徑規(guī)劃模式這三種運動模式。路徑繪制區(qū)域:在該區(qū)域中,放置了一個繪畫板,當(dāng)無線感控小車進入路徑規(guī)劃模式時,可以在繪畫板中繪制小車運動的路線軌跡,繪制完成后小車隨后就會做出與繪制路徑相對應(yīng)的運動軌跡。上位機的主要程序描述在整個C#上位機程序的設(shè)計中,最為核心的部分就是上位機端與無線感控小車端建立通信連接后,相互之間收發(fā)數(shù)據(jù)的數(shù)據(jù)處理的算法設(shè)計。C#上位機程序剛開始運行時,在與小車通過WiFi進行通信連接后,會開啟雙線程,其中一個線程負(fù)責(zé)不斷地接收小車端發(fā)送過來信息,另一個線程則負(fù)責(zé)監(jiān)測是否有鍵盤按下事件和按鈕點擊事件的發(fā)生,若監(jiān)測到有事件發(fā)生則發(fā)送相應(yīng)的控制信息給小車端。簡單來說,就是上位機其中的一個線程負(fù)責(zé)發(fā)送信息數(shù)據(jù),另外一個線程負(fù)責(zé)接收信息數(shù)據(jù),最終實現(xiàn)上位機與無線感控小車系統(tǒng)的雙向通信。無線感控小車系統(tǒng)運行時,會WiFi通信模塊不斷地發(fā)送當(dāng)前的鋰電池電量百分比和與前方障礙物距離的信息數(shù)據(jù)以字符串的形式給上位機,上位機接收到這兩個數(shù)據(jù)的字符串之后進行數(shù)據(jù)處理,截取出相對應(yīng)的字符串信息,最后分別得出這鋰電池電量百分比和與前方障礙物距離的數(shù)值,并在UI界面的小車實況數(shù)據(jù)顯示區(qū)域顯示出來。當(dāng)用戶在運行上位機程序時,通過計算機鍵盤和鼠標(biāo)對無線感控小車進行控制,在此過程中上位機會給無線感控小車端發(fā)送控制信息,這些控制信息也是通過字符串?dāng)?shù)據(jù)的形式發(fā)送的,小車端接收到字符串信息之后也會進行數(shù)據(jù)處理,最終實現(xiàn)上位機通過WiFi方式控制小車。上位機的程序流程圖如圖5.2。圖STYLEREF1\s5.SEQ圖\*ARABIC\s12上位機程序流程圖硬件驅(qū)動程序設(shè)計在無線感控小車的硬件驅(qū)動程序設(shè)計中,是以STM32單片機驅(qū)動各個小車模塊的程序設(shè)計為核心的。其中這些程序設(shè)計則包括有無線數(shù)據(jù)傳輸?shù)某绦蛟O(shè)計、電機驅(qū)動模塊的程序設(shè)計、超聲波測距程序的設(shè)計,以及實時檢測電池電壓程序設(shè)計。在STM32中穩(wěn)定地運行這些程序,最終實現(xiàn)對無線感控小車的所有控制功能。無線數(shù)據(jù)傳輸與處理的程序設(shè)計無線感控小車在與C#上位機的通信過程中,數(shù)據(jù)處理的程序為重要核心。上位機給無線感控小車發(fā)送的控制信息都是以字符串的形式發(fā)送的,而小車接收到這些字符串?dāng)?shù)據(jù)之后就要進行處理,得到這些字符串中所包含的控制信息,最后STM32再根據(jù)這些控制信息對小車進行相應(yīng)的運動控制。在無線感控小車上的STM32單片機中,進行數(shù)據(jù)處理的核心方法是調(diào)用C語言函數(shù)庫中的strstr()函數(shù),其功能是尋找某個字符串?dāng)?shù)組中是否存在特定的字符串,調(diào)用此函數(shù)去尋找STM32的串口接收緩沖區(qū)中是否存在相應(yīng)的控制指令,若存在則控制小車做出相應(yīng)的運動,隨后將串口接收緩沖區(qū)的數(shù)據(jù)清空,以保證此次接收的數(shù)據(jù)不會影響到下次接收數(shù)據(jù)的處理;在無線感控小車的隨機路徑規(guī)劃功能中,C#上位機要發(fā)送路徑起點和終點的X,Y坐標(biāo)值給小車端,在此過程中小車接收了4個數(shù)值,所以就不能用尋找特定字符串是否與控制指令一致的方法。因為這4個數(shù)值是經(jīng)過上位機進行添加特定字符串處理后發(fā)送給小車,而一種特定的字符串對應(yīng)其中一個數(shù)值,因此小車端的MCU就可以通過截取特定字符串之后的數(shù)據(jù)即可得到相應(yīng)的坐標(biāo)值。電機驅(qū)動模塊程序設(shè)計在無線感控小車的最基本的運動功能中,是通過STM32單片機控制電機驅(qū)動模塊去驅(qū)動小車車模上的直流減速電機,對電機實現(xiàn)正轉(zhuǎn)、反轉(zhuǎn)、停止以及調(diào)速的控制,最終實現(xiàn)對無線感控小車的運動控制。在本設(shè)計中,使用的電機驅(qū)動模塊是L298N電機驅(qū)動模塊,此模塊可以同時控制兩個電機,無線感控小車總共用到了四個直流減速電機,因此需要使用2個電機驅(qū)動模塊。其中對每個電機的控制需要兩個控制信號來控制電機的轉(zhuǎn)動方向是正轉(zhuǎn)還是反轉(zhuǎn),而對電機的調(diào)速控制則是通過PWM信號控制電機的旋轉(zhuǎn)速度的。電機驅(qū)動模塊控制接口和小車運動情況如圖5.3。圖STYLEREF1\s5.SEQ圖\*ARABIC\s13電機驅(qū)動模塊控制接口和小車運動情況在STM32控制L298N電機驅(qū)動模塊的程序設(shè)計中,則是先配置好定時器然后初始化好PWM通道,再對兩個GPIO口配置成推挽輸出模式。在驅(qū)動程序中,則使用配置好的兩個IO口輸出高電平或低電平去控制電機的轉(zhuǎn)動方向,使用PWM通道輸出占空比可調(diào)的PWM信號給電機驅(qū)動模塊進而對電機進行調(diào)速,最終實現(xiàn)對小車的運動控制。超聲波模塊測距程序設(shè)計在無線感控小車的自主規(guī)避障礙物功能中,是通過使用超聲波模塊進行測距,對前方障礙物與小車之間的距離進行測量,從而判斷小車當(dāng)前的距離是否需要進行規(guī)避障礙物的運動,若需要則對電機的轉(zhuǎn)動方向和速度做出相應(yīng)的控制,最終控制小車做出規(guī)避障礙物的運動。HC-SR04超聲波模塊上總共有兩個探頭,分別負(fù)責(zé)發(fā)射和接收超聲波。模塊在使用時,STM32需要給模塊的觸發(fā)端引腳發(fā)送一個10微秒以上的高電平信號來控制模塊發(fā)射超聲波,隨后超聲波經(jīng)過反射后回到模塊上的接收探頭。模塊上的信號引腳會從剛開始發(fā)送超聲波的時候由低電平變成高電平,當(dāng)接收探頭接收到反射回的超聲波時,模塊上的信號引腳會從高電平變成低電平。根據(jù)上述超聲波模塊的工作原理,在測距的程序設(shè)計中,只需要測量出超聲波模塊的信號引腳輸出的高電平持續(xù)時間,再利用這個時間值乘上聲速后除于2即可得出測量的距離值。在STM32中,要測量高電平持續(xù)時間就要使用到輸入捕獲,因此需要在STM32程序中對輸入捕獲進行初始化,開啟輸入捕獲通道,去捕獲超聲波模塊信號引腳的高電平持續(xù)時間,最終根據(jù)這個時間值計算出小車與障礙物之間的距離。實時檢測鋰電池電量程序設(shè)計為了使整個無線感控小車系統(tǒng)能正常穩(wěn)定的運行,就必須要有穩(wěn)定的供電,因此就要對鋰電池輸出的供電電壓的測量,從而推算出當(dāng)前鋰電池的剩余電量。得知剩余電量能實時觀測出無線感控小車的運行情況,續(xù)航能力情況等。同時也能保證鋰電池不會出現(xiàn)因為超負(fù)荷放電而被損壞的情況。在STM32單片機程序中,通過使用單片機內(nèi)置的ADC通道進行AD轉(zhuǎn)換。要使用ADC的功能,必須先對其進行初始化和配置,且被測的電壓大小不能超過3.3V,否則會燒壞芯片的ADC通道。因為在無線感控小車的ADC電壓采樣電路中,是通過兩個電阻串聯(lián)進行分壓的,兩個電阻的阻值分別是3千歐和1千歐,因此需要測量阻值較小的電阻上分壓的小電壓,這樣才能保證STM32的ADC通道不會被燒壞。因為鋰電池充滿電時的電壓在12.3V左右,此時分壓在1千歐電阻上的電壓為3V左右,因此當(dāng)測量到這個電阻上的電壓大于或等于3V時,即認(rèn)定鋰電池的剩余電量為百分之百。而在調(diào)試過程中,當(dāng)鋰電池的輸出電壓低于7V左右時,發(fā)現(xiàn)小車在運動狀態(tài)下直流電機幾乎不轉(zhuǎn)動,而車上的串口屏也不亮了,所以可以視為當(dāng)鋰電池的電壓低于7V時,無線感控小車的整體系統(tǒng)剩余電量為0%。最后在程序算法的設(shè)計中將鋰電池的電壓值從7V到12.3V的區(qū)間換算到0%到100%的區(qū)間范圍。系統(tǒng)測試系統(tǒng)硬件測試對無線感控小車系統(tǒng)的硬件測試檢測項目一般包含檢查所有模塊的電氣連接是否連接正確,是否存在松動易松的問題。而為了保證無線感控小車能長時間穩(wěn)定的正常工作,所以此次的整體系統(tǒng)硬件測試項目工作中,包括了電機驅(qū)動測試、WiFi模塊通信測試、超聲波模塊測距功能測試、以及實測鋰電池電量功能測試的項目工作。電機驅(qū)動測試在電機驅(qū)動測試項目的工作中,是通過在STM32的程序中,單獨編寫對電機進行連續(xù)正反轉(zhuǎn)變換的控制的代碼,觀察電機是否能夠響應(yīng)且正常轉(zhuǎn)動;之后再單獨編寫改變輸出的PWM信號的占空比,對電機進行調(diào)速控制,觀察電機的轉(zhuǎn)動速度是否隨著占空比的增加而變快。經(jīng)過測試,小車的電機在能長時間正常工作的情況下,能實現(xiàn)正常的正反轉(zhuǎn)以及調(diào)速的功能,STM32也能通過控制L298N電機驅(qū)動模塊來正常驅(qū)動電機。WiFi模塊通信測試在WiFi模塊通信測試項目的工作中,是通過C#上位機與WiFi模塊進行通信連接后,C#上位機發(fā)送控制信息給WiFi模塊,WiFi模塊接收到這些控制信息后再通過串口將這些控制信息發(fā)送給STM32,STM32接收到這些信息的同時會返回信息說明已接收到這些信息,在C#上位機中的消息對話框中就能看到這雙方收發(fā)的通信過程。因此可以通過這一通信過程來測試WiFi模塊是否能與上位機進行正常通信。上位機與WiFi模塊的通信過程如圖6.1。圖STYLEREF1\s6.SEQ圖\*ARABIC\s11上位機與WiFi模塊的通信過程經(jīng)過測試,在C#上位機與WiFi模塊進行通信連接后,WiFi模塊的通信功能能夠正常實現(xiàn)。超聲波模塊測距功能測試在超聲波模塊測距功能測試項目的工作中,只需將無線感控小車放到某個物體的前面,用卷尺測量出無線感控小車與物體之間的距離,將這個距離值與上位機顯示的進行比較。上位機顯示的距離值如圖6.2,實際測量的距離值如圖6.3。圖STYLEREF1\s6.SEQ圖\*ARABIC\s12上位機顯示的距離值圖STYLEREF1\s6.SEQ圖\*ARABIC\s13實際測量的距離值經(jīng)過測試,在無線感控小車的工作過程中,超聲波模塊的測距功能能夠正常實現(xiàn),且與實際值誤差較小。實測鋰電池電量功能測試在實測鋰電池剩余電量的測試項目工作中,是通過測量鋰電池的輸出電壓值與無線感控小車上的串口屏和C#上位機中顯示的電量值進行對比,而在STM32測量鋰電池電量程序中是以鋰電池電壓大于或大于12V時視為滿電量,當(dāng)鋰電池電壓小于12V時則通過計算鋰電池剩余電量的算法將電壓值轉(zhuǎn)換成對應(yīng)的百分比值。鋰電池輸出電壓與電量顯示如圖6.4。圖STYLEREF1\s6.SEQ圖\*ARABIC\s14鋰電池輸出電壓與電量顯示經(jīng)過測試,在無線感控小車系統(tǒng)工作中,實時測量鋰電池剩余電量的功能能夠正常實現(xiàn)。系統(tǒng)軟件測試在對無線感控小車整體系統(tǒng)的軟件測試工作中,主要是針對遠程控制端的C#上位機進行的。通過對C#上位機進行功能性的測試,測試其是否能夠穩(wěn)定的實現(xiàn)預(yù)期的通信功能,其中包括有開啟一個TCP服務(wù)器、對小車實時發(fā)送遠程控制的信息、顯示樹莓派網(wǎng)絡(luò)攝像頭采集的畫面,以及接收小車發(fā)來的數(shù)據(jù)進行相應(yīng)的顯示處理。上位機與小車成功進行通信連接如圖6.5。圖STYLEREF1\s6.SEQ圖\*ARABIC\s15上位機與小車成功進行通信連接上位機與小車成功進行雙向通信如圖6.6。圖STYLEREF1\s6.SEQ圖\*ARABIC\s16上位機與小車成功進行雙向通信上位機成功顯示攝像頭畫面如圖6.7。圖STYLEREF1\s6.SEQ圖\*ARABIC\s17上位機成功顯示攝像頭畫面經(jīng)過測試,在控制端的C#上位機整個工作過程中,能夠長時間的穩(wěn)定實現(xiàn)所有預(yù)期的通信功能,其中這些功能包括有在一個局域網(wǎng)內(nèi)開啟一個TCP服務(wù)器讓小車通過WiFi模塊進行連接,通過WiFi信號給小車發(fā)送控制信息的同時接收小車返回的數(shù)據(jù),以及顯示樹莓派網(wǎng)絡(luò)攝像頭采集的畫面,讓用戶有更好的操作體驗。通信時延的測試為了能通過控制端的C#上位機能夠?qū)π≤囘M行實時遠程的控制,其中的通信時延就會有所要求,要將通信時延限制在一定范圍內(nèi)才能對小車進行靈敏的運動控制。而現(xiàn)如今對機器人或是機器小車的時延一般會要求在100毫秒以內(nèi),才能實現(xiàn)較為靈敏的實時控制。而C#上位機與小車是在同一個局域網(wǎng)內(nèi)進行WiFi通信的,因此通信距離較為有限,且通信時延會受到通信距離的影響。在對無線感控小車系統(tǒng)的通信時延測試項目中,是通過上位機發(fā)送任意控制信號給小車端的同時小車端會返回信息,而上位機界面在的消息框會顯示收發(fā)消息的時間戳,時間精確到毫秒級,這樣就可以通過這兩個收發(fā)消息的時間進行相減后再除于2即可得到上位機與小車的通信時延。上位機界面的消息框如圖6.8。圖STYLEREF1\s6.SEQ圖\*ARABIC\s18上位機界面的消息框經(jīng)過隨機測試得到在不同通信距離下的通信時延如表6.1。表STYLEREF1\s6.SEQ表\*ARABIC\s11不同通信距離下的通信時延通信距離通信時延1米12毫秒5米23毫秒10米43毫秒15米65毫秒20米88.5毫秒25米108毫秒測試數(shù)據(jù)結(jié)果表明,當(dāng)控制端的上位機與無線感控小車之間的通信距離大于25左右之后,通信時延就會超過100毫秒,此時對小車的控制就會變得不太靈敏,這里也體現(xiàn)出了局域網(wǎng)通信在這里的局限性。實時遙控小車運動功能測試通過在控制端按下鍵盤按鍵來實時遙控?zé)o線

溫馨提示

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

評論

0/150

提交評論