计算机系统应用  2019, Vol. 28 Issue (2): 75-80   PDF    
基于ROS与Contiki的物联网环境下数据采集机器人设计
张美平1,2, 张毅韬1, 郭旭城1, 王志宇1     
1. 福建师范大学 数学与信息学院, 福州 350007;
2. 福建师范大学 福建省网络安全与密码技术重点实验室, 福州 350007
摘要:提出了一种基于ROS与OpenWrt、Contiki的新型物联网系统方案ROS-IOT. 分为两个部分: 物联网系统的搭建与此系统下数据采集机器人的设计. 感知层传感节点采用Contiki协议栈实现传感节点的组网与数据传递; 接入网关采用运行Openwrt操作系统的无线路由器, 网关接入模块实现协议动态转换, 设置转换地址池、数据汇聚、处理, 并基于rosserial_embeddedLinux上递至ROS网络等功能, 实现各层数据流通; 应用层基于websocket技术设计了与ROS网络数据交互的web服务, 可实现与感知层、机器人的双向交互. 机器人采用运行ROS环境的树莓派作为主控设备, 电机驱动板采用stm32单片机. 机器人的软件设计采用基于ROS Topic与ROS_bridge的通讯机制, 使得机器人更加容易地融入物联网系统, 并且在此基础上拓展更多服务.
关键词: ROS    Contiki    物联网    机器人    
Design of Internet of Things Data Acquisition Robot Based on ROS and Contiki
ZHANG Mei-Ping1,2, ZHANG Yi-Tao1, GUO Xu-Cheng1, WANG Zhi-Yu1     
1. College of Mathematics and Informatics, Fujian Normal University, Fuzhou 350007, China;
2. Fujian Provincial Key Lab of Network Security & Cryptology, Fujian Normal University, Fuzhou 350007, China
Foundation item: National Natural Science Foundation of China (61771140); Higher Educations’ Industry-University Cooperation Project of Science and Technology Bureau, Fujian Province (2017H6005); Year 2018 Provincial Students Innovation Training Program of Fujian Province (201810394053)
Abstract: ROS-IOT, as a new scheme of the Internet of Things system based on ROS and OpenWrt and Contiki, is put forward. It is divided into two parts: the construction of the system of the Internet of Things and the design of data acquisition robot under this system. In the perceptive layer, the sensor node uses Contiki protocol stack to realize the networking and data transmission of sensor nodes. In the access layer, access gateway adopts wireless routers running OpenWrt operating system, connection module of gateway realizes the dynamic transformation of the protocol, and it sets the functions of conversion address pool, data aggregation, and processing and forwarding to ROS network based on rosserial_embeddedLinux, which realizes the data circulation of each layer. In the application layer, a web service that interacts with ROS network data based on websocket technology is designed to achieve two-way interaction with the perception layer and the robot. The motor-driver board of the robot adopts STM32 singlechip, and the robot uses raspberry pi that running ROS environment as main control device. The software design of the robot adopts the communication mechanism based on ROS Topic and ROS_bridge to achieve the purpose of the robot are more easily integrated into the system of the Internet of Things,which is the base of expanding more services.
Key words: ROS     Contiki     Internet of Things (IoT)     robot    

引言

随着物联网相关技术的飞速发展, 物联网的概念逐渐深入人心, 相关应用辐射至各行各业. 据统计, 国内物联网连接数已达16亿个, 预计2020年将超过70亿个, 市场规模达到2.5万亿元, 物联网发展潜力巨大. 物联网是新一轮产业变革的重要方向和推动力量, 对于深化供给侧结构性改革、推动产业转型升级具有重要意义. 现如今, 全球各国无不积极推动机器人产业, 近期人工智能与深度学习等技术发展热度增温, 更是成为推动智能机器人发展的重要动能. 据工研院IEK研究报告预估, 全球智能机器人的市场规模预计在2021年将成长至336亿美元, 而亚洲将是成长最多的地区.

通信连接只是物联网的第一步, 在此基础之上的应用才是物联网重要的核心, 智能机器人可作为物联网智能终端提供这种作用. 机器人在智能家居、家庭安防等物联网应用方向上得到了充分的利用, 尤其是机器人装载感知设备而具有的环境感知能力, 为家居生活、仓库管理、无人区监测等应用场景提供了极大的便捷和助力.

国内外对于物联网与智能机器人结合的研究已经展开, 国外如IBM公司、日本国际电气通信先进技术研究所等. Grieco等人[1]提出了物联网辅助机器人应用方向, 归纳了各行业领域机器人的模型参数和具体硬件平台, 以及相关的物联网技术, 为物联网与机器人结合的研究提供了不错的方案基础. 国内, 孔令富等人[2]提出构建物联网机器人系统的指导思想, 分析该系统的研究现状, 同时剖析了物联网机器人系统存在的客观问题; 汤莉莉等人[3]提供了一套较为具体的物联网智能机器人设计的解决方案, 实现视频监控, 机器人状态自检测与监控、太阳能充能等功能.

在各类物联网应用方向蓬勃发展的影响下, 物联网系统下, 与感知数据交互的智能机器人的作用与地位逐渐变得不可或缺. 但市场上智能机器人平台众多, 设计方案不同, 导致大量代码冗余、移植性通用性较差等问题, 造成了其与物联网系统数据的交互需要更繁杂的数据协议等客观现实问题, 增加了智能机器人融入物联网系统的难度.

本文针对以上问题, 一方面利用ROS的通讯框架和OpenWrt、Contiki搭建了一款完整的三层结构的物联网系统; 另一方面设计了一套基于ROS的移动机器人平台, 不仅做到物联网系统下环境数据的采集上递与反馈, 且提供充足优良的机器人开发接口, 为物联网下智能机器人的智能化程度不断提高打下基础.

1 系统框架

本文选择的整体系统框架类似于物联网的三层结构, 智能机器人作为应用层的物联网终端, 与感知数据进行交互. 如图1所示.

图 1 整体系统框架

(1) 感知层

传感数据通过开源物联网操作系统Contiki提供的TCP/IP堆栈, 将数据打包为UDP数据报上传至ROS-Contiki网关.

(2) 接入层

ROS-Contiki网关实现协议IPv6与IPv4之间的动态转换, 设置转换地址池、地址比对、数据汇聚处理的功能, 并以ROS规范进行转换, 实现感知层数据与ROS网络的双向流通.

(3) 应用层

提供针对感知层的数据监控与节点反向控制、机器人基本控制的Web服务. 同时智能机器人可在物联网系统环境下, 与感知数据实现双向交互.

2 系统的设计 2.1 感知层

在指定区域部署传感节点与执行节点, 如图2所示, 通过无线传感网络传递数据实现感知层功能. 无线传感网络的组建采用了近几年发展迅速的基于IPv6的Contiki物联网操作系统. 感知层节点由STM32W108处理器, 各类传感器或执行模块构成. 感知层节点运行由Contiki协议栈提供的TCP/IP堆栈, 将数据打包为UDP数据报递交至ROS-Contiki网关.

感知层部署节点分为两类:

(1) 传感节点. 传感节点负责上报所采集数据.

(2) 执行节点. 执行器负责监听执行指令, 控制相关外设.

图 2 执行节点(左)、传感节点(右)

节点间组网与通讯如图3.

图 3 节点间组网通讯

底层数据需要约定数据上报与反向控制指令的格式协议(见表1表2), 以便网关接入模块和应用层应用解析数据和生成指令.

2.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 接入模块结构设计

2.3 应用层

提供针对感知层数据监控与反向控制和针对机器人控制的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网络

3 机器人设计 3.1 硬件设计

机器人硬件框架如图7所示.

图 7 机器人硬件部件与架构

履带小车底盘作为机器人移动的基本部件, 通过装载的电机实现驱动. 底盘搭载了STM32核心驱动板和作为主控设备的树莓派. 核心驱动板上连接了三轴陀螺仪GY-85, 如图8.

(1) STM32核心驱动板

运行一个基本的ROS节点.

(2) 树莓派

运行ROS-Master, 承担ROS网络的牵头组建的功能. 同时可协同多个ROS节点. 同时提供多个外设接口, 为机器人的服务拓展提供硬件条件.

图 8 机器人实物图

3.2 软件设计

机器人的软件设计主要基于ROS规范的ROS节点开发. 机器人运行的ROS节点如图9所示.

图 9 机器人运行节点

STM32_node: 读取机器人的电机里程数、电量、速度、Imu数据等机器人状态数据并以ROS规范封装, 上递至ROS网络; 同时可监控传感数据, 并监听用户执行指令.

serial_node: 将STM32核心驱动板通过串口连接至ROS网络.

riki_base_node: 描述机器人基本信息的节点, 接受来自驱动板经过过滤的imu融合数据, 速度数据等, 同时可与本文物联网系统下数据实现交互.

rosbridge_suit_node: 实现ROS网络与非ROS网络的应用层应用之间的通信.

4 系统运作

系统整体运作形式下, 感知层部署感知节点和执行节点, 执行节点集成相应的执行器, 感知节点将感知数据递交至边界路由节点, 由边界路由节点上传至ROS-Contiki网关. 网关记录节点所分配地址, 并将数据封装为ROS消息, 发布至指定的话题, 供机器人与应用层服务节点订阅. 机器人时刻订阅机器人指令话题, 监听机器人指令, 作出反馈.

同时, web页面提供了反向控制的接口, 将其和规定的ROS消息绑定, 发送至约定好的ROS话题, ROS-Contiki网关订阅该话题, 解析ROS消息获取命令, 并根据地址池将控制指令下发至执行节点.

5 测试效果

(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服务页面

6 总结

本文分为两个方面: 基于ROS的物联网系统的三层设计和该系统下机器人的设计.

物联网系统分为三层: 感知层、接入层、应用层. 本文中感知层节点运行Contiki操作系统, 被分配不同的IPv6地址, 以mesh的方式组建传感网络. ROS-Contiki网关则基于OpenWrt与Rosserial协议, 将底层上报的数据以ROS消息规范封装上递至ROS网络. 应用层服务节点通过ros_bridge进行Web前端的服务集成, 搭建一套基于ROS网络的物联网系统.

机器人以树莓派做主控, STM32核心驱动板作为硬件驱动. 机器人的核心系统框架采用当下流行的开源的机器人操作系统——ROS. 并结合当下优秀的嵌入式系统OpenWrt项目, 依托优秀的ROS通讯框架, 用较低的成本, 开发出本文物联网系统下智能机器人.

参考文献
[1]
Grieco LA, Rizzo A, Colucci S, et al. IoT-aided robotics applications: Technological implications, target domains and open issues. Computer Communications, 2014, 54: 32-47. DOI:10.1016/j.comcom.2014.07.013
[2]
孔令富, 吴培良. 物联网机器人系统研究进展. 燕山大学学报, 2013, 37(6): 471-479. DOI:10.3969/j.issn.1007-791X.2013.06.001
[3]
汤莉莉, 王金勇, 黄伟. 物联网智能机器人设计. 现代电子技术, 2017, 40(8): 73-76.
[4]
张美平, 丁文才, 许友泽. IPv6物联网接入网关的设计实践. 计算机系统应用, 2018, 27(2): 112-116. DOI:10.3969/j.issn.1003-3254.2018.02.019