2. 福建师范大学 福建省网络安全与密码技术重点实验室, 福州 350007
2. Fujian Provincial Key Lab of Network Security & Cryptology, Fujian Normal University, Fuzhou 350007, China
随着物联网相关技术的飞速发展, 物联网的概念逐渐深入人心, 相关应用辐射至各行各业. 据统计, 国内物联网连接数已达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 系统的设计 2.1 感知层在指定区域部署传感节点与执行节点, 如图2所示, 通过无线传感网络传递数据实现感知层功能. 无线传感网络的组建采用了近几年发展迅速的基于IPv6的Contiki物联网操作系统. 感知层节点由STM32W108处理器, 各类传感器或执行模块构成. 感知层节点运行由Contiki协议栈提供的TCP/IP堆栈, 将数据打包为UDP数据报递交至ROS-Contiki网关.
感知层部署节点分为两类:
(1) 传感节点. 传感节点负责上报所采集数据.
(2) 执行节点. 执行器负责监听执行指令, 控制相关外设.
节点间组网与通讯如图3.
底层数据需要约定数据上报与反向控制指令的格式协议(见表1和表2), 以便网关接入模块和应用层应用解析数据和生成指令.
2.2 接入层接入层主要涉及ROS-Conitki网关设备的选择与接入模块的设计[4], 如图4. ROS-Conitki网关设备选用运行Linux开源无线路由器操作系统OpenWrt的巴法络路由器, 参数设置见表3. OpenWrt是嵌入式设备上运行的Linux系统, 为Linux下的开发提供了良好环境. 同时网关需要一个Contiki IPv6接入模块, 实现IPv6和IPv4的动态转换, 设置转换地址池、数据汇聚、处理, 并且以ROS规范进行转换, 并将感知层数据递交至ROS网络.
为非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程序将数据转换为串口数据通过串口递交至边界路由设备.
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.
3 机器人设计 3.1 硬件设计
机器人硬件框架如图7所示.
履带小车底盘作为机器人移动的基本部件, 通过装载的电机实现驱动. 底盘搭载了STM32核心驱动板和作为主控设备的树莓派. 核心驱动板上连接了三轴陀螺仪GY-85, 如图8.
(1) STM32核心驱动板
运行一个基本的ROS节点.
(2) 树莓派
运行ROS-Master, 承担ROS网络的牵头组建的功能. 同时可协同多个ROS节点. 同时提供多个外设接口, 为机器人的服务拓展提供硬件条件.
3.2 软件设计
机器人的软件设计主要基于ROS规范的ROS节点开发. 机器人运行的ROS节点如图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).
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 |