APP下载

基于ROS 系统的语音家庭服务机器人控制设计研究

2022-03-09蒋恒新闫潇乐王露

科学技术创新 2022年4期
关键词:里程计树莓编码器

蒋恒新 闫潇乐 王露

(重庆交通大学机电与车辆工程学院,重庆 400074)

1 概述

早在1950 年就人们就已经开始制作各种各样的机器人。直到现在机器人在人们的日常生活中出现频率越来越高,机器人的智能化也推进了工业化水平的快速提升,而移动机器人的作用尤为突出。关于移动机器人的研究,首先得考虑其移动方式,其次是驱动器的选择,以使机器人达到良好的控制效果,再者必须考虑定位和路径规划。本文设计一种室内移动器人,选择轮式移动,单片机作驱动板控制其移动,有着快速,控制功能强等优点。路径规划由ROS 这个开源社区提供的move_base 功能包实现。文献[1]运用Kinect 摄像机采集环境信息融合IMU 提高机器人自主导航的精度。文献[2]利用微软公司的Speech SDK 语音技术,设计了语音系统。

本文对自主导航、语音控制、机器人与智能家居互联互通问题进行研究,并通过实践验证了该研究的可行性。

2 移动底盘设计

考虑实现的简易性,及控制的精准性,本文设计的移动机器人采用两轮差分移动底盘。该底盘配备两个减速比为1:56 带编码器的直流减速电机做驱动轮,两个万向轮做辅助轮,如图1 所示。

图1 底盘模型

根据写好的底盘通信协议,我们需要将里程计信息(X,Y轴坐标、底盘线速度、底盘角速度和底盘航向角)经串口通信告知ros 系统中的底盘控制节点(base_controller),因此需要进行运动学分析。里程计的坐标系是以机器人上电时刻车头的朝向为X 轴,Z 轴朝上,采用右手坐标系。机器人在地图中的坐标可通过极短时间内移动的位置在X,Y 轴方向上的投影做积分获得。

本文利用编码器来推算轨迹,编码器每一个脉冲对应实际轮子行走的直线距离系数为

其中r 为驱动轮半径,sum_encoders 为电机轮转一圈编码器测得的脉冲数(编码器分辨率)。单位变化时间内编码器值的增量为

当前编码器测得脉冲数减去上次编码器测得脉冲数。则单位时间(一般为编码器采样周期)机器人移动的距离为

底盘线速度角速度的确定,可根据底盘的物理模型推算出

通过固定采样周期采取编码器的值可推算出VL,VR左右驱动轮的线速度,l 为圆形底盘半径。

航向角的确定可依靠两个驱动轮的编码器来推算,两轮编码器单位时间内的增量为inc_encoder_L,inc_encoder_R。极小一段时间内内两轮出现的距离差为:

据图2 所示,单位变化时间(极小的一段时间)内

图2 运动示意图

可知该方法对编码器的精度要求非常高,而两驱动轮在运行过程中伴随着漂移和打滑等现象,极大提高了误差。因此我们采用具有高精度的陀螺仪测机器人的航向角,精度大大提高。

3 建图导航设计

3.1 单片机设计

单片机要实现对底层传感器的控制和信息采集,以及为上位机树莓派传输里程计数据和传感器数据。据图3 可知,单片机主要开发任务为:a.解析树莓派速度位姿指令,实现对电机闭环控制。b.获取陀螺仪,多传感器和里程计数据。c.与树莓派通信,完成数据交换。

图3 系统软件框架

3.2 树莓派程序设计

3.2.1 slam 建图。本文采用gmapping 功能包建图,该功能包首先得订阅含激光雷达深度信息的laser_scan 话题,同时接收底盘传输上来的里程计信息采用Rao-Blackwelllized粒子滤波算法,经过调整参数,输出二维栅格地图。

建图过程:

a.启动机器人,远程登录机器人

roslaunch base_controller base_controller // 启动底盘控制节点

rosrun telep_twist_keyboard telep_twist_keyboard.py //启动键盘控制节点

roslaunch mrobot_navigation gmapping.launch // 启动建图节点

b.通过键盘控制在房间中行走,直到达到要求为止,过程如图4 所示。

图4 建图过程

地图构建这一过程是根据传感器的结果来构建一张地图或者是修正当前地图,同时将结果给定位算法作为先验地图。gmapping 常用配置参数如表1 所示。

表1 gmapping 参数

建图过程中非常重要的一环就是坐标变换(后文称tf 变换),建图导航运行时的tf 变换如图5 所示。

图5 TF 树

对于gmapping 功能包建图所必需的坐标系就是map,odom,base_footprint,base_link,laser 坐标系。map:地图坐标系,即机器人的世界坐标系,由gmapping 功能包发布。Odom:里程计坐标系,动态坐标系,里程计中机器人坐标即odom 相对于map 的坐标,由底盘控制节点(base_controller)发布。base_link:机器人的本体坐标系,base_footprint 为base_link 坐标系在地面的投影,tf 变换由提前建立好的机器人的URDF模型发布。laser:激光雷达的坐标系,由于相对于base_link 为静态坐标系,通常将其放在URDF 模型里一起建模。

3.2.2 自主导航。自主导航的整体框架为图6 所示。在进行自主导航时,首先通过全局路径规划器在地图中规划处从机器人当前坐标到目标点坐标的最优路径,在行进过程中考虑到机器人实际移动与大脑下发的指令有一点偏差,此时本地路径规划器将全局路径分成块,在每个块内控制机器人的姿态,使之在局部尽量符合全局路径。本地规划器的另一个功能是通过读取雷达与物体的距离,若是该距离小于代价地图设置的膨胀层半径导致有潜在碰撞危险,例如人从机器人身边走过,本地实时规划器将会搜索躲避和行进的多条路径,综合各评价标准选取最优路径来避开障碍物。圆形机器人宜采用DWA(Dynamic Window Approaches)算法,该算法主要是在速度空间中采样多组速度,在模拟机器人的运动轨迹时,考虑两个相邻时刻的的运动轨迹,将这段位移求和(直线)即可推算出接下来一段时间的轨迹。该算法通过比对推算出来的轨迹,测得最优路径所对应的速度,发布Twist 消息类型到cmd_vel 换题来驱动机器人运动。做好上述两部分路径规划,机器人就可以根据路径正常运动了。但有时候,机器人将会走到一些狭小空间或碰撞到障碍物,那它将会进行恢复动作,Recovery Behavior 就属于异常动作处理的方法,如实现旋转的恢复行为,重新规划全局路径。若机器人不能规划出到目标点路径,即终端报错停止动作。

图6 导航框架

另一个重要的点是机器人的定位问题,自主导航时单独依靠轮式里程计的定位精度难以达到要求,于是本文采用amcl(自适应蒙特卡洛定位),蒙特卡洛定位法使用的是粒子滤波的方法来进行定位的。此处粒子滤波通俗来说就是通过里程计坐标和amcl 功能包参数设定在地图空间中框出一个范围,然后均匀的撒一把粒子,然后通过获取机器人的位姿来移动粒子,如机器人移动一步,粒子也移动一步,不管该粒子位置是否正确。将每个粒子信息和激光雷达的点云信息代入选定的评估方程来推算该粒子的置信度,接着根据结果重新调整粒子的位置。经过多次迭代,机器人的确切位置也被推算出来了。

4 语音控制设计

语音控制首先得让机器人能听懂,本文采用的是离线命令词识别。命令词识别,是根据所构建的语法规则,将与之相似程度高的人的语言转换为文本输出。语法识别的结果值域只在语法文件所列出的规则里,故有很好的匹配率,另外,语法识别结果携带了结果的置信度,应用可以根据置信分数,决定这个结果是否有效。例如构建一个简单的语音拨号语法,可以定义如图7 所示语法。

图7 语法构建

该语法支持识别引擎可以识别以下说法:找一下张三;打电话给张三;找一下李四;打电话给李四。凡是说出这个范围中的任意一句,均可被识别引擎识别。如果指令不在上述范围之内,识别引擎会拒绝识别。

在语音功能包下创建节点获取命令词识别结果,当识别结果置信度超过阈值(这里设置的为18)时,该节点进入下一动作。例如通过system 函数调用反馈语音文件和脚本。

5 物联网及安全检测设计

5.1 物联网

物联网技术的高速发展,让物与物之间的距离不再遥远,通过分布在不同地方的物联网节点,使得家居环境变得更加智能化。智能移动机器人的出现,使得控制载体更加丰富,本文设计的机器人可以进行自主操作,如控制家居中得风扇、插座、台灯等IoT 设备。要实现这一功能,首先得学会miio 库的使用,目前miio 库支持的设备如图8。

图8 miio 支持设备

可见所支持的设备几乎囊括了所有类型家用电器,符合我们的要求。由于ROS melodic 版本搭载在Ubuntu18.04 上,后续使用均在该Linux 系统上实现。使用pip3 install python-miio 命令安装python-miio 库,需要知道上述设备都遵循了miio 协议,而python-miio 是封装后的API。注意该库文件需要在python3.5 以上版本才能安装,而Ubuntu18.04 默认python2.7,安装之前需先安装然后切换python 环境。在miio 文件夹下有诸多关于控制的.py 文件,在这些文件中继承了Decice 类。使用之前需先获得设备的ip 和token,用电脑去连接IoT 设备放出的wifi,在终端输入miio discover 命令即可获得ip 和token 值。接着运用脚本程序即可控制IoT设备开启和关闭。

5.2 安全监测

本文设计的移动机器人实现安全监测主要是通过采集温度传感器、二氧化碳传感器数据和摄像头实时识别家中情况。单片机采集温度和二氧化碳传感器数据传输到大脑树莓派,超过阈值测触发报警装置(通过4G 模块发送紧急短信)。摄像头主要进行人体监测,实时识别家中老人是否摔倒等情况,若有则触发报警装置。

6 结论

本文主要围绕语音家庭服务机器人的功能实现进行阐述。该机器人基于ROS 操作系统,利用树莓派,stm32 等高性能嵌入式开发板做控制,写好单片机与树莓派通信协议保证大脑和身体动作一致。路径规划使用move_base 在gmapping建好的2D 栅格地图中实现导航。语音控制部分,通过USB免声卡驱动连接喇叭反馈语音识别是否成功,匹配成功可自行调用写好的利用python-miio 库的脚本文件控制IoT 设备,且可以进行安全监测,可见该机器人的实用价值较高,有一定研究意义。

猜你喜欢

里程计树莓编码器
室内退化场景下UWB双基站辅助LiDAR里程计的定位方法
融合CNN和Transformer编码器的变声语音鉴别与还原
山间“小精灵”
——树莓
舞台机械技术与设备系列谈(二)
——编码器
基于树莓派的骑行智能头盔设计
一种单目相机/三轴陀螺仪/里程计紧组合导航算法
基于双增量码道的绝对式编码器设计
基于树莓派的远程家居控制系统的设计
黄金水果红树莓
大角度斜置激光惯组与里程计组合导航方法