基于ROS 的自主家庭陪伴机器人设计*
2021-03-11李建勇刘雪梅李雪霞
李建勇,赵 静,刘雪梅,李雪霞
(西北工业大学明德学院,陕西 西安710124)
0 引言
随着经济发展和社会变革,越来越多的年轻人背井离乡去较远的地方工作,留下了留守儿童、空巢老人以及那些行动不便之人等[1-3]。 这些人往往得不到充分的陪伴而感到孤独,长此以往将会对他们身体和心里造成很大影响,甚至出现个别自暴自弃以及自杀等情况[4-6]。虽然目前市场上已经出现了形式多样的陪伴机器人[7],但是大部分都是儿童陪伴机器人,如科大讯飞的阿尔法蛋机器人、优必选的悟空机器人、物灵的卢卡机器人等,而且只有少部分功能比较强,如本田Asimo 和软银Pepper 等仿人机器人。 这些机器人要么偏重于儿童早教方面,要么缺乏对老人的陪伴,要么价格比较昂贵等。针对这些问题,本文设计了一种自主家庭陪伴机器人。
1 家庭陪伴机器人总体设计
由于家庭陪伴中最需要的就是沟通和交流,而沟通和交流的主要方式是语言沟通和肢体语言,因而本文所设计的家庭陪伴机器人采用仿人型结构,通过机器语言进行人机自然语音交流以实现语言沟通,如语音聊天、语言互动、讲故事和唱歌等;通过眼部表情和一双仿人上肢进行肢体交流,如再见、打招呼和抓取东西等;通过UI 并利用机器视觉和网络等功能实现其他的人机互动功能。
为实现以上功能,家庭陪伴机器人基于ROS 架构[8-11]进行设计,其架构如图1 所示。 首先进行机器人本体设计并在其上安装实现上述功能的各种传感器、控制器和语音交互模块等设备,然后搭载嵌入式计算机系统并以其为核心构建自主家庭陪伴机器人硬件系统,最后在OS系统上按照ROS 架构分层设计软件以实现上述功能。
图1 家庭陪伴机器人架构
图2 家庭陪伴机器人实物
家庭陪伴机器人本体由头部、上肢、躯体、下肢和移动底盘等组成,其身高140 cm,自重30 kg,其实物如图2所示。 机器人的头部、躯体和下肢采用一体成型塑料外壳设计,其尺寸为:240 mm×460 mm×1 200 mm。 其头部安装了眼睛表情屏、摄像头和语音交互模块等设备,躯体上安装嵌入式计算机系统、触摸屏和体感摄像头等设备,下肢内部走线以使移动底盘和计算机系统相连接。机器人上肢参照人体上肢自由度分配和机器人躯体尺寸进行设计,包括仿人手臂和仿人机械手两部分,其长度为450 mm。 左右仿人手臂各有5 个自由度(其中肩部3 个、肘部1 个和腕部1 个)的旋转关节并分别由5 个直流伺服电机进行驱动,左右仿人机械手各采用1 个直流伺服电机进行驱动以实现握拳到伸掌以及相反过程的动作。 移动底盘为铝合金材质,采用两轮差分驱动的轮式结构,按照驱动轮在中间并在底板前后各安装1 个万向轮的布置方式使机器人重心处于中心位置,其尺寸为φ400×200 mm(H),离地间隙35 mm,自重20 kg,最大有效载荷30 kg。
2 家庭陪伴机器人硬件系统设计
家庭陪伴机器人硬件系统由嵌入式计算机系统、语音交互模块、人机交互模块、上肢控制模块、移动控制模块和电源等组成,其框图如图3 所示。
图3 家庭陪伴机器人硬件系统框图
2.1 嵌入式计算机系统
由于所设计家庭陪伴机器人为自主机器, 需要计算机具有强大的运算和处理能力,因而嵌入式计算机系统采用NVIDIA 的嵌入式平台开发者套件Jetson TX1。 Jetson TX1 是全球首款模块化超级计算机,以革命性的NVIDIA Maxwell GPU 架构为基础构建,提供每秒超过一万亿次浮点运算的性能,具有先进的3D 图形、视频和图像处理以及机器视觉等能力,适用于一切自主机器的AI 平台[12],完全满足家庭陪伴机器人的需要。虽然Jetson TX1 接口比较丰富,但只有1 个USB 3.0 和1 个USB 2.0 接口, 因此采用USB HUB 对USB 3.0 接口进行扩展以满足搭建硬件系统的需要。 另外由于Jetson TX1 只集成了16 GB eMMC,故采用三星120 GB 的SSD硬盘进行扩展。
2.2 语音交互模块
语音交互模块用来实现自然语言沟通,但由于Jetson TX1 没有提供音频输入和输出接口,因而采用迷你小音箱和360°全指向高灵敏拾音器以及外置声卡组成语音交互模块,并通过USB 接口与Jetson TX1 进行语音输入和输出。
2.3 人机交互模块
人机交互模块主要用来实现面部识别、体感交互和人机互动等功能。 在机器人头部安装1 个500 万像素的高清摄像头,不仅可用来实现面部识别,还可以当网络摄像头使用。 体感交互主要靠在机器人胸前安装的Intel RealSense ZR300 来实现,其内置3D 实感相机、鱼眼镜头和6IMU 等设备[13],可以使机器人进行SLAM 来创建室内3D 地图、跟踪家人和捕获家中物体,以及识别家人身体手势来进行肢体交流。人机互动除了语音交互和体感交互之外,还由安装在头部的5 英寸液晶屏和胸前的10.1 英寸触摸屏来实现。 5 英寸液晶屏用来显示机器人的眼睛表情,为其设计了15 种眼睛表情,如笑、哭、生气和睡觉等,并由主机通过串口控制液晶屏来进行眼睛表情的变换;10.1 英寸触摸屏采用2K 画质带电容触摸的HDR 屏以满足Jetson TX1 对显示器的要求,通过它能为用户提供非常美观的UI 操作界面。
2.4 上肢控制模块
为了减少上肢各个关节与控制器之间的连线,各个关节都是采用ZX20D 串行总线舵机进行设计。 左右上肢各有6 个舵机,按顺序串接在一起,并连接串行舵机控制器,然后经USB 接口与Jetson TX1 通信。 每个舵机都有固定地址,能提供最大20 kg·cm 扭矩,并支持角度回读,通过串口指令能被Jetson TX1 精确控制来实现仿人的多种动作以进行肢体交流。
2.5 移动控制模块
移动控制模块主要由Arduino MEGA2560、12 V 大功率直流电机、直流电机驱动器、编码器等构成闭环系统[14],采用500 线编码器测机器人左右轮的移动速度,通过Arduino 进行PID 控制,使机器人不仅能精准移动还能向主控制器输出机器人左右轮移动的速度、角度和里程等信息以定位机器人,并能使用6 个成环形分布的超声波传感器进行避障。 同时在底盘上安装了RPLIDAR-A2激光雷达,结合ZR300 进行SLAM 和自主导航以及配合上肢实现肢体交流的动作。
2.6 电源
整个家庭陪伴机器人采用装在移动底盘内的12 V 10 000 mAh 大电流锂电池供电,经12 V 转19 V 大电流DC/DC 升压模块为Jetson TX1 供电,经12 V 转6 V 大电流DC/DC 降压模块为上肢控制器供电,经12 V 转5 V大电流DC/DC 降压模块为音箱、USB HUB、Arduino MEGA2560 等供电,同时分别经12 V 稳压模块为触摸屏和电机驱动供电。
3 系统软件设计
由于ROS 需要依托OS 系统,首先在Jetson TX1 刷机安装Ubuntu16.04 OS 系统和CUDA 8.0,然后再安装Kinetic 版本的ROS,接着按照家庭陪伴机器人的架构,利用ROS 提供的一些共享资源结合硬件系统来进行软件分层设计。 ROS 是一个分布式框架,为用户提供多节点(进程)之间的通信服务,所有软件功能和工具都建立在这种分布式通信机制上[8-11]。 Jetson TX1 和外围设备之间都是采用USB 进行连接,在OS 上安装对应的驱动程序和ROS 需要的库、功能包和相关依赖包之后,其所使用的通信机制、数据封装和解析等都已确定,故中间层(通信层和接口层)几乎不用改动,系统软件设计的重点在于应用层(规划层和交互层)的设计。 交互层是实现人机交互的接口,规划层则是家庭陪伴机器人实现各种功能的核心,这些都是通过ROS 提供的功能包按照家庭陪伴机器人的硬件参数进行修改并以此开发来实现的。 交互应用在实现时可能需要几个独立的功能包,也可能交叉使用一些相同功能包,而功能包的模块都是以节点为单位运行,并通过不同节点端对端的通信连接关系来实现功能。
3.1 语音交互功能
语音交互是家庭陪伴机器人的必要技能,主要由语音识别、语义理解和语音合成等规划层的节点来实现,以使机器人能用中文语言和人进行自然语言交流,其流程如图4 所示。 在开机之后该功能就处于等待状态,当通过麦克风输入语音关键词唤醒机器人之后,首先使用在线的科大讯飞中文识别对语音进行识别并转成字符串文本输出,然后调用图灵机器人API进行基于人工智能的在线语义分析后以文本方式回复,最后根据文本内容调用科大讯飞的语音合成将文本转换为语音并经音箱输出,同时使机器人眼睛同步变换表情或发送使机器人进行相应动作的命令。 用户通过图灵机器人API 提供的智能工具、休闲娱乐和生活服务等技能满足语音聊天、儿童娱乐和老人生活等方面的需求。
图4 语音交互流程
3.2 肢体交互功能
肢体交互主要靠仿人上肢做出类人的肢体动作来实现,并能结合语音和眼部表情以和人进行交互,采用ROS 提供的MoveIt! 功能包进行设计,其结构框图如图5所示。首先根据机器人模型和视觉传感器获取的环境信息以及机器人的初始状态等进行规划场景,然后通过运动学求解和坐标变换得到左右仿人上肢姿态和每个关节舵机转动角度之间的关系,最后经运动规划通过仿人上肢舵机控制器控制每个关节的舵机转到相应的角度来实现肢体动作。 在动作过程中,通过舵机反馈的转动角度以及3D 实感相机检测周围环境的变化以避免碰撞。
图5 肢体交互结构框图
3.3 自主移动功能
自主移动使机器人不仅能够在家里移动过程中避开各种障碍物,还能自动移动到主人面前并能跟随主人。 移动控制模块中控制器使用ros_arduino_bridge作为一个ROS 节点,首先要把自主移动节点发送的移动方向、线速度和角速度等参数消息进行解析,得到机器人左右轮需要移动的线速度、角速度和位移等参数;然后与编码器和IMU 所测得机器人左右轮实际移动线速度、角速度和位移等姿态参数进行计算,得到机器人移动的速度和方向等误差,通过PID 算法对左右轮电机转速进行精确控制,使机器人按路径规划的轨迹进行移动以及通过超声波传感器避障,并把机器人的线速度、角速度和位移等姿态参数向里程节点发布消息; 最后经自主导航节点调用的rgbdslam和move_base 等功能包进行室内三维地图创建和自主导航。
3.4 UI 设计
家庭陪伴机器人除了与人进行语音交互和肢体交互之外,还可以通过为触摸屏开发的UI 与人实现互动,如儿童学习、儿童娱乐、老人娱乐和经人脸识别的身份验证等其他功能,其主界面如图6 所示。 界面采用卡片式布局和子母界面设计,把这些功能的交互层接口节点封装成图标形式进行操作,不仅美观而且操作简单,便于儿童和老人使用。
图6 UI 主界面
4 机器人实物调试
在家庭陪伴机器人实物搭建完毕之后,主要对机器人进行校准以及对语音交互和肢体交互等人机交互功能进行测试,其他功能已在软件系统开发过程中进行了测试。
4.1 机器人校准
机器人校准主要包括对移动底盘校准和对仿人上肢运动校准以及对视觉传感器标定等,以保证机器人运动的准确度和精度。 对移动底盘进行多次测量校准,使其直线移动线速度误差在2 mm/s 之内,最大直线移动速度为1.2 m/s,原地旋转一圈角度误差低于2°且转动朝向角偏离不超过2°。 仿人上肢运动校准主要是确定左右仿人上肢各关节转动范围,为肢体交互中的运功规划提供约束条件以避免碰撞,以图1 中各关节位姿为初始位姿(即0°),各关节的动作及对应转动角度范围如表1所示。 视觉传感器标定采用ROS 官方提供的camera_calibration 功能包通过打印的棋盘格标定靶分别对头部摄像头和胸部ZR300 实感相机进行了标定并消除了图像畸变现象。
表1 仿人上肢各关节动作及转动范围
4.2 人机交互功能测试
人机交互功能测试按照家庭陪伴机器人的主要功能分别对语音唤醒、语音聊天、肢体交流、语音控制机器人移动和UI 互动等进行10 次测试,测试结果如表2 所示。在使用语音对机器人进行唤醒、控制机器人移动、为儿童讲故事和为老人播天气预报等较短语音交互时,机器人都能正确识别和语义理解,然而在与机器人进行自然语言的语音聊天过程中,对较长的对话只有1 次理解错误,其他9 次都能给出比较满意的回答,偶有因普通话不标准造成语音识别通不过需要重复才通过的情况,就语音交互整体而言成功率基本在90%左右,满足实际需要。
表2 人机交互测试结果
在进行语音交互过程中,都能顺利触发眼睛表情和仿人上肢进行肢体交互,测试过程如图7 所示。 图7(a)为机器人打招呼,在人和机器人语音打招呼过程中,其右上臂向上抬起,右肘弯曲使小臂抬起,右手呈半握状,通过小臂前后晃动实现打招呼,同时眼睛变换成微笑表情以及在触摸屏会显出语音图标和相应的一些文字;图7(b)和图7(c)为和人说再见的肢体互动,与打招呼的区别在于右手指完全伸直和左右晃动小臂以及显示文字不同;图7(d)为机器人握球互动实验,验证机器人的抓取能力。 另外其他测试项目都是通过UI进行操作,在10 次测试过程中都能顺利完成。 通过这些测试,表明家庭陪伴机器人基本实现其主要功能,达到设计要求。
图7 肢体交互测试过程
5 结束语
经实物测试,本文基于ROS 框架设计的一种自主家庭陪伴机器人不仅实现了能和人进行自然语音交流,还能肢体交流以及通过UI 交互,达到设计要求,验证了该家庭陪伴机器人设计方案合理,能满足日常家庭的陪伴工作。 但目前肢体交流和眼睛表情互动样式有些少,同时UI 为儿童学习娱乐和老人娱乐提供内容比较少,下一步将会在此基础上继续开发更多样式和提供更多资源, 争取做到使仿人机械手的每个手指能单独动作,从而使该机器人具有自己独特的性能以胜任更多家庭方面的工作。