1.使用/voice_aiui等语音服务完成基本的语音聊天(需唤醒词“元宝”)。
0.前言
本篇记录了我的智能机器人实训。
1.任务
1.1.任务实训任务
1.使用/voice_aiui等语音服务完成基本的语音聊天(需唤醒词“元宝”)。
我:“元宝元宝”
机器人:“哎。什么事”
我:“今天天气怎么样?”其他问题也可
机器人回答:“”
2.语音多点导航
我:“元宝元宝”
机器人:“哎。什么事”
我:“带我参观一圈”其他问题也可
机器人回答:“好的,这就带你去”
Goal_order: 吉林-》北京-》上海-》广州-》深圳
1.需调用二次定位,准确的到达框中,顺序不能错误
2.每到达一个点位等待2s,并打印amcl的定位信息一次
3.正确的语音播报
4.新环境里有障碍物,不能撞墙或者障碍物
5.最后返回起点
3.语音单点导航
我:“我要到广州馆”
机器人:”好的,这就带您去广州馆。”
然后自主行走到广州馆,
二次定位,准确的到达框中,
并语音介绍广州馆。
机器人完成上述任务后返回出发点。
1.2.智能机器人仿真任务
1.使用话题控制机器人移动
2.使用ar码的二次定位
3.操作虚拟机器人地图构建
4.单点导航加二次定位
5.机器人多点导航
6.人脸识别
7.语音聊天
1.3.智能机器人实物操作任务
1.手柄控制机器人移动
2.机器人多点导航
3.语音导航
2.目的
a、深入学习ros编程语法知识;
b、学会运用pycharm工具进行算法编译;
3.使用环境
运行操作系统:ubuntu 20.04操作系统;
开发语言及版本:c++和ros;
开发工具:vscode。
4.综合项目实验
任务实训
问题
1.在进行导航和语音播报时,因为新添加了障碍物导致机器人进行二次定位后导致后续的定位会有可能出现机器人的自我矫正(原地转圈)。
2.在主要while循环运行的过程中,既要到达目标点后调用一次回调函数打印消息,又要打印完继续运行while循环。
解决办法
1.我们将局部地图的碰撞阈值进行调低,使机器人可以有更多的空间进行导航选择不需要在狭小缝隙间进行路径规划导航,同时我们将两目的点较长的导航进行分段导航,这有助于导航的路径点寻找。
2.把spin函数改换为spinOnce函数,且把消息长度设置为一条即可满足要求。
5.仿真实验
1.使用话题控制机器人移动
熟悉ros话题通信机制的原理和应用场景,使用订阅者话题订阅/odom话题实现速度打印,通过编写代码实现机器人仿真沿3*2的矩形路径循环移动,并打印当先实际机器人速度;
2.使用ar码的二次定位
实验任务
熟悉服务通讯机制原理和应用场景,使用ros客户端编写机器人AR码跟踪服务,让仿真机器人对准AR码,并不断靠近。本实验使用仿真机器人底部背面的相机模块识别加工台前的ar码,并停留在ar码前方0.3m处。
本实验难点
1.第一使用时容易忘记启动ar码识别的功能包,导致自己的二次定位包无法正常运行;
2.机器人识别ar码的相机模块在仿真机器人的背面,第一次使用ar码识别时容易使用机器人前置相机进行识别导致识别失败。可通过手动对机器人进行旋转来解决。
3.操作虚拟机器人地图构建
实验任务
了解slam的原理,熟悉操作仿真机器人进行地图构建,Gmapping算法是目前基于激光雷达和里程计方案里面比较可靠和成熟的一个算法,它基于粒子滤波,采用RBPF的方法效果稳定,许多基于ROS的机器人都跑的是gmapping_slam,本次实验使用的就是Gmapping算法进行地图构建。
下图为gmapping的原理图:
下图为使用gampping建图图:
4.单点导航加二次定位
实验任务
了解移动机器人导航功能,学会如何编程控制机器人进行目标点导航,自主导航是智能移动机器人最重要也是最基础的功能之一,虽然SLAM是机器人自主移动的关键,但SLAM并不表示自主导航,SLAM仅仅是解决地图构建和即时定位问题,而自主导航则是解决机器人移动时与环境的自主交互,点到点的的自主移动问题。完整的自主导航应该包含SLAM、路径规划和运动控制。
下为导航框架图:
下图为实验图和程序图:
5.机器人多点导航
1.了解移动机器人导航功能;
2.学会如何编程控制机器人进行目标点导航;
3.编程实现控制机器人在五个场馆和出发点的巡航
4.顺序:吉林--》北京--》广州--》上海--》深圳--》原点
(1)、需要使用二次定位准确停到框中;
(2)、每次到达目标场馆后机器人需等待两秒,再次开始下一个点;
(3)、在等待时终端需打印当前机器人的amcl定位坐标,订阅话题为/cl_pose;
(4)、巡航圈数两圈。
6.人脸识别
实验任务
熟悉人脸识别功能包,编写一个节点调用人脸识别服务进行人脸识别,将识别到的人的姓名打印到屏幕,Face_recognition是世界上最简洁的人脸识别库,可以使用Python和命令行工具提取、识别、操作人脸。人脸识别是基于业内领先的C++开源库 dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。
本次实验难点
本实验需下载usb摄像头驱动依赖包,在未下载安装驱动包时,程序正常执行但摄像机无图像显示;同时,在使用虚拟器进行本次实验时会出现因虚拟机usb端口设置错误导致摄像机无法正常使用,正确应将usb端口类型调节未usb3.1.
7.语音聊天
实验任务
进一步熟悉语音采集,语音听写,语音合成等语音功能的使用和开发,学习语意理解服务的综合应用,编写程序实现机器人聊天系统,能语音控制机器人前进、后退、左转和右转,实现语音指令询问“我是谁”,机器人回答“好的,让我看一看”。然后语音播报识别的姓名。
实验难点
在使用aiui节点时不能单独启动该节点否则将无法正常启动该节点,而应该使用launch文件进行启动,同时语音采集和语音转换等节点也不可多次启动将会一直处于服务等待中。
下图为语音播报原理图:
下图为程序图和实验结果图:
6.实物实验
1.手柄控制机器人移动
实验任务
熟悉Bobac3机器人底盘控制接口;熟悉了解手柄话题接口;完成以下任务:通过手柄左摇杆的“上下摇动”控制机器人运动的线速度,通过手柄右摇杆的“左右摇动”控制机器人的角速度。在终端打印底盘的传感器相关数据,比如电机转速,温湿度,超声波(car_data话题数据)
2.机器人多点导航
本次实物实验就是仿真实验当中的多点导航,其程序代码和原理都一致,但在进行实物操作时因为有人员流动导致,实际建图效果和导航效果相较一般,经常需要认为进行机器人的姿态校准。在实物上使用了实体特有的功能包,在仿真情况下无法进行仿真实验。
3.语音导航
本次实体实验是将仿真实验当中的语音识别和定点导航进行了结合。
实验问题
在本次实验当中出现了aiui功能包无法在实物上正常使用,但在仿真情况下可以正常被使用,在进行反复实验和与实验老师的沟通后我们确定问题由语音播报功能包当中的实现语音播报的代码中缺失空格导致:
下图极为问题代码:
正确解决及为在play后添加空格。
8.心得体会
在ROS实训项目中学习了如何结合语音识别和导航系统,让我受益匪浅。通过这次实践,我深入了解了ROS的应用和语音识别技术在导航中的潜力。
首先,我对ROS有了更深入的认识。在实训中,我学会了如何使用ROS构建机器人的软件架构,以及如何通过ROS节点实现不同模块之间的通信。这让我对机器人软件开发有了更清晰的认识,也提升了我的编程能力。
其次,语音识别技术给我留下了深刻的印象。通过学习语音识别的原理和应用,我了解到语音识别在智能机器人中的广泛应用,尤其是在导航系统中的重要性。通过语音指令,机器人可以更加智能地执行任务,为用户提供更便捷的服务。
在设计基于语音识别的导航系统时,我遇到了一些挑战,比如如何准确识别不同人的语音指令,如何将语音指令转化为机器人的行动等。但通过团队合作和不懈努力,我们成功地设计并实现了一个功能完善的导航系统。这个过程让我意识到团队合作的重要性,也锻炼了我的问题解决能力。
最后,通过测试和优化导航系统,我深刻体会到持续改进的重要性。优化系统性能和用户体验是一个不断迭代的过程,需要不断地学习和改进。在这个过程中,我学会了如何通过数据分析和用户反馈来改进系统,提高机器人的自主导航能力。
总的来说,这次ROS实训项目让我收获颇丰。我不仅学会了如何利用ROS和语音识别技术实现智能导航,还锻炼了团队合作和问题解决能力。这些经验将对我的未来发展产生积极的影响,我期待能将这些知识运用到更多的实际项目中,为机器人技术的发展贡献自己的力量。
(加一点,在写这份报告的时候是截止前的凌晨4点35分,整个宿舍都在熬夜干这次的结课实验,甚至枸杞、酸柠檬等各种能提神的东西都用上了,万万没想到阿,本来计划着10点就能干完的事情,愣是干到了凌晨。)