張美平,張毅韜,郭旭城,王志宇
1(福建師范大學 數(shù)學與信息學院,福州 350007)
2(福建師范大學 福建省網(wǎng)絡(luò)安全與密碼技術(shù)重點實驗室,福州 350007)
隨著物聯(lián)網(wǎng)相關(guān)技術(shù)的飛速發(fā)展,物聯(lián)網(wǎng)的概念逐漸深入人心,相關(guān)應用輻射至各行各業(yè).據(jù)統(tǒng)計,國內(nèi)物聯(lián)網(wǎng)連接數(shù)已達16億個,預計2020年將超過70億個,市場規(guī)模達到2.5萬億元,物聯(lián)網(wǎng)發(fā)展?jié)摿薮?物聯(lián)網(wǎng)是新一輪產(chǎn)業(yè)變革的重要方向和推動力量,對于深化供給側(cè)結(jié)構(gòu)性改革、推動產(chǎn)業(yè)轉(zhuǎn)型升級具有重要意義.現(xiàn)如今,全球各國無不積極推動機器人產(chǎn)業(yè),近期人工智能與深度學習等技術(shù)發(fā)展熱度增溫,更是成為推動智能機器人發(fā)展的重要動能.據(jù)工研院IEK研究報告預估,全球智能機器人的市場規(guī)模預計在2021年將成長至336億美元,而亞洲將是成長最多的地區(qū).
通信連接只是物聯(lián)網(wǎng)的第一步,在此基礎(chǔ)之上的應用才是物聯(lián)網(wǎng)重要的核心,智能機器人可作為物聯(lián)網(wǎng)智能終端提供這種作用.機器人在智能家居、家庭安防等物聯(lián)網(wǎng)應用方向上得到了充分的利用,尤其是機器人裝載感知設(shè)備而具有的環(huán)境感知能力,為家居生活、倉庫管理、無人區(qū)監(jiān)測等應用場景提供了極大的便捷和助力.
國內(nèi)外對于物聯(lián)網(wǎng)與智能機器人結(jié)合的研究已經(jīng)展開,國外如IBM公司、日本國際電氣通信先進技術(shù)研究所等.Grieco等人[1]提出了物聯(lián)網(wǎng)輔助機器人應用方向,歸納了各行業(yè)領(lǐng)域機器人的模型參數(shù)和具體硬件平臺,以及相關(guān)的物聯(lián)網(wǎng)技術(shù),為物聯(lián)網(wǎng)與機器人結(jié)合的研究提供了不錯的方案基礎(chǔ).國內(nèi),孔令富等人[2]提出構(gòu)建物聯(lián)網(wǎng)機器人系統(tǒng)的指導思想,分析該系統(tǒng)的研究現(xiàn)狀,同時剖析了物聯(lián)網(wǎng)機器人系統(tǒng)存在的客觀問題;湯莉莉等人[3]提供了一套較為具體的物聯(lián)網(wǎng)智能機器人設(shè)計的解決方案,實現(xiàn)視頻監(jiān)控,機器人狀態(tài)自檢測與監(jiān)控、太陽能充能等功能.
在各類物聯(lián)網(wǎng)應用方向蓬勃發(fā)展的影響下,物聯(lián)網(wǎng)系統(tǒng)下,與感知數(shù)據(jù)交互的智能機器人的作用與地位逐漸變得不可或缺.但市場上智能機器人平臺眾多,設(shè)計方案不同,導致大量代碼冗余、移植性通用性較差等問題,造成了其與物聯(lián)網(wǎng)系統(tǒng)數(shù)據(jù)的交互需要更繁雜的數(shù)據(jù)協(xié)議等客觀現(xiàn)實問題,增加了智能機器人融入物聯(lián)網(wǎng)系統(tǒng)的難度.
本文針對以上問題,一方面利用ROS的通訊框架和OpenWrt、Contiki搭建了一款完整的三層結(jié)構(gòu)的物聯(lián)網(wǎng)系統(tǒng);另一方面設(shè)計了一套基于ROS的移動機器人平臺,不僅做到物聯(lián)網(wǎng)系統(tǒng)下環(huán)境數(shù)據(jù)的采集上遞與反饋,且提供充足優(yōu)良的機器人開發(fā)接口,為物聯(lián)網(wǎng)下智能機器人的智能化程度不斷提高打下基礎(chǔ).
本文選擇的整體系統(tǒng)框架類似于物聯(lián)網(wǎng)的三層結(jié)構(gòu),智能機器人作為應用層的物聯(lián)網(wǎng)終端,與感知數(shù)據(jù)進行交互.如圖1所示.
圖1 整體系統(tǒng)框架
(1)感知層
傳感數(shù)據(jù)通過開源物聯(lián)網(wǎng)操作系統(tǒng)Contiki提供的TCP/IP堆棧,將數(shù)據(jù)打包為UDP數(shù)據(jù)報上傳至ROS-Contiki網(wǎng)關(guān).
(2)接入層
ROS-Contiki網(wǎng)關(guān)實現(xiàn)協(xié)議IPv6與IPv4之間的動態(tài)轉(zhuǎn)換,設(shè)置轉(zhuǎn)換地址池、地址比對、數(shù)據(jù)匯聚處理的功能,并以ROS規(guī)范進行轉(zhuǎn)換,實現(xiàn)感知層數(shù)據(jù)與ROS網(wǎng)絡(luò)的雙向流通.
(3)應用層
提供針對感知層的數(shù)據(jù)監(jiān)控與節(jié)點反向控制、機器人基本控制的Web服務.同時智能機器人可在物聯(lián)網(wǎng)系統(tǒng)環(huán)境下,與感知數(shù)據(jù)實現(xiàn)雙向交互.
在指定區(qū)域部署傳感節(jié)點與執(zhí)行節(jié)點,如圖2所示,通過無線傳感網(wǎng)絡(luò)傳遞數(shù)據(jù)實現(xiàn)感知層功能.無線傳感網(wǎng)絡(luò)的組建采用了近幾年發(fā)展迅速的基于IPv6的Contiki物聯(lián)網(wǎng)操作系統(tǒng).感知層節(jié)點由STM32W108處理器,各類傳感器或執(zhí)行模塊構(gòu)成.感知層節(jié)點運行由Contiki協(xié)議棧提供的TCP/IP堆棧,將數(shù)據(jù)打包為UDP數(shù)據(jù)報遞交至ROS-Contiki網(wǎng)關(guān).
感知層部署節(jié)點分為兩類:
(1)傳感節(jié)點.傳感節(jié)點負責上報所采集數(shù)據(jù).
(2)執(zhí)行節(jié)點.執(zhí)行器負責監(jiān)聽執(zhí)行指令,控制相關(guān)外設(shè).
圖2 執(zhí)行節(jié)點(左)、傳感節(jié)點(右)
節(jié)點間組網(wǎng)與通訊如圖3.
圖3 節(jié)點間組網(wǎng)通訊
底層數(shù)據(jù)需要約定數(shù)據(jù)上報與反向控制指令的格式協(xié)議(見表1和表2),以便網(wǎng)關(guān)接入模塊和應用層應用解析數(shù)據(jù)和生成指令.
接入層主要涉及ROS-Conitki網(wǎng)關(guān)設(shè)備的選擇與接入模塊的設(shè)計[4],如圖4.ROS-Conitki網(wǎng)關(guān)設(shè)備選用運行Linux開源無線路由器操作系統(tǒng)OpenWrt的巴法絡(luò)路由器,參數(shù)設(shè)置見表3.OpenWrt是嵌入式設(shè)備上運行的Linux系統(tǒng),為Linux下的開發(fā)提供了良好環(huán)境.同時網(wǎng)關(guān)需要一個Contiki IPv6接入模塊,實現(xiàn)IPv6和IPv4的動態(tài)轉(zhuǎn)換,設(shè)置轉(zhuǎn)換地址池、數(shù)據(jù)匯聚、處理,并且以ROS規(guī)范進行轉(zhuǎn)換,并將感知層數(shù)據(jù)遞交至ROS網(wǎng)絡(luò).
表1 數(shù)據(jù)上報協(xié)議
表2 反向控制指令協(xié)議
圖4 網(wǎng)關(guān)內(nèi)部結(jié)構(gòu)
表3 巴法絡(luò)路由器參數(shù)
為非ROS系統(tǒng)的網(wǎng)關(guān)設(shè)備滿足ROS規(guī)范與ROS網(wǎng)絡(luò)通訊,我們使用rosserial_embeddedLinux庫進行開發(fā).rosserial_embeddedLinux提供了ROS通信協(xié)議,可用于嵌入式Linux系統(tǒng)的串行UART,或其無線或網(wǎng)絡(luò)連接.它允許嵌入式Linux系統(tǒng)運行完整的ROS節(jié)點,而我們只需擁有目標設(shè)備的開發(fā)編譯鏈.
ROS-Contiki網(wǎng)關(guān)運行tunslip6程序.該程序建立一個名為“tun0”的虛擬網(wǎng)卡.直接用程序讀寫該設(shè)備,tun0建立在數(shù)據(jù)鏈路層,接入模塊將邊界路由節(jié)點上遞的數(shù)據(jù),通過slip串口與IP協(xié)議,將其封裝為IP數(shù)據(jù)包,再遞交至UDP服務端.UDP服務端將執(zhí)行節(jié)點的最新IP地址存入地址池,為反向控制做好準備,同時將傳感數(shù)據(jù)封裝為ros消息,以規(guī)定的話題發(fā)布至ROS網(wǎng)絡(luò).
反之,接入模塊(見圖5)通過ros_node訂閱規(guī)定話題,接收ROS網(wǎng)絡(luò)傳來的數(shù)據(jù)(多為控制指令).通過比對地址池,匹配目標執(zhí)行節(jié)點,tunslip6程序?qū)?shù)據(jù)轉(zhuǎn)換為串口數(shù)據(jù)通過串口遞交至邊界路由設(shè)備.
圖5 接入模塊結(jié)構(gòu)設(shè)計
提供針對感知層數(shù)據(jù)監(jiān)控與反向控制和針對機器人控制的web前端頁面.web服務與ROS網(wǎng)絡(luò)的通訊,采用rosbridge協(xié)議規(guī)范下的rosbridge_suite軟件包進行web服務端與客戶端的開發(fā).
rosbridge主要包含兩個部分,Rosbridge Protocol和Rosbridge Implementation.其中Protocol部分提供了非ROS系統(tǒng)和ROS系統(tǒng)通信的具體格式,包括話題的訂閱,消息的發(fā)布等.Implementation部分是rosbridge的具體實現(xiàn),包含rosbridge_server等包.rosbridge_server負責通信的傳輸層,包括webscoket,tcp,udp等格式.
用戶使用PC或移動終端采取相關(guān)操作,將UI操作綁定為一種指定話題下消息的發(fā)布或訂閱,以websocket的方式與rosbridge節(jié)點通訊,該節(jié)點將收到的數(shù)據(jù)封裝為ROS規(guī)范的ROS消息,并遞交至ROS網(wǎng)絡(luò),實現(xiàn)Web服務與ROS網(wǎng)絡(luò)的結(jié)合,如圖6.
圖6 Web服務與ROS網(wǎng)絡(luò)
機器人硬件框架如圖7所示.
圖7 機器人硬件部件與架構(gòu)
履帶小車底盤作為機器人移動的基本部件,通過裝載的電機實現(xiàn)驅(qū)動.底盤搭載了STM32核心驅(qū)動板和作為主控設(shè)備的樹莓派.核心驅(qū)動板上連接了三軸陀螺儀GY-85,如圖8.
(1)STM32核心驅(qū)動板
運行一個基本的ROS節(jié)點.
(2)樹莓派
運行ROS-Master,承擔ROS網(wǎng)絡(luò)的牽頭組建的功能.同時可協(xié)同多個ROS節(jié)點.同時提供多個外設(shè)接口,為機器人的服務拓展提供硬件條件.
圖8 機器人實物圖
機器人的軟件設(shè)計主要基于ROS規(guī)范的ROS節(jié)點開發(fā).機器人運行的ROS節(jié)點如圖9所示.
圖9 機器人運行節(jié)點
STM32_node: 讀取機器人的電機里程數(shù)、電量、速度、Imu數(shù)據(jù)等機器人狀態(tài)數(shù)據(jù)并以ROS規(guī)范封裝,上遞至ROS網(wǎng)絡(luò);同時可監(jiān)控傳感數(shù)據(jù),并監(jiān)聽用戶執(zhí)行指令.
serial_node: 將STM32核心驅(qū)動板通過串口連接至ROS網(wǎng)絡(luò).
riki_base_node: 描述機器人基本信息的節(jié)點,接受來自驅(qū)動板經(jīng)過過濾的imu融合數(shù)據(jù),速度數(shù)據(jù)等,同時可與本文物聯(lián)網(wǎng)系統(tǒng)下數(shù)據(jù)實現(xiàn)交互.
rosbridge_suit_node: 實現(xiàn)ROS網(wǎng)絡(luò)與非ROS網(wǎng)絡(luò)的應用層應用之間的通信.
系統(tǒng)整體運作形式下,感知層部署感知節(jié)點和執(zhí)行節(jié)點,執(zhí)行節(jié)點集成相應的執(zhí)行器,感知節(jié)點將感知數(shù)據(jù)遞交至邊界路由節(jié)點,由邊界路由節(jié)點上傳至ROS-Contiki網(wǎng)關(guān).網(wǎng)關(guān)記錄節(jié)點所分配地址,并將數(shù)據(jù)封裝為ROS消息,發(fā)布至指定的話題,供機器人與應用層服務節(jié)點訂閱.機器人時刻訂閱機器人指令話題,監(jiān)聽機器人指令,作出反饋.
同時,web頁面提供了反向控制的接口,將其和規(guī)定的ROS消息綁定,發(fā)送至約定好的ROS話題,ROSContiki網(wǎng)關(guān)訂閱該話題,解析ROS消息獲取命令,并根據(jù)地址池將控制指令下發(fā)至執(zhí)行節(jié)點.
(1)啟動機器人
為機器人上電,通過遠程登錄軟件進入樹莓派.輸入如下命令:
roslaunch rikirobot bringup.launch
roslaunch rosbridge_suit rosbridge_websocket.lauch
(2)部署節(jié)點,啟動網(wǎng)關(guān)
將邊界路由節(jié)點通過USB線接入巴法絡(luò)路由器.輸入如下指令:
tunslip6 -s /dev/ttyUSB0 aaaa::1/64 &
再執(zhí)行接入模塊程序:
./pc-server /dev/USB0
(3)打開瀏覽器,進入Web服務(如圖10).
圖10 Web服務頁面
本文分為兩個方面: 基于ROS的物聯(lián)網(wǎng)系統(tǒng)的三層設(shè)計和該系統(tǒng)下機器人的設(shè)計.
物聯(lián)網(wǎng)系統(tǒng)分為三層: 感知層、接入層、應用層.本文中感知層節(jié)點運行Contiki操作系統(tǒng),被分配不同的IPv6地址,以mesh的方式組建傳感網(wǎng)絡(luò).ROSContiki網(wǎng)關(guān)則基于OpenWrt與Rosserial協(xié)議,將底層上報的數(shù)據(jù)以ROS消息規(guī)范封裝上遞至ROS網(wǎng)絡(luò).應用層服務節(jié)點通過ros_bridge進行Web前端的服務集成,搭建一套基于ROS網(wǎng)絡(luò)的物聯(lián)網(wǎng)系統(tǒng).
機器人以樹莓派做主控,STM32核心驅(qū)動板作為硬件驅(qū)動.機器人的核心系統(tǒng)框架采用當下流行的開源的機器人操作系統(tǒng)——ROS.并結(jié)合當下優(yōu)秀的嵌入式系統(tǒng)OpenWrt項目,依托優(yōu)秀的ROS通訊框架,用較低的成本,開發(fā)出本文物聯(lián)網(wǎng)系統(tǒng)下智能機器人.