楊 軍
(四川師范大學,成都610101)
隨著科學技術的快速發展,機器人已經漸漸步入人們的實際生活之中,本設計所研究的遙控搬運機器人是眾多機器人中的一種。搬運機器人主要代替人完成物體的夾取、運輸、擺放工作,可工作于人類無法進入或對人體有害的工作環境。傳統搬運機器人多采用無線電或者紅外的方式來進行遙控,這種機器人操控范圍較小,并且需要特定的控制器。本設計主要研究基于WiFi網絡的無線遙控搬運機器人,利用WiFi網絡可以實現實時視頻圖像采集,以及機器人上的傳感器數據采集。采用WiFi網絡通信使得控制端多樣化,可用手機、電腦等具備WiFi功能的設備進行控制。此外,還可將機器人接入Internet來實現更遠距離的控制。
本設計服務器端采用移植了Linux操作系統的S3C6410,通過完成底層驅動的移植和編寫,實現對硬件的控制,其次移植了MJPGstreamer服務器和BOA服務器等實現圖像數據、控制信息的傳輸[1]。客戶端方面分別編寫了WEB版和Android版應用程序。系統功能框圖如圖1所示。

圖1 系統功能框圖
(1)MCU
本設計的主控器采用友善之臂公司的一款核心板,其主芯片S3C6410是三星公司基于ARM1176JZF-S核設計的嵌入式處理器。該核心板配置了256 MB DDR RAM,并且主頻為533 MHz,最高主頻可以達到667 MHz。通過將Linux操作系統移植到該核心板上來完成對硬件的管理與客戶端提供數據交換,響應客戶端的命令控制。
(2)伺服電機
采用的伺服電機為微型伺服馬達(又稱作舵機),主要應用于模型的動作控制,通過脈寬調制可以對其進行比較精確的控制。本設計采用TOROBOT公司生產的TR213舵機,其動態扭矩可以達到13 kg·cm,轉角范圍為180°,控制精度達到0.5°,工作電壓為4.8~7.2 V,其性能能夠滿足本設計的基本要求,所以選用兩個TR213配合夾持器完成物體的夾持工作。
(3)直流電機
直流電機用于控制機器人移動,本設計采用帶齒輪箱的直流電機,其減速比為1:120,工作電壓為3~12 V左右,7.2 V電壓下轉速達120 r/min,4個直流電機配合車體,最大負載可達到2 kg。
(4)WiFi網卡
無線網卡采用USB接口的必聯(B-LINK)BL-LW05-AR5無線網卡,其主芯片為RTL8188,并且外置了5 DBI的高增益天線,傳輸速度最高可達150 Mbps,實際傳輸距離較遠,并且支持AP模式。本設計通過移植該網卡的驅動、Hostapd以及DHCP讓機器人作為AP熱點供無線設備進行連接控制。
(5)攝像頭
攝像頭采用中星微ZC301P,USB接口,像素高達130萬,擁有6 mm的五玻鏡頭,62°視角,并且具有自動亮度、自動白平衡、伽馬校正功能。本設計中使用這款攝像頭來完成機器人前方視頻數據采集。
(6)壓力傳感器
為了采集機器人夾持器的壓力數據,本設計采用了FSR402薄膜壓力傳感器。該傳感器受力后會導致電阻變小,根據電阻值的變化可以得到壓力的變化,其允許的壓力范圍為100 g~10 kg,并且傳感器受力區域的直徑達1.27 cm。
(7)直流電源
為了完成物體的夾持、搬運、擺放工作,機器人帶有4路直流電機、2路伺服電機,耗電量較大,且負載時電流較大。為了使其能穩定正常工作,本設計選用了一款15C的航模電池,其容量為1 300 m Ah,標稱電壓為7.4 V,充滿電壓為8.4 V,最大電流可達16 A,配以LM338穩壓器可以穩定地提供5 A/5 V直流電源。
服務器端功能框圖如圖2所示。

圖2 服務器端功能框圖
核心板采用友善之臂公司提供的TINY6410,此核心板已提供Bootloader、Linux操作系統和文件系統。使用時只需要根據實際的需要裁減Linux系統即可,本設計采用的Linux內核版本為Linux2.6.38,編譯平臺為Ubuntu12.04,交叉編譯器為arm-linux-gcc-4.5.1。
(1)直流電機驅動
由于S3C6410只帶有兩路PWM輸出,而夾持器部分需要兩路PWM脈寬調制控制伺服舵機,因此直流電機部分采用定時器2來模擬PWM調制。設置定時器2每100 ms進一次中斷,在定時器中進行1~100計數,因此PWM周期為10 s,并有100個脈寬比可調,滿足直流電機調速控制。
(2)伺服電機驅動
伺服電機需要采用脈寬調制,通過調節20 ms周期內的占空比可以指定伺服電機的旋轉角度,其對應關系表略——編者注。
由于舵機的控制要求較高,本設計采用S3C6410自帶的PWM進行控制。設置PWM0和PWM1的周期為20 ms,通過調節PWM0和PWM1的占空比來控制伺服電機的工作。
(3)攝像頭驅動
ZC301為免驅的UVC視頻設備,為了實現視頻的采集,需要在編譯內核時選擇V4L2支持。
(4)USB WiFi驅動
本設計中的USB無線網卡采用RTL8188芯片,為使該設備能夠正常工作需要進行驅動程序移植。
(5)ADC驅動
電源電量以及FSR壓力傳感器數據測量需要ADC驅動的支持,由于系統中已含有該驅動,故只需要在編譯內核時選擇上即可。
Hostapd是Linux系統中無線訪問接入點的守護進程。它可以將無線網卡設置為AP模式,并且支持多種加密方式,提供了設備接入的身份驗證。在實際的使用期間,需要對其配置文件進行相應的修改。本設計中采用Hostapd結合RTL8188網卡完成AP熱點的搭建。另外,通過配置DHCP的配置文件并啟用該服務為接入機器人的WiFi設備分配IP地址,有效地避免了多個設備接入時的地址沖突問題。
本設計選用input_uvc作為輸入組件來使用V4L2從攝像頭獲取圖像數據,經JPEG庫對數據進行編碼之后,通過選用output_http作為輸出組件來輸出圖像數據。output_http組件實現了一個符合HTTP1.0標準的 WEB服務器,用戶可以使用HTTP協議獲取視頻信息。
由于MJPGstreamer服務器只能傳輸視頻信息,而本設計需要接收客戶端的控制命令并且還需返回機器人的傳感器數據,因此需要移植支持CGI應用腳本的服務器。BOA服務器是一個可運行在Unix或Linux下的非常小巧的單任務WEB服務器,并且支持CGI腳本,廣泛應用于嵌入式領域[4]。本設計通過編寫CGI腳本來完成服務器與客戶端的數據交換。
服務程序主要完成機器人的初始化、讀取電量值并將電量值通過LED進行提示,讀取命名管道獲得命令字并將其解析執行。主要的流程圖如圖3所示。

圖3 服務程序流程圖
如圖3所示,本設計中的服務程序采用多進程程序設計方式,其子進程每60 s采集一次電源電量信息并更新電量指示燈顯示,主進程采用阻塞讀的方式讀取命名管道來等待客戶端發送命令,獲得命令之后對命令進行解析,并調用驅動程序來執行相應的命令,從而實現對機器人的控制。
Android客戶端軟件流程圖如圖4所示。

圖4 Android應用程序流程圖
Android端的應用程序采用多線程技術,其中一個子線程每60 s向服務器發送一個獲取電量的命令并根據收到的數據進行顯示更新,另一個線程根據MJPEG協議來解析出圖像數據并更新顯示。主線程主要完成用戶操控事件的監聽,并根據用戶的實際操控發送相應的命令給服務器,并從服務器獲得機器人的最新數據來實時更新,其命令的發送方式采用HTTP協議中的GET方法。
GET方法是HTTP協議中定義的多種與服務器進行交互的方法之一,它一般用于獲取/查詢資源信息。該方法請求的數據會附在URL之后,并且提交的數據最多只能是1024字節,但是本設計中只需要傳送命令字即可,因此采用GET方法來傳送命令字與獲取機器人數據信息。使用該方法來發送命令,服務器端的CGI程序可以在QUERY-STRING環境變量中非常方便地獲取到客戶端傳送給服務器的數據,并且客戶端應用程序可以在Http Response中獲得服務器端返回的數據。
MJPEG將服務器端發送來的一張張JPEG圖像數據發送給客戶端,客戶端不斷地接收圖像數據并顯示更新,即形成了動態的圖像。獲取視頻圖像數據時,客戶端首先發一個GET方法,如果服務器接收響應則會設置context type的boundary子屬性來指明,然后服務器端開始發送圖片數據,在數據頭部會有圖片類型以及大小信息,其中Content-Length字段指明圖像數據的長度,Content-Type字段指明圖像的類型值為image/jpeg。當一幀圖像數據發送完畢后,服務器端將會發送邊界字符串來表示一幀圖像發送結束。

圖5 WEB客戶端流程圖
WEB客戶端程序流程圖如圖5所示。WEB客戶端采用AJAX技術,其功能模塊大體上分為3個部分:第一部分主要是監測用戶的操作并采用HTTP GET 34方法來發送控制命令,然后將服務器返回的信息更新顯示;第二部分主要為120 s定時發送,獲取電源電量值的命令,并將獲得的數據更新顯示;第三部分獲取圖像數據并顯示。
AJAX(Asynchronous Javascript+ XML)即異步JavaScript和XML技術的簡稱,它可以實現網頁異步更新。采用該方法來設計WEB應用,可以只對網頁的部分內容進行更新,而不需要重新對整個頁面進行加載。其工作原理如圖6所示。

圖6 AJAX工作原理
本文從硬件選型、硬件電路設計、系統移植、驅動程序移植編寫、服務器搭建、服務器程序編寫,以及Android客戶端和WEB客戶端應用程序編寫方面進行了較為詳細的介紹。最終,用戶能夠通過Android客戶端和WEB客戶端對機器人進行夾持、運輸、擺放動作的控制,并且可以實時地返回機器人采集到的圖像數據和傳感器數據。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
[1]郭琦.一種基于ARM的 WiFi無線監控系統設計[J].電子設計工程,2013,21(4):184-186.
[2]許敏.基于嵌入式Web的校園視頻監控系統的設計與實現[D].濟南:山東建筑大學,2008.
[3]陳書益,黃永慧.開源視頻服務器軟件MJPG-streamer的研究和應用[J].電子設計工程,2012,3(5).
[4]朱宇.基于ARM的CC1100無線服務器的設計與實現[J].電子設計工程,2013,21(4):187-189.
[5]楊宗德,鄧玉春.Linux高級程序設計[M].2版.北京:人民郵電出版社,2009.