張美平,張毅韜,郭旭城,王志宇
1(福建師范大學 數學與信息學院,福州 350007)
2(福建師范大學 福建省網絡安全與密碼技術重點實驗室,福州 350007)
隨著物聯網相關技術的飛速發展,物聯網的概念逐漸深入人心,相關應用輻射至各行各業.據統計,國內物聯網連接數已達16億個,預計2020年將超過70億個,市場規模達到2.5萬億元,物聯網發展潛力巨大.物聯網是新一輪產業變革的重要方向和推動力量,對于深化供給側結構性改革、推動產業轉型升級具有重要意義.現如今,全球各國無不積極推動機器人產業,近期人工智能與深度學習等技術發展熱度增溫,更是成為推動智能機器人發展的重要動能.據工研院IEK研究報告預估,全球智能機器人的市場規模預計在2021年將成長至336億美元,而亞洲將是成長最多的地區.
通信連接只是物聯網的第一步,在此基礎之上的應用才是物聯網重要的核心,智能機器人可作為物聯網智能終端提供這種作用.機器人在智能家居、家庭安防等物聯網應用方向上得到了充分的利用,尤其是機器人裝載感知設備而具有的環境感知能力,為家居生活、倉庫管理、無人區監測等應用場景提供了極大的便捷和助力.
國內外對于物聯網與智能機器人結合的研究已經展開,國外如IBM公司、日本國際電氣通信先進技術研究所等.Grieco等人[1]提出了物聯網輔助機器人應用方向,歸納了各行業領域機器人的模型參數和具體硬件平臺,以及相關的物聯網技術,為物聯網與機器人結合的研究提供了不錯的方案基礎.國內,孔令富等人[2]提出構建物聯網機器人系統的指導思想,分析該系統的研究現狀,同時剖析了物聯網機器人系統存在的客觀問題;湯莉莉等人[3]提供了一套較為具體的物聯網智能機器人設計的解決方案,實現視頻監控,機器人狀態自檢測與監控、太陽能充能等功能.
在各類物聯網應用方向蓬勃發展的影響下,物聯網系統下,與感知數據交互的智能機器人的作用與地位逐漸變得不可或缺.但市場上智能機器人平臺眾多,設計方案不同,導致大量代碼冗余、移植性通用性較差等問題,造成了其與物聯網系統數據的交互需要更繁雜的數據協議等客觀現實問題,增加了智能機器人融入物聯網系統的難度.
本文針對以上問題,一方面利用ROS的通訊框架和OpenWrt、Contiki搭建了一款完整的三層結構的物聯網系統;另一方面設計了一套基于ROS的移動機器人平臺,不僅做到物聯網系統下環境數據的采集上遞與反饋,且提供充足優良的機器人開發接口,為物聯網下智能機器人的智能化程度不斷提高打下基礎.
本文選擇的整體系統框架類似于物聯網的三層結構,智能機器人作為應用層的物聯網終端,與感知數據進行交互.如圖1所示.

圖1 整體系統框架
(1)感知層
傳感數據通過開源物聯網操作系統Contiki提供的TCP/IP堆棧,將數據打包為UDP數據報上傳至ROS-Contiki網關.
(2)接入層
ROS-Contiki網關實現協議IPv6與IPv4之間的動態轉換,設置轉換地址池、地址比對、數據匯聚處理的功能,并以ROS規范進行轉換,實現感知層數據與ROS網絡的雙向流通.
(3)應用層
提供針對感知層的數據監控與節點反向控制、機器人基本控制的Web服務.同時智能機器人可在物聯網系統環境下,與感知數據實現雙向交互.
在指定區域部署傳感節點與執行節點,如圖2所示,通過無線傳感網絡傳遞數據實現感知層功能.無線傳感網絡的組建采用了近幾年發展迅速的基于IPv6的Contiki物聯網操作系統.感知層節點由STM32W108處理器,各類傳感器或執行模塊構成.感知層節點運行由Contiki協議棧提供的TCP/IP堆棧,將數據打包為UDP數據報遞交至ROS-Contiki網關.
感知層部署節點分為兩類:
(1)傳感節點.傳感節點負責上報所采集數據.
(2)執行節點.執行器負責監聽執行指令,控制相關外設.

圖2 執行節點(左)、傳感節點(右)
節點間組網與通訊如圖3.

圖3 節點間組網通訊
底層數據需要約定數據上報與反向控制指令的格式協議(見表1和表2),以便網關接入模塊和應用層應用解析數據和生成指令.
接入層主要涉及ROS-Conitki網關設備的選擇與接入模塊的設計[4],如圖4.ROS-Conitki網關設備選用運行Linux開源無線路由器操作系統OpenWrt的巴法絡路由器,參數設置見表3.OpenWrt是嵌入式設備上運行的Linux系統,為Linux下的開發提供了良好環境.同時網關需要一個Contiki IPv6接入模塊,實現IPv6和IPv4的動態轉換,設置轉換地址池、數據匯聚、處理,并且以ROS規范進行轉換,并將感知層數據遞交至ROS網絡.

表1 數據上報協議

表2 反向控制指令協議

圖4 網關內部結構

表3 巴法絡路由器參數
為非ROS系統的網關設備滿足ROS規范與ROS網絡通訊,我們使用rosserial_embeddedLinux庫進行開發.rosserial_embeddedLinux提供了ROS通信協議,可用于嵌入式Linux系統的串行UART,或其無線或網絡連接.它允許嵌入式Linux系統運行完整的ROS節點,而我們只需擁有目標設備的開發編譯鏈.
ROS-Contiki網關運行tunslip6程序.該程序建立一個名為“tun0”的虛擬網卡.直接用程序讀寫該設備,tun0建立在數據鏈路層,接入模塊將邊界路由節點上遞的數據,通過slip串口與IP協議,將其封裝為IP數據包,再遞交至UDP服務端.UDP服務端將執行節點的最新IP地址存入地址池,為反向控制做好準備,同時將傳感數據封裝為ros消息,以規定的話題發布至ROS網絡.
反之,接入模塊(見圖5)通過ros_node訂閱規定話題,接收ROS網絡傳來的數據(多為控制指令).通過比對地址池,匹配目標執行節點,tunslip6程序將數據轉換為串口數據通過串口遞交至邊界路由設備.

圖5 接入模塊結構設計
提供針對感知層數據監控與反向控制和針對機器人控制的web前端頁面.web服務與ROS網絡的通訊,采用rosbridge協議規范下的rosbridge_suite軟件包進行web服務端與客戶端的開發.
rosbridge主要包含兩個部分,Rosbridge Protocol和Rosbridge Implementation.其中Protocol部分提供了非ROS系統和ROS系統通信的具體格式,包括話題的訂閱,消息的發布等.Implementation部分是rosbridge的具體實現,包含rosbridge_server等包.rosbridge_server負責通信的傳輸層,包括webscoket,tcp,udp等格式.
用戶使用PC或移動終端采取相關操作,將UI操作綁定為一種指定話題下消息的發布或訂閱,以websocket的方式與rosbridge節點通訊,該節點將收到的數據封裝為ROS規范的ROS消息,并遞交至ROS網絡,實現Web服務與ROS網絡的結合,如圖6.

圖6 Web服務與ROS網絡
機器人硬件框架如圖7所示.

圖7 機器人硬件部件與架構
履帶小車底盤作為機器人移動的基本部件,通過裝載的電機實現驅動.底盤搭載了STM32核心驅動板和作為主控設備的樹莓派.核心驅動板上連接了三軸陀螺儀GY-85,如圖8.
(1)STM32核心驅動板
運行一個基本的ROS節點.
(2)樹莓派
運行ROS-Master,承擔ROS網絡的牽頭組建的功能.同時可協同多個ROS節點.同時提供多個外設接口,為機器人的服務拓展提供硬件條件.

圖8 機器人實物圖
機器人的軟件設計主要基于ROS規范的ROS節點開發.機器人運行的ROS節點如圖9所示.

圖9 機器人運行節點
STM32_node: 讀取機器人的電機里程數、電量、速度、Imu數據等機器人狀態數據并以ROS規范封裝,上遞至ROS網絡;同時可監控傳感數據,并監聽用戶執行指令.
serial_node: 將STM32核心驅動板通過串口連接至ROS網絡.
riki_base_node: 描述機器人基本信息的節點,接受來自驅動板經過過濾的imu融合數據,速度數據等,同時可與本文物聯網系統下數據實現交互.
rosbridge_suit_node: 實現ROS網絡與非ROS網絡的應用層應用之間的通信.
系統整體運作形式下,感知層部署感知節點和執行節點,執行節點集成相應的執行器,感知節點將感知數據遞交至邊界路由節點,由邊界路由節點上傳至ROS-Contiki網關.網關記錄節點所分配地址,并將數據封裝為ROS消息,發布至指定的話題,供機器人與應用層服務節點訂閱.機器人時刻訂閱機器人指令話題,監聽機器人指令,作出反饋.
同時,web頁面提供了反向控制的接口,將其和規定的ROS消息綁定,發送至約定好的ROS話題,ROSContiki網關訂閱該話題,解析ROS消息獲取命令,并根據地址池將控制指令下發至執行節點.
(1)啟動機器人
為機器人上電,通過遠程登錄軟件進入樹莓派.輸入如下命令:
roslaunch rikirobot bringup.launch
roslaunch rosbridge_suit rosbridge_websocket.lauch
(2)部署節點,啟動網關
將邊界路由節點通過USB線接入巴法絡路由器.輸入如下指令:
tunslip6 -s /dev/ttyUSB0 aaaa::1/64 &
再執行接入模塊程序:
./pc-server /dev/USB0
(3)打開瀏覽器,進入Web服務(如圖10).

圖10 Web服務頁面
本文分為兩個方面: 基于ROS的物聯網系統的三層設計和該系統下機器人的設計.
物聯網系統分為三層: 感知層、接入層、應用層.本文中感知層節點運行Contiki操作系統,被分配不同的IPv6地址,以mesh的方式組建傳感網絡.ROSContiki網關則基于OpenWrt與Rosserial協議,將底層上報的數據以ROS消息規范封裝上遞至ROS網絡.應用層服務節點通過ros_bridge進行Web前端的服務集成,搭建一套基于ROS網絡的物聯網系統.
機器人以樹莓派做主控,STM32核心驅動板作為硬件驅動.機器人的核心系統框架采用當下流行的開源的機器人操作系統——ROS.并結合當下優秀的嵌入式系統OpenWrt項目,依托優秀的ROS通訊框架,用較低的成本,開發出本文物聯網系統下智能機器人.