东南大学成贤学院 陈永圣 周龙翔 马尹琪
经历了新冠疫情,我们发现社区服务中存在着明显不足。所以我们想通过机器人来解决其中的一些问题,即设计一款可以实现一些社区服务的机器人。本篇研究文章先是叙述了研究的背景,阐明了研究的可行性与创新性——我们着重介绍了运动控制和温度测量及附加拓展功能的原理以及语音交互技术在机器人上的实现过程。实验采用的机器人为turtlebot2,基于ROS系统去完成顶端的操作——最后能实现社区服务这一全面的功能。
2020年初突如其来的新冠疫情如放大镜一般显现出日常生活中社区服务存在的问题,病毒的强传染性让抗疫期间的社区服务变得困难重重,以及还有外界天气等因素的影响,社区服务成了一大问题,即社区服务缺少人力与及时性。同时,老年化现在愈发地严重,社区服务就显得十分重要。
就这样,如何设计一款在社区服务中发挥作用的机器人成了我们研究的课题。
基于Turtlebot2机器人为载体,利用ROS系统去集成一系列的功能,目的是构造出社区服务机器人能够在实际生活中能够替代人做一些工作以及避免一些隐患。
ROS是一种有高度灵活性的机器人软件编写架构,提供了一种发布-订阅式的通信框架用以简单、快速地构建分布式计算系;ROS提供了大量的工具组合方式用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统;ROS提供了广泛的文件库实现以机动性、操作控制、感知为主的机器人功能;ROS系统的支持与发展依靠着一个强有力的社区。丰富的功能及其强大的技术支持,使得ROS在项目研究中占据主要地位。
运动控制模块主要是在Linux及Python的基础上去对ROS系统进行编程命令控制。模块分布图如图1所示。
图1 模块分布图
运动控制的视觉基础是SLAM算法,动作基础是Kobuki移动机器人。应用SLAM算法、RGBD相机和RVIZ等仿真工具软件,控制和完善机器人的运动路径及其运动细节。机器人每个部分的工作数据由其对应的节点发布、订阅,数据的具体内容与格式可以自行设定。运用RVIZ等仿真软件与官方提供的Stage模型,键入操作指令来控制机器人在目标地图中运动,建立基本的地图模型后便可在仿真软件下进行模拟导航。导航所用的Gapping功能包同样可用于地图的创建。ROS系统中Gmapping功能包与SLAM算法共同作业,建立一套完整的导航包工具,完成在目标点之间的自主路径规划的导航工作。图2所示为ROS系统中导航包的相关节点示意图。
图2 ROS整体导航包的布局图
语音交互模块我们项目团队则是利用了讯飞语音的一个开源的数据库,借助讯飞已有的语音技术来做二次开发。语音交互也是基于我们之前的运动控制模块,对运用的场景场地进行建模后,我们在程序之中设置定点位置的坐标,每个位置点设置了对应的响应指令,借助电脑的麦克风捕捉到声音指令,接着识别里面的触发命令的关键词,识别成功后就开始按着建模的地图进行运动到达目标点,到达后turtlebot2机器人会发出响应来表明已经到达目的地。
第一步机器人位置的初始化,首先编写脚本来进行初始化位置,然后加入到启动rviz的launch文件中,再启动launch文件测试结果,这样的测试避免了人工摆放产生的随机误差。第二步是对科大讯飞SDK的使用,测试语音的合成。首先试验由讯飞开放平台发布的samples样例程序,检验语音包是否可以正常使用,其次修改程序中的代码,添加回调函数使其处于监听状态,无须主动唤醒,最后便是在程序中添加导航点的坐标及其相应的触发指令。第三步测试语音合成的情况。程序中可以定义合成声音的属性,方便我们去设置更为亲民的语音;同时检测坐标位置,当机器人运动到目的地时,程序自动合成语音提示目标点已到达,确保良好的使用体验。
每个模块的通信皆是基于ROS系统的节点间通讯,编写相应的节点,发布消息,订阅目标节点发布的消息,程序以此为判断依据,从而做出相应的动作。基于此,我们完成了对于语音交互功能的制作,并且由于讯飞SDK包的使用,在语音识别与合成方面的质量得到保证。
温度测量模块我们运用了GY-906-DAA(医用级)传感器,温度传感器使用的芯片为MLX90614。我们在树莓派里运行测温程序,可以用C++或者Python去实现程序编写。实现对1m以内的物体进行测温同时测出环境的温度,可将处理之后的数据在终端显示,也可以上传至云端。
拓展功能的主体也是树莓派,外接所需的传感器并编写Python或者C++程序,实现机器人的拓展功能,丰富其所能提供的社区服务。使用DHT11传感器测量环境的温湿度,使用HX711模块用于检测机器人的载重。以上传感器便是机器人的附加编写Python或者C++代码,具体的代码可以参考网上的博客或者相关的书籍。
在整个项目设计制作过程中,碎片化学习相关知识给我们带来了很多乐趣。如何在ROS系统下编写相关节点,并试验代码,实现我们想要的功能,一步步地实现我们的目标,每一个成功都给我们带来了莫大的喜悦。
更重要的是,我们如何去不断优化。在实践过程中,我们水平有限,觉得在各个模块中都有优化的空间,例如我们在语音交互模块中可以增添一个唤醒节功能所需的器件,实现附加功能还需对树莓派进行GPIO口的设置以及点,用于触发指令的功能,减轻机器人工作能耗。