基于單片機的六足機器人控制系統設計
摘 ?要
本設計主要是基于單片機的六足機器人控制系統設計,綜合分析六足機器人的結構、步態和控制算法,結合云端服務器、WIFI 技術、藍牙技術、語音識別技術和手勢識別技術進行多種控制模式的設計,并提出不同應用場景的不同構建方案。
本系統的硬件設計分為主控板和舵機控制板兩部分。主控板主要負責各種控制模式的數據處理和顯示,舵機控制板主要負責舵機轉動角度的控制,兩板通過串口進行數據的交互。主控制板采用 STM32F103VET6 芯片,舵機控制板采用 STM32F103R8T6 芯片,兩者都基于 ARM 的 Cortex M3 內核進行設計的。主控制板的硬件電路設計主要有啟動電路、晶振電路、下載電路、復位電路、穩壓電路以及各個模塊接口電路。在 Altium Designer16 軟件中進行原理圖的繪制和 PCB 的繪制,打樣后進行焊接并完成整體的測試。
本系統的上位機主要是手機 APP,其開發環境是 Android Studio,采用 C#作為云端開放平臺語言,Java 語言作為移動客戶端設計語言,通過 Java 語言的編寫實現手機客戶端的數據接收和發送,最終實現基于云端和藍牙的控制系統上位機板塊的設計。本系統下位機的軟件設計是在 Keil5 編程環境下進行的,參考 STM32F1 的手冊和各個模塊的數據手冊進行程序的編寫,最終實現云端控制、藍牙控制、語音控制和手勢控制這四種控制系統設計。
關鍵詞:六足機器人;PWM 調節;單片機;云端
第一章 緒 論
一、設計的背景和意義
當今最火熱的人工智能、大數據這些新概念都是機器人發展的基礎,也是人類社會未來的發展趨勢。直至今天,人類研制出各種機器人,它們針對特定的領域和特定的場景有著特定的功能。比如工廠里的機械臂、高空作業的無人機以及刑偵上的排爆機器人等等。這些機器人的出現,促進了人類社會的發展。事實上,除了這些特定場景外,機器人逐漸進入人們的日常生活中。比如現在市場上特別流行的掃地機器人、格斗機器人以及跳舞機器人等等。我們可以看到,隨著生活水平的提高,人們非常希望機器人能改善自己的生活質量,能讓自己的生活更加便利。而這一切的技術都體現在設計什么結構的機器人以及對機器人進行怎么樣的控制。
在機器人的結構上有很多種形態,目前移動類的機器人主要是三種形態:輪式、履帶式和足式的。而目前足式機器人主要有分為兩條腿、四條腿、六條腿和八條腿的。本系統主要采取六條腿的機械結構,因此對六足機器人的結構和步態的分析具有一定的意義,這是本系統分析的重點之一。確定結構后,剩下就是通過什么樣的方式來控制。因此,設計機器人的控制系統也具有很大價值。
二、國外研究現狀分析
早在上幾個年代,國外就已經開始展開足式機器人的研究。1968 年,美國的研發出了可以多步態行走的機器人。隨后,美國于 1983 年研發出了六足行走機器人,日本于 1985 年研發出了擁有 8 個自由度的機器人。近十年來,美國和日本的機器人技術發展比較迅速。目前,美國的波士頓公司做的機器人比較受歡迎,他們公司做的最好是雙足人型機器人和四足的機器狗。人型機器人不僅可以雙腳跳,奔跑,甚至可以跟人一樣后空翻,穩定性非常好。機器狗是高度模仿現實生活中的狗,不僅可以開門,奔跑還可以自主上下樓梯,其穩定性和智能性也是業內領先的。直至今日,機器人開始滲入我們生活的每一個角落,這也就促進了機器人技術的快速迭代與更新。隨著機器人技術的發展,多足機器人在特定環境下的避障、搜索目標、規劃路線等問題逐漸成為研究工作者的研究重點。
三、國內研究現狀分析
雖然國內的機器人發展的時間比較短,但經過各方面的努力,國內對機器人的研究已進入自主研發階段,尤其是上海交大、哈工大、華中科大和中科大等知名院校的研究團隊均已處于國內領先水平。早期,國防科技大學研制出了蛇形機器人、華中科技大學出了多足步行機器人以及上海交通大學的“章魚”六足機器人。近期,上海交通大學研制出了可自主爬樓梯的六足機器人和中國科學技術大學研制出了人型機器人“佳佳”。除了科研領域,國內機器人的發展還在消費領域、工業領域和教育領域有了快速的發展。在教育領域,北京的公司研發了一款全地形的六足的機器人 HEXA,這款機器人可以用于小孩子的編程教育,這對我國教育行業有一定推動作用。正是因為這樣,國內各領域紛紛加大對機器人技術開發和研究的力度,大力去扶持機器人行業的發展,同時,各領域從事機器人研究的科研工作者正從不同方向去研究探索機器人技術,進而快速地推動了機器人技術的迅猛發展,使其向著更加高深的領域發展。
四、本文主要設計內容
傳統的移動機器人結構有輪式的、履帶式的以及足式的。輪式機器人的輪式結構決定了它在平坦的地面運行比較快且比較穩定,但其缺點是在崎嶇的路面運動效率非常低下。履帶式機器人是對輪式機器人的進一步升級,可以在崎嶇地面上緩慢運動,但是由于履帶式機器人的機動性比較差,因此在崎嶇地面車身容易晃動,依然無法解決穩定性的問題。足式的機器人是仿造昆蟲結構進行改良而成。這類機器人不僅可以在崎嶇地面進行靈活運動,還可以像昆蟲一樣在很多復雜環境進行工作,比如爬樓梯等等。在對機器人結構設計的前期,我們做了大量的分析,最終決定采取類似螞蟻結構的六足機器人。確定機器人的機械結構后,本系統還對六足機器人的步態進行了分析以及結構穩定性的分析,最終確定采用三角步態的形式進行機器人基本動作的設計。因此,機械結構的分析和步態的設計是本設計的主要內容之一。
除了結構上的分析和步態上的設計,本系統還對多種控制模式進行分析和設計。傳統的控制系統一般都是基于 PC 端進行控制,而很少有基于云端的控制系統設計和近距離人機交互控制系統設計。隨著云端技術和各種傳感器的發展,本設計希望在傳統的控制模式的基礎上進行進一步創新。本設計前期對傳統的控制模式進行了大量的資料收集,然后對這些傳統控制模式進行分析和學習,最終實現基于云端的遠程控制、手機客戶端藍牙控制和近距離的人機交互控制(語音識別交互控制和手勢識別交互控制)。因此,對六足機器人的控制系統的設計也是本設計的主要內容之一。
最后,在整體系統穩定性調試和測試成功后,本系統還針對現實生活中不同應用場景提出不同的應用方案,這也是本設計的意義所在。本設計對六足機器人的分析和設計是為后續的不同應用場景下使用的前提,而為了更好的擴展性,本設計在完成基本的控制系統設計的基礎上提出較為實用的應用方案。為了實現整體系統的擴展簡便性,本系統的數據采集和檢測部分并不固定某個傳感器或某個檢測模塊,而是在 PCB 板設計的時候預留出相關通信接口,然后對各種傳感器和檢測模塊進行模塊化配置,這也是本設計的創新之處。基于這樣的設計,后續的不同應用場景下只需要進行不同檢測模塊或者不同傳感器的模塊化搭配即可,大大降低用戶的使用門檻,提高了系統的簡便性。
第二章 系統方案設計
五、控制系統方案設計
遠程控制方案設計
遠程控制方案是基于云端的控制方案,是結合最新的云端技術進行開發的方案。本系統的舵機控制系統與控制模式選擇的控制系統是分開來設計的,因此在對遠程控制方案進行設計的時候,我們只需要關注 WIFI 模塊如何與云端服務器連接,手機 APP 如何與云端服務器連接,手機 APP 如何與主控制板的 WIFI 模塊進行數據交互。
該六足機器人結構上搭載的 WIFI 模塊與主控板的主控芯片是用串口接口進行數據交互的,然后根據查閱相關 AT 指令,發送或接收相關 AT 指令可以配置 WIFI 模塊,配置完成后便可使用無線透傳模式來傳輸數據。數據的流動過程是先從手機 APP 開始的,手機 APP 通過 WIFI 將數據發送到遠端服務器,然后云端服務器做轉發的作用,將數據通過互聯網發送到六足機器人所在的局域網的路由器,然后路由器再一次進行轉發將數據發送到六足機器人機械結構的 WIFI 模塊上,WIFI 模塊通過串口將數據傳輸到主控芯片,主控芯片對數據進行解析,解析完成后發送相關的動作組指令到舵機控制板,最終實現機器人相關動作組動作。
遠程控制方案是結合當前最新的技術進行開發的,只要六足機器人所在區域有網絡,用戶的手機在世界任何地方通過手機流量即可實現遠程控制。再加上六足機器人搭載視頻模塊可以進行遠程監控,因此可以實現真正的遠程控制,這為后面的運用在不同場景下的方案設計起到很大的作用。當然,這也是本設計在控制系統方面重點要設計的內容。
圖 2-1 遠程控制方案流程圖
藍牙控制方案設計
藍牙控制方案是在調好的舵機控制板的基礎上進行進一步的控制系統設計。本人獨立完成手機端 APP 的設計,并實現手機客戶端藍牙跟舵機控制板的藍牙模塊進行通信的功能,然后舵機控制板的藍牙模塊收到手機端的數據后再把數據通過串口通信傳輸給舵機控制板,從而實現對應的點控或者聯動控制。與此同時,通信是雙向的,因此舵機控制板在收到數據后可以把數據通過藍牙模塊發送到手機客戶端,從而實現應答功以保證數據傳輸的穩定性。除此之外,手機客戶端還可以采集舵機控制板上的電源模塊的電量,進而實現電量的實時顯示和及時提醒用戶進行充電。
藍牙控制系統的設計方案非常適用于沒有網絡的地方,這樣的端對端的短距離的無線通信方式不僅可以脫離傳統的紅外手柄控制,而且可以大大提高在近距離無網絡狀態下的控制穩定性。
圖 2-2 藍牙控制方案流程圖
人機交互方案設計
本系統在實現遠程云端控制和短距離藍牙控制的基礎上再添加了語音識別和手勢識別功能,一方面是綜合考慮控制系統方案的穩定性,以防止在遠程云端和短程藍牙都出故障的情況下系統仍然可以正常工作,另一方面是可以大大提高用戶的人機交互效果,從娛樂的角度來說很大程度上提高了用戶的體驗效果,豐富了機器人的人機交互功能。實際上,通過語音識別和手勢識別的控制系統方案設計,系統的穩定性可以一定比例的提高,這也是從整體的穩定性考慮的。
語音識別控制系統方案是通過語音識別芯片進行語音的采集,然后將采集的信息轉換成文本的形式,再通過控制芯片進行轉換,控制芯片將數據傳輸給主控芯片,主控芯片對數據進行解析處理再傳給舵機控制板,舵機控制板對信息解析并執行對應的動作,從而實現對六足機器人的語音識別控制。
手勢識別控制系統方案是通過手勢傳感器進行手勢數據的采集,將人的手勢動作采集后進行解析,然后把解析的結果傳送到主控芯片,主控芯片對數據進行處理,最后傳給舵機控制板,從而讓相關動作組發生對應的動作。
人機交互方案非常適用于遠程云端和短程藍牙出故障的情況或者娛樂性比較強的場合,這樣的人機交互方式不僅可以提高系統的穩定性,而且在人機交互上大大提高了用戶的體驗感覺。
圖 2-3 人機交互方案流程圖
六、應用場景方案設計
系統運用方案說明
本系統硬件部分預留出模塊或傳感器的通信接口,采用模塊化配置的方式來設計檢測部分,用戶可以根據不同的任務,不同的場景進行不同的模塊搭配,通過不同的傳感器進行數據的采集,可以實現溫濕度、有毒氣體、可燃氣體、生命圖像、坐標位置等等數據的采集,從而達到不同場景不同功能。
崎嶇地形探測方案
本系統在不添加其他模塊配置的情況下即可實現復雜地形的探測功能,因為該六足機器人因為本身的六足結構可以非常靈活在崎嶇地形運動,然后其本身還帶有遠程視頻模塊,因此可以實現遠程視頻實時顯示并可以通過云端實現遠程的控制。所以,只要是在一些有網絡但道路崎嶇的地形,都可以讓該六足機器人進行現場的探測,用戶可以在遠程進行現場的觀察。
圖 2-4 崎嶇地形探測方案流程圖
震后救災搜尋方案
該六足機器人如果需要運用于地震后的救災搜尋工作中則需要進行個別傳感器和模塊的搭配配置。比如生命探測模塊、GPS 模塊和聲音探測器等等。通過生命探測器可以對地震后的地面進行生命的搜尋,由于它可以靈活行走在一些工作人員無法進入的地方,所以很大程度上提高了搜尋的效率及面積。一旦檢測到有生命,馬上通過 GPS 模塊進行定位,然后通過云端把坐標發送到工作人員的手機客戶端,從而實現精確的災后生命搜尋定位功能。除此之外,還可以通過聲波的檢測來判斷是否有生命。當然,還可以通過它來進行食物的運輸或者儀器的運輸。
圖 2-5 ?震后救災搜尋方案流程圖
科研探險勘測方案
該六足機器人如果需要運用在科研上進行探險勘測,則需要根據工作人員需要進行添加特定的檢測模塊。比如,在一些輻射比較大的地方或者地形險惡的地方,科研人員無法進入,則可以讓該六足機器人進入進行勘測,然后科研人員遠程進行現場的勘測。在此基礎上科研人員只要搭配對應的采集模塊或者對應的傳感器即可,比如要檢測某礦物質,則搭配檢測該礦物質的傳感器。
圖 2-6 ?科研探險勘測方案流程圖
工廠巡檢預警方案
該六足機器人如果想要運用在工廠上進行遠程巡檢預警,可以在其身上搭載對應的巡檢檢測模塊,尤其是一些常年存在有毒氣體的化學工廠。一旦運用了該六足機器人,工作人員可以大大提高自己的身體健康質量。工作人員不需要實地去考察,他只需要在遠程對六足機器人進行控制,然后手機客戶端可以實時顯示現場的環境各種指標以及調用攝像頭進行現場的圖像顯示。
圖 2-7 ?工廠巡檢預警方案流程圖
第三章 硬件系統設計
七、機械結構的分析
足式機器人一般是兩條腿、四條腿、六條腿和八條腿,兩條腿和四條腿平衡問題不太好解決,而八條腿不夠靈活,因此采用六條腿的結構。六腿結構的機器人動作的時候每次都有三條腿作為支撐點,因此比較穩定。本系統的結構分為軀體和肢體兩個部分,軀體主要用來盛放控制板、傳感器和電池,而肢體主要分為六個腿,每條腿有三個自由度,也就是每條腿有三個舵機,因此整個系統需要對十八個舵機進行協調控制。本系統的機械結構并非自主設計的,因為主要的任務不是機械結構的設計,所以采取定制機械結構的方法來實現機械機構的搭建。整體的機械結構圖如下圖所示,每個腿都有三個舵機,一共 6 條腿,最后組成整個六足機器人的整體機械結構。
圖 3-1 機械結構設計
八、主控芯片的分析
主控制板采納 STM32F103VET6 作為主控芯片是因為該芯片性能較好,而且擁有多種通訊接口,比如 USART、IIC 和 SPI 等等。對于舵機控制板采用的是 STM32F103RBT6,該芯片也是 STM32F1 系列的,但由于舵機控制板僅僅需要對 18 個舵機進行控制以及預留 3 個串口進行其他通信,因此 STM32F1RBT6 完全足夠。舵機控制板主要是通過 PWM 進行占空比的調節從而實現舵機的角度調節,根據舵機轉動的角度,再進行 18 個舵機的整體協調來實現對應的動作。當然,因為舵機控制板需要對動作進行存儲,因此還用到了該芯片的存儲器,其 128K 的程序存儲器已經足夠。主控板跟舵機控制板的通信是通過串口進行通信的,之所以分開而不采用一個板子是因為考慮到后期的功能擴展性以及考慮程序編寫的方便性。這樣分開后,只要兩個板子直接設好對應的波特率以及寫好通信的協議即可實現兩者之間的數據通信,項目的開發效率可以大大提高。
圖 3-2 主控芯片引腳功能
圖 3-3 控制模塊正面
圖 3-4 控制模塊反面
數字舵機的選型
本系統采用的是 LDX-218 的數字舵機,只要發送一次信號就能鎖定角度不變,這也就降低了程序編寫的難度。因為模擬舵機須要持續發送 PWM 才能保持鎖定角度。除此之外,模擬舵機還存在精度較差、線性度不好的缺點,而數字舵機可以提高控制精度、提高線性度以及響應速度比較快。該數字舵機工作電壓是 6-8.4V,轉動的角度是 180 度,對于六足機器人來說已經足夠。該舵機的 PWM 調節角度周期是 20ms,且成線性關系,具體如圖 3-6。
圖 3-5 數字舵機
圖 3-6 舵機指數
模塊接口電路設計
WIFI 模塊接口電路設計
本系統采用 ATK-ESP8266 WIFI 模塊,該模塊是串口 WIFI 模塊,只要通過串口發送 AT 指令即可對 ATK-ESP8266 WIFI 模塊進行配置。該模塊有 AP 模式、STA 模式和 AP+STA 模式,電路的設計主要是在接口電路的設計,將預留的串口接口與 ESP8266 芯片對應引腳連接,最終實現兩者之間的正常通信。
圖 3-7 WIFI 模塊接口電路
藍牙模塊接口電路設計
藍牙模塊是基于 TLSR8266F512 芯片進行研發的低功耗 BLE 射頻模塊,其通信方式是通過串口發送 AT 指令來通信,因此使用非常方便。具體的配置流程只要參考 AT 指令及模塊使用手冊發送相關 AT 指令即可建立通信。本接口電路也是需要把串口接口留出來,其他的就是 CC2540 芯片的基本電路設計,比如復位電路、晶振電路等等。
圖 3-8 藍牙模塊接口電路
語音播放芯片外圍電路設計
語音播放模塊負責語音輸出,比如六足機器人的語音輸出和音樂的輸出。本設計一開始采用的是語音合成技術,就是將文本輸出為語音,但是這類方法一方面存在離線庫覆蓋量不夠大而導致有些字無法合成的缺點,另一方面的缺點是合成的語音聽起來非常別扭,語速語調都存在一定的缺陷。綜合考慮之后,我們覺得采取直接播放音頻的方式進行語音播放。這樣的方式可以規避語音合成技術存在的兩個缺陷。用戶只要把自己想要播放的音樂以及錄好的語音音頻存到 SD 卡里面,然后對語音播放模塊發送相關指令即可實現相關語音的播放或者相關音樂的播放。
為了方面擴展與通信,本系統采用的語音播放模塊依然是通過串口進行通信,這樣的處理方式不僅非常適合本系統,而且對以后的擴展性也是非常重要的。語音播放模塊是直接與舵機控制板進行連接的,這樣可以實現在動作的同時進行語音播放,兩者并不會產生沖突。這也是為什么把舵機和多種控制模式的數據處理分開。只要主控制板發送指令給舵機控制板,舵機控制板在執行相關的動作時也會通過串口發送指令,這樣就可以實現語音的播放功能。
本電路主要是語音播放芯片 SYN6288 的外圍電路以及通信接口的設計,具體的電路圖如下。
圖 3-9 語音播放芯片外圍電路
語音識別芯片外圍電路設計
本系統采用的是 YS-V0.7 模塊,該模塊集成 STC11L08XE 和 LD3320 兩款芯片。LD3320 芯片主要負責語音的采集和識別,通過這個芯片的處理可以將采集到的語音信息轉換成文本的形式,然后將這個處理過的信息發送到 STC11L08XE 芯片。STC11L08XE 芯片主要負責信息的處理和串口轉發功能。本芯片的外圍電路設計是需要跟 STC11L08XE 芯片進行通信,語音采集后是先經過 STC11LO8XE 芯片處理后才與主控板進行通信。本電路的設計主要是 LD3320 芯片的外圍電路,具體如下。
圖 3-10 語音識別芯片外圍電路
手勢識別接口電路設計
人機交互模式需要用到手勢的識別技術,因此需要搭配手勢識別傳感器。本系統主要采用 ATK-PAJ7620 和 APDS-9960 兩款手勢識別傳感器。這兩塊手勢識別傳感器都是通過 IIC 協議來通信的。這兩款傳感器可以識別 9 種手勢,其中本系統主要用到的有上、下、左、右、前、后這 6 種手勢。本電路設計是對外圍電路和接口電路的設計。
圖 3-11 手勢識別接口電路
九、遠程視頻模塊介紹
一開始本系統打算采用常見的智能小車攝像頭進行視頻監控,但是這類攝像頭基本不開源,這對本系統的開發造成了很大的麻煩。而市面上開源的攝像頭模塊基本都不支持遠程傳輸,因此不能進行云端的控制。經過綜合分析,最后決定定制威視達康這家公司的攝像頭。這個攝像頭可以進行遠程的監控,還留出了 SDK 接口給開發者進行調用,因此非常有利于項目開發。這個攝像頭可以自由地上下左右旋轉,基本可以全方位覆蓋監控范圍,還支持夜視、錄像等功能。
圖 3-12 攝像頭
十、各種傳感器的說明
紅外傳感器
本系統如果需要進行紅外避障的時候可以考慮搭配此傳感器進行避障。該傳感器對光線的適應能力相對較強。通過發射紅外線并接收反射的信號來判斷前面是否有障礙物。本模塊屬于數字量開關,數據處理后出來的只是高低電平的數字量。因此,主控板只要用一個引腳進行采集高低電平即可判斷前方是否有障礙物。
聲音傳感器
聲音傳感器主要是根據聲音的震動原理來判斷聲音的有無或者特定聲音頻率的聲音,正是這樣的原理,本系統可以使用在搶險救災的工作中,通過聲音傳感器來判斷災后地區是否還有人。這個傳感器輸出形式是數字量,也就是高低電平,有聲音的時候高電平,沒有聲音的時候低電平。因此使用非常方便,只要主控板用一個引腳進行采集即可實現聲音的判斷。這也就是讓六足機器人在聽覺上有了一定的補充。
光敏傳感器
本系統如果在某些場合需要進行采光判斷,那么這個傳感器無疑是最好的選擇。該光敏傳感器能夠監測周邊的光照強度,還能感知光源方向。此傳感器也是開光量的輸出形式,因此通信方法和上面的傳感器類似。
超聲波傳感器
本系統如果需要進行距離測試或者避障,則需要搭配超聲波傳感器。此傳感器采用 IO 口 TRIG 觸發測距,傳感器自動發送 8 個 40khz 的方波,實時監測有返回的信號,則產生高電平,且持續一段時間。
溫濕度傳感器
本系統可以搭配 DHT11 傳感器進行環境的溫濕度檢測。DHT11 傳感器有四個引腳,其中電源、地、信號線和一個懸空的。信號的傳輸是單總線的形式進行串行傳輸。如果使用該傳感器,那么其硬件電路的接口電路設計如下圖所示。
圖 3-13 DHT11 接口電路
氣體傳感器
本系統在對環境氣體進行檢測時可采用不同的氣體傳感器,比如需要檢測 CO 的話則選擇 MQ-7 CO 傳感器,比如檢測空氣質量情況則選擇 MQ-135 模塊。用戶可以根據自己的檢測需求搭配對應的傳感器。
圖 3-14 MQ-7 傳感器電路
十一、主控板電路設計
總體介紹
本芯片是采用的 STM32F103VET6,結合本系統的需要,留出了 5 個串口接口、2 個 SPI 接口、6 個 IIC 接口,因此在硬件電路設計的時候要設計這些通信接口電路。同時還有基本的最小系統電路,比如復位電路、下載電路、降壓電路、啟動電路等等。
晶振電路
本電路采用的 8M 無源類型的晶振,穩定性比有源類型的要好,電路中還有兩個 20pF 的負載電容。這個電路是為芯片提供時鐘頻率,因此非常關鍵。
圖 3-15 晶振電路
復位電路
復位電路主要是用來復位系統,因為考慮到不可抗因素而導致系統奔潰,這種情況需要進行強制復位來恢復正常使用狀態。
圖 3-16 復位電路
降壓電路
降壓電路主要功能是將 5V 降到 3.3V,這樣設計是因為有些傳感器需要 3.3V 的電壓。
圖 3-17 降壓電路
IIC 接口電路
IIC 接口電路主要是用來接手勢識別傳感器,本系統進行硬件設計的時候考慮到以后的系統擴展性,預留了 6 個 IIC 接口電路,而本系統的 IIC 通信是通過軟件進行模擬的,因此任何兩個管腳都可以進行通信,只是本系統方便模塊或傳感器的連接而預留出接口,具體的接口電路如下圖。
圖 3-18 IIC 接口電路
SPI 接口電路
SPI 接口電路主要是考慮到以后的系統擴展性而預留的接口,因為有些模塊的通信方式是通過 SPI 進行通信的。目前來說,本系統的控制部分是不需要用到此接口,但是本系統在進行硬件電路設計的時候預留出來方便不同應用場景的模塊化配置,具體的接口電路如下圖。
圖 3-19 SPI 接口電路
USART 接口電路
USART 接口電路是本系統運用最多的接口電路,也是最常見的通信接口電路,因此在硬件電路設計的時候對 USART 接口電路的設計尤為關鍵。雖然 USART 的通信方式只要三根線即可,也就是 TX,RX 和 GND 這三根線,但是考慮到有些模塊本身的引腳有多余的懸空腳,因此會出現有 6 個引腳的模塊或者 4 個引腳的模塊。綜合考慮硬件電路的簡便和美觀,本系統采用針對性的接口設計,這部分的電路是固定的,以后基本不會改動。比如,USART1 用來跟舵機控制板通信,USART2 用來與語音識別模塊通信,USART3 用來與 WIFI 模塊通信等等。經過分析和設計,具體的接口電路如下圖。
圖 3-20 串口接口電路
十二、PCB 板設計及繪制
本系統采用 Altium Designer 16 進行 PCB 的設計。PCB 的繪制的難點主要在于 PCB 的布線布局。前期我們學習他人的原理圖,然后開始繪制本系統的原理圖。繪制完原理后就開始繪制部分元件的封裝。最后把繪制好的原理圖導出到 PCB 中,剩下的就是布局布線的問題了。
本系統的 PCB 板在設計面積大小時嚴格測過六足機器人的軀體平臺的面積大小,最終確定板子的面積大小為 80.255mm*117.255mm。除此之外,考慮到系統的美觀,主控板 PCB 和舵機控制板 PCB 兩者采用銅柱相連的方式,因此在 PCB 設計的時候要留出銅柱的孔。
圖 3-21 PCB 板三維效果
圖 3-22 PCB 板二維效果
第四章 軟件系統設計
十三、軟件開發平臺介紹
十四、開發環境
本系統采用的是 Keil uVision5 軟件進行六足機器人的控制系統設計,并使用 C 語言進行程序編寫。除此之外,程序采用 C#語言,以 Visual Studio 作為 IDE,在 Windows 環境下進行初步開發云端平臺 Net core 跨平臺應用程序,使用 Android studio 軟件開發平臺來實現監控操作系統平臺 APP 的編程。
圖 4-1 Keil uVision5 編譯環境
圖 4-2 Visual Studio 開發平臺
十五、系統整體設計框圖
十六、圖 4-3 系統整體流程
十七、步態的設計和動作編寫
通過大量的調查和分析,我們知道六足機器人一般有三足步態、四足步態和波動步態。綜合考慮本系統的機械結構的穩定性,決定采用三足步態進行設計。本系統首先對步態進行分析,然后自主設計出前進、后退、左側走、右側走、左轉、右轉這六個基本步態,然后其他的動作都是基于這六個基本步態進行改變和組合而成,因此對基本步態的分析和設計具有很大的意義。下面將展示兩個典型步態的設計流程,其余的步態設計流程類似。
首先,本系統先對前進步態進行設計。綜上可知,本系統采用的是三足步態的設計,機器人的運動過程中由一邊前腿、后腿與另一邊中腿構成的兩部分,一部分的三條腿先動作,另一部分的三條腿做支撐,正是這樣的三足步態交替動作才能實現機器人的穩定移動,具體的流程如下圖所示。前進的步態有 9 足步態圖,從 A 到 I,其中黑色的空心圓的腿代表的是支撐的動作,也就是這條腿的狀態是與地面接觸的,而紅色的斜桿的腿代表抬起動作的腿,也就是這條腿的狀態是離開地面的。
其次,本系統對右轉步態進行設計。具體的設計流程如下圖,同樣是黑色的空心圓的腿代表的是支撐的動作,也就是這條腿的狀態是與地面接觸的,而紅色的斜桿的腿代表抬起動作的腿,也就是這條腿的狀態是離開地面的。
圖 4-4 前進步態動作設計
圖 4-5 右轉步態動作設計
六足機器人的動作組編寫是基于上述的步態設計來實現的。動作組編寫可以通過上位機進行調試,而上位機的編寫是根據 PWM 調節占空比的原理來編寫的,因此采用上位機可以快速方便地對機器人的動作進行編寫,這非常有利于提高開發的效率。通過上位機來找到合適的值,然后程序里面可以參考這個值來進行編寫,這樣的方法非常有利于機器人動作的編排。
圖 4-6 上位機界面舵機 ?
圖 4-7 上位機界面
十八、遠程控制程序設計
上位機的程序編寫
上位機主要是手機 APP 的編寫,然后 APP 跟下位機協商好通信協議即可實現兩者之間的數據交互,以下兩張圖是手機 APP 的界面圖。
圖 4-8 手機 APP 首頁
圖 4-9 手機 APP 控制界面
手機 APP 是用戶管理和控制機器人的人機交互的界面,它的主要功能是控制機器人端的各種動作,各種參數的輸出與錄入、機器人端與云端服務器連接狀態的顯示等等。互聯網的主要功能是充當設備端與云端監控平臺數據傳輸的媒介,主要負責將設備端的傳感器數據與自身系統的參數回傳到遠端監控平臺,同時,也可以將云端監控平臺的控制命令發送到設備端。設備端即是六足機器人本身,其主要負責相關動作的執行以及特定環境下的信息采集工作,并對數據進行處理加工后,通過網絡反饋到遠端檢測平臺,還有負責接收來自云端的控制命令等等。
下位機的程序編寫
遠程控制模式是基于云端進行遠程控制的,六足機器人身上搭載 ESP8266WIFI 模塊,通過 WIFI 連上云端服務器,然后手機也聯網,通過這樣的方式來實現遠程控制。這一塊的程序是實現 STM32F103VET6 芯片與 WIFI 模塊的數據交互,并配置相關的 AT 指令來設置 STA 模式中的 TCP-CLIENT 模式。
整個工程里面有兩個文件是與 WIFI 相關的,一個是 common.C 文件,另一個是 WIFISTA.C 文件。下面是 WIFI 配置的流程圖。
在 common.C 文件里面首先是需要寫好路由器的名稱和密碼。具體設置如下:
const char* WIFISTA_ssid="AAAA"; //連接路由器
const char* WIFISTA_encryption="wpawpa2_aes"; //連接加密方式
const char* WIFISTA_password="88888888"; //連接密碼
然后進行 WIFI 模塊的連接,程序如下:
while(ATK_8266_SEND_CMD("AT","OK",20)) //檢查WIFI模塊是否在線
{ATK_8266_quit_trans();//退出透傳ATK_8266_SEND_CMD("AT+CIPMODE=0","OK",200); //關閉透傳模式Show_Str(40,55,200,16,"未檢測到模塊!!!",16,1);delay_ms(800);LCD_Fill(40,55,200,55+16,BLACK);Show_Str(40,55,200,16,"嘗試連接模塊...",16,1);
}
while(ATK_8266_SEND_CMD("ATE0","OK",20));
連接一旦成功后,將進入這個函數:ATK_8266_WIFISTA_TEST(),并由此跳入到 WIFISTA.C 文件。進入 ATK_8266_WIFISTA_TEST()函數后,首先需要做的是配置工作模式為 STA 模式,配置完成后需要輸入云端服務器的 IP 地址和端口號來連接。
這樣,WIFI 的配置過程就完成了,建立了連接后剩下的就是調用對應的串口函數進行數據的發送和接收,然后分析處理接收到的數據,處理結束后傳輸對應的機器人動作指令來實現動作。
圖 4-10 WIFI 配置流程
通信協議的說明
本系統的云端通信協議具體如下表。通信協議的幀頭主要是方便識別數據包,下位機只有接收到 0xDA 幀頭的數據包才會執行相應的動作,而手機 APP 接收到 0XDB 才會確定對方收到數據。ID 主要是用來標識設備的 ID,方便以后擴展用。包序號是用來應答的,接收到對應的數據然后應答時也發送對應的包序號,以此來確保數據的交互正確性。CRC16 校驗是用來校驗數據包是否發生損壞,如果校驗不通過,則要求重發,該數據包丟棄。
幀頭 | ID | 類型 | 包序號 | 數據長度(4Byte) | 數據 | CRC16 校驗(2Byte) | 結束符 |
0xDA | 0x00 | 0x01 控制指令 | 0x00-0xFF | 0xFF 0xFF | |||
0xDA | 0x00 | 0x03 心跳包 | 0x00-0xFF | 0xFF 0xFF |
幀頭(1Byte) | 機器人 ID(1Byte) | 類型(1Byte) | 包序號(1Byte) |
0xDB | 0x00 | 0x00(ACK) | 0x00-0xFF |
本系統的舵機控制板與主控制板的通信協議說明如下表,其中指令有 0x06 代表執行動作組指令,后面的參數 0x08 0x01 0x00 代表 8 號動作組運行 1 次,0x07 代表停止指令,停止指令后面無需寫參數。
幀頭 | 數據長度 | 指令 | 參數 |
0x55 ?0x55 | 0x05 | 0x06 | 0x08 0x01 0x00 |
0x55 ?0x55 | 0x05 | 0x07 | 無 |
本系統的藍牙模塊與手機 APP 的通信協議與上述的通信協議類似,其中指令有 0x06 代表執行動作組指令,后面的參數 0x08 0x01 0x00 代表 8 號動作組運行 1 次,0x07 代表停止指令,停止指令后面無需寫參數,在此基礎上還添加了查詢舵機控制板電量的指令,其手機端發送格式為 0x55 0x55 0x02 0x0F,舵機控制板的應答格式如下表,參數中的 0x4C 代表電壓的低八位,0x1D 代表電壓的高八位。
幀頭 | 數據長度 | 指令 | 參數 |
0x55 ?0x55 | 0x04 | 0x0F | 0x4C 0x1D |
藍牙控制 APP 設計
本系統采用的藍牙模塊也是通過串口進行通信的,其配置過程和 WIFI 類似,也是通過發送相關的 AT 指令便可配置藍牙模塊。六足機器人可以用無線的方式與手機 APP 進行數據交換。通過對應的 API 連接到藍牙設備,從而實現點到點和多點無線功能。綜合考慮系統的穩定性,我們將藍牙模式直接連接在舵機控制板上,這樣可以保證主控制板出現故障是六足機器人依然可以正常動作。之前在舵機控制板上有預留串口接口,因此非常適合直接與藍牙模塊進行串口通信。控制板接上藍牙模塊后對相關 AT 指令配置后便可通信。本部分主要介紹藍牙 APP 的程序編寫過程。
首先,配置啟動藍牙,檢查當前模塊是否已經啟用藍牙。其次,連接六足機器人,為了與六足機器人身上的藍牙模塊進行連接,我們需要協調服務器端和客戶端機制,讓 APP 開放服務器套接字,而機器人端的藍牙模塊發起兩者的連接。最后是接發收數據,成功連接后,APP 會有一個已連接的 BluetoothSocket 值。這樣的現象表明可以進行數據的共享了。
下圖是手機 APP 藍牙部分的界面圖,主要模擬游戲手柄做了一個搖桿,然后還有一些按鈕進行點動控制。藍牙控制模式主要分為工作模式和娛樂模式,不同的模式有不同的動作組進行編排。
圖 4-11 藍牙工作模式界面
圖 4-12 藍牙娛樂模式界面
十九、語音控制程序設計
語音識別部分主要是兩款芯片,一款是語音識別芯片 LD3320,另一款是數據處理芯片 STC11L08XE。LD3320 芯片的各種操作都是通過配置相關的寄存器來實現的,寄存器讀寫操作有 4 種方式,分別是軟件并行、硬件并行、軟件串行 SPI 和硬件串行 SPI。通過查閱寄存器的手冊我們可以對我們想要的功能進行配置。語音識別過程大致是先語音識別用初始化,然后寫入識別列表,再者開始識別并準備好中斷響應函數,最后打開中斷允許位。我們這里使用的是中斷的方式來進行觸發,一旦收到語音才會觸發中斷而執行對應的程序。首先,語音識別初始化的程序如下:
void LD_INIT_ASR()
{NLD_MODE=LD_MODE_ASR_RUN;LD_INIT_Common();LD_WRITE(0xBD,0x00);LD_WRITE(0x17,0x48);delay(10);LD_WRITE(0x3C,0x80);LD_WRITE0x3E,0x07);LD_WRITE(0x38,0xff);LD_WRITE(0x3A,0x07);LD_WRITE(0x40,0x00);LD_WRITE(0x42,0x08);LD_WRITE(0x44,0x00);LD_WRITE(0x46,0x08);delay( 1 );
}
其次是語音識別列表的程序,截取部分如下:
uint8 LD_ASRADDFIXED()
{uint8 k, flag;uint8 NASRADDLEN;
#define DATE_A 20 /*數組二維數值*/
#define DATE_B 100 /*數組一維數值*/uint8 code SRECOG[DATE_A][DATE_B] ={ "xiao hei",\"ting",\ "qian jin",\......"gei da jia chang shou ge"};uint8 code PCODE[DATE_A] ={ CODE_CMD,\CODE_STOP,\CODE_FORWARD,\......CODE_SING}; /*添加識別碼*/flag = 1;for (k=0; k<DATE_A; k++){if(LD_Check_ASR_b2() == 0){flag = 0;break;}LD_WRITE(0xc1, Code[k] );LD_WRITE(0xc3, 0 );LD_WRITE(0x08, 0x04);delay(1);LD_WRITE(0x08, 0x00);delay(1);for (NASRADDLEN=0; NASRADDLEN<DATE_B; NASRADDLEN++){if (SRECOG[k][NASRADDLEN] == 0) break;LD_WRITE(0x5, SRECOG[k][NASRADDLEN]);}LD_WRITE(0xb9, NASRADDLEN);LD_WRITE(0xb2, 0xff);LD_WRITE(0x37, 0x04);}return flag;
}
最后呈現出來的是開始識別的程序,具體如下:
uint8 LD_Run()
{EX0=0;LD_WRITE(0x35, MIC_VOL);LD_WRITE(0x1C, 0x09);LD_WRITE(0xBD, 0x20);LD_WRITE(0x08, 0x01);delay( 1 );LD_WRITE(0x08, 0x00);delay( 1 );if(LD_Check_ASR_b2() == 0){return 0;}LD_WRITE(0xB2, 0xff);delay( 1);LD_WRITE(0x37, 0x06);delay( 1 );LD_WRITE(0x37, 0x06);delay( 5 );LD_WRITE(0x29, 0x10)LD_WRITE(0xBD, 0x00);EX0=1;return 1;
}
二十、手勢控制程序設計
手勢識別這塊的程序的難點主要在于 IIC 協議,一般來說 IIC 有兩種,一種是硬件 IIC,一種是軟件 IIC。經過我們的分析,我們發現 STM32 的硬件 IIC 存在一定的 BUG,所以我們決定采用軟件 IIC,也就是按照手冊的要求來模擬 IIC 的時序,通過模擬時序來達到 IIC 通信的效果。
首先,我們需要對手勢識別模塊進行初始化,PAJ7620u2_INT()這個函數就是用來進行初始化的。在這個函數里面,有兩個函數非常重要,一個是 IIC 初始化函數 GS_IIC_INIT(),另一個是喚醒傳感器的函數 PAJ7620u2_WAKEUP()。
具體的 IIC 時序模擬主要是在 GS_IIC_INIT()這個函數里面進行配置,這里我們不展開來論述,主要是想講一下手勢識別的處理函數。因為本系統是分開兩個控制板來進行控制的,一個專門負責舵機的控制,一個負責各種傳感器或者模塊的控制,因此手勢識別功能采用的是點動控制的形式。手勢傳感器負責手勢的識別和信息的采集,然后通過 IIC 把信息傳給主控板上的主控芯片,主控芯片進行處理,然后發送對應的動作組指令給舵機控制模塊,這樣即可實現手勢識別功能。主控芯片的數據處理程序如下:
while(1)
{ status = GS_Read_NByte(PAJ_GET_INT_FLAG1,2,&DATA[0]);if(!status){GESTURE_DATA1 =(u16)DATA[1]<<8 | DATA[0];if(GESTURE_DATA1){switch(GESTURE_DATA1){case GES_UP:GESTURE_SEND_BUF[4]=0x01;break; //向上case GES_DOWM:GESTURE_SEND_BUF[4]=0x02;break; //向下case GES_LEFT:GESTURE_SEND_BUF[4]=0x07;break; //向左case GES_RIGHT:GESTURE_SEND_BUF[4]=0x08;break; //向右case GES_FORWARD:GESTURE_SEND_BUF[4]=0x14;break; //向前case GES_BACKWARD:GESTURE_SEND_BUF[4]=0x19;break; //向后case GES_WAVE:GESTURE_SEND_BUF[4]=0x0A;break; //揮動default:GESTURE_SEND_BUF[4]=0x00;break;}for(i=0; i<7; i++){ USART_SENDDATA(USART1, GESTURE_SEND_BUF[i]);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);}}}
液晶顯示界面設計
本系統為了保證系統的穩定性,最后決定在六足機器人身上再裝載觸摸屏進行觸摸控制,這就確保在無線控制設備出現狀況時可以維持機器人的正常動作。市面上的觸摸屏一般都是采用指令集進行液晶屏的顯示,而一開始設計的時候系統也是采用指令集屏,通過相關的指令配置來實現數據的顯示功能。
早期的液晶屏顯示界面如下:
圖 4-13 早期液晶屏顯示界面
后來,考慮到界面的美觀和系統的穩定性,本系統決定改用 VGUS 的組態屏,這個屏主要是通過寄存器和變量存儲器來進行配置,同時可以配合上位機進行圖形化界面的美化處理。
圖 4-14 組態屏上位機
圖 4-15 組態屏界面首頁 ?
圖 4-16 WIFI 模式
圖 4-17 藍牙模式
圖 4-18 人機交互模式
第五章 系統整體調試
遠程云端控制調試
云端控制的調試過程分為兩部分,分別是六足機器人的 WIFI 模塊和手機 APP 的 WIFI 通信功能。首先,先調試六足機器人的 WIFI 模塊。為了提高成功的概率,我們先用網絡調試助手來測試。網絡調試助手發送相關的指令來對六足機器人進行控制,調試成功后才進行手機 APP 的調試。
首先,我們先用 CRC16 校驗工具生成 CRC 校驗碼,然后通過網絡調試助手發送相關的指令,比如 DA 00 01 00 00 00 00 0F 61 63 74 69 6F 6E 3D 66 6F 72 77 61 72 64 3B 0C DD FF FF,其中校驗碼是 0C DD,最后的 FF FF 是結束符。
圖 5-1 CRC 檢驗碼生成軟件
圖 5-2 六足機器人模擬 TCP 客戶端
5-3 接收心跳包測試
圖 5-4 數據應答測試
圖 5-5 ?Android 開發環境調試
語音識別控制調試
語音識別模塊先通過 USB 轉 TTL 模塊連接到電腦,然后打開電腦的串口助手,對著語音識別模塊說對應的指令,串口助手會顯示對應的英文或者指令。本系統采用語音識別的口令模式,也就是先說口令,口令識別成功才能識別下一句。如果識別到口令“小黑”,則會在串口助手打印“6F 6B”,就是“ok”的十六進制,然后再說下一句“前進”,串口助手顯示:55 55 05 06 21 01 00 0D 0A,則說明識別成功。
圖 5-6 串口調試助手調試
手勢識別控制調試
手勢識別的調試先在正點原子的開發板上進行測試,我們在程序里寫了如果識別到對應的手勢則顯示對應的英文,比如手勢向上,則顯示“UP”,手勢向左,則顯示“left”,如果手勢動作和顯示的內容一致,則說明調試成功。然后將程序移植到本系統中,把顯示部分改為對應的串口指令便可執行對應的動作組。
圖 5-7 手勢向下調試
圖 5-8 手勢向上調試
動作組整體調試
本系統的動作組全部存在主控制板里面,然后對每一個動作組進行編號,這樣就可以非常方面地進行控制。這些動作組主要是以表演為目的,因此每個動作組都配有對應的音樂。
圖 5-9 六足機器人正面
圖 5-10 飛翔動作
圖 5-11 跳舞動作
圖 5-12 打招呼動作
致 ? ?謝
這次的畢設收獲很多。一方面是學習方法的改進,另一方面是理論知識的補充。這一切的收獲都要感謝學校和學院的支持,還有指導老師楊國慶老師的耐心指導。
在學習方法上,我從原來的只懂得不懂就問,慢慢地學會了不懂就百度。這段時間里,我做的更多的事情不是老是問同學怎么解決問題,而是通過逛論壇、看貼吧、加 QQ 群這些互聯網的形式來學習。現在很多技術都是開源的,因此互聯網上有很多資料,只要你能想到的問題,都能從這里找到你想要的答案。我想,這是新時代的自學能力的一種體現吧。既然堅定了走技術這條路,就應該運用科學方法,才能夠事半功倍。通過一點點的搜索,然后結合自身已經掌握的知識對當前的問題進行分析,最后把問題解決,這個過程是非常鍛煉一個人的思維能力和動手能力。在這一段時間里,我學會了耐住寂寞去尋找問題的答案,習慣了沉浸在互聯網的搜索引擎里。現在回頭看看,真的發現自己已經成長了很多。在此,要感謝互聯網,感謝互聯網上那些樂意分享自己的經驗的技術大牛。
在理論知識方面,我從以前的只會使用 51 單片機編寫一些簡單的程序,到后來我開始學著去理解指針,理解鏈表,然后開始學習 STM32。學習了 STM32 后開始對寄存器有了更深入的了解,對封裝庫也有了全新的認識。我從內核的了解開始,一點點接觸各種外設,比如串口、IIC、SPI、RS485 等等。每一次學習新的東西我都對芯片的底層技術有了更進一步的認識,我的知識體系架構在不斷的完善。再到后面我開始學習操作系統,開始知道操作系統的意義,這個過程讓我突然頓悟了計算機的世界原來是這樣的。最后的一個月,我開始去學習制作 PCB,學習如何繪制原理圖,也算是在硬件知識上的一個補充吧。總而言之,這幾個月的畢設讓我真的收獲很多很多,這為我后面的研究生生涯打下了很好的基礎。
最后,我要特別感謝楊國慶老師,他一直鼓勵和督促我不斷成長。我還要感謝我的朋友周善錦、丁旺和李豪同學,他們總是在我最失落的時候給我信心。當然,也要感謝學校和學院提供的學習環境,希望我能夠在碩士研究生的學習生涯再接再厲。