一、前言
本作品是2024年全国大学生物联网设计竞赛的参赛作品,获得了全国总决赛二等奖。
由于本人技术有限,在音频和视觉同时运行上未能优化好,所以使用了两块RDK X3。首先分享项目的ROS2功能包节点和话题的分布图,如下:
二、功能设计
2.1物体抓取
采取双机械臂的模型设计,参考tros手册,通过yolov5训练模型,得到我们所需的模型文件,再部署到RDK x3派板端,通过摄像头和BPU模型推理实现对物体的检测,再通过串口发送数据给下位机,控制机器人移动,机器人移动过程不断进行模型推理,到达物体旁边时,再控制机械臂进行抓取,通过声源定位可以将物体拿至说话人旁边。
图2-1
如图2-1是我们在板端通过摄像头推理出的目标检测画面,YOLO系列作为单阶段目标检测中的代表算法,具有速度快,泛化性好的优点,可实现垃圾识别、车辆检测等功能,主要应用于自动驾驶、智能家居等领域。我们使用yolov5算法训练模型,将模型部署到RDK x3派上,利用BPU进行算法推理,发布包含目标类别和检测框的算法msg,并通过websocket package实现在PC端浏览器上渲染显示发布的图片和对应的算法结果。
关于模型训练及部署到板端的过程我参考的这两位大佬的博客:
1.https://developer.horizon.cc/forumDetail/198686198578007656 (强强烈推荐?)
2.https://developer.horizon.cc/forumDetail/185446371330059463 (强强烈推荐?)
在这里我给出我的一些建议:如果是参加比赛,选定了一个摄像头就不要再更换摄像头了,训练集可以自己用自己的摄像头去拍照获取(可以写一个python脚本),训练的平台可以选择一些网上的平台,例如百度飞桨,或者自己的电脑安装一个ubuntu的子系统,双系统也可以(但是切换可能有点麻烦)。标注我推荐使用百度智能云的Easydata平台进行标注,毕竟手动标注很累,这个平台还有模型增强和数据清洗的功能。我建议模型训练和导出的过程可以直接参考leaf大佬的博客,直接使用leaf佬的yolov5文件,等到模型转换成onnx模型后开始观看徐国晟大佬的视频,这样是最快的。
下面是我当时遇到的一个问题,就是模型训练时和导出这里要分别注释不同的地方:
图2-2
2.2语音识别和声源定位
参考tros手册,使用四麦麦克风阵列进行录音,使用本地离线SDK实现语音识别,能够唤醒和休眠,自己设置语音的命令词(需要修改/opt/tros/lib/hobot_audio/config/hrsc/cmd…文件),需要自己修改hobot_audio源码,通过语音合成技术和USB声卡实现语音播报,从而实现语音控制机器人运动和交互,同时语音切换识别的模式。通过四麦麦克风测算声源定位DOA角度信息,通过IMU解算小车的具体方位,然后使用超声波测距,遇到人体就停下来,后来发现由于一些原因(机器人模型差、传感器精度不高等)声源定位效果太差,于是我更换思路,先通过麦克风阵列得到的角度结合IMU测算转动角度,先让机器人转动一个角度,再去识别人体标志物(此处我使用的是手机壳)距离,融合实现声源定位机器人,经测试效果比较好。
还有音频部分的播放音乐这个功能,这个就是运用pygame这个游戏库实现的,比较简单。
2.3人体跟踪与摔倒检测
参考tros手册,通过人体检测算法和USB摄像头,利用BPU进行算法推理,分析图像数据,控制底部麦轮进行移动,实现人体跟踪。同时加入了识别人体摔倒检测,会有语音播报和邮件提醒。同时也加入了手势识别,控制机器人移动。
邮件提醒参考的这位大佬的博客:https://developer.horizon.cc/forumDetail/241340974788563988
图2-3
2.4智能语音对话
接入国产智谱清言模型,实现语言交流,通过语音合成技术和USB声卡实现智能语音对话(该功能比较需要良好的网络)。
2.5图像内容理解
接入百度智能云图像理解API,实现图像内容理解,在百度智能云里面该API已经升级,可以对需要理解的图像提出问题,这个需要自行实现。
2.6手机app控制
这里本人只提供出设计思路,采用Android stdio开发app,设计了两种模式,分别为近距离的蓝牙控制,下位机接蓝牙模块进行通信,控制机器人移动和双机械臂运动;还有一种就是RDK X3连接物联网云平台,app也连接物联网云平台,创建一个产品,产品里面再创建两个设备,一个设备就是旭日X3,还有一个设备就是安卓app,设置云消息流转,通过云平台MQTT协议通信,实现app远程控制机器人运动。
需要注意的问题:由于机械臂每个舵机的控制是16进制数据,而云平台里面的消息一般是json格式,所以app先发送10进制的字节数组或者控制移动的字符串,RDK X3端需要进行数据解析再发送给下位机。
2.7下位机
下位机部分就是STM32G4控制的机械臂和电机的驱动部分,还有盖革计数器(这个网上有开源的,可自行搜索)是检测核辐射的部分,本人只开源RDK X3这部分的全部源码,下位机这部分相信各位单片机大师都能够自行实现。
三、作者有话说
由于本人技术与表述能力有限,同时作者打完比赛就来到深圳南山这边寻找工作了,来了三天了还没有找到工作,心情有些低落,所以该作品成果只能表述到这里。感谢地平线论坛的技术支持、开源手册与开源社区,特别感谢边工作边解答技术问题的超哥,祝愿地平线官方与论坛越来越好,越来越热闹!
源码由于过大,我放在百度网盘上了,需要的朋友可以自取。
链接:百度网盘 请输入提取码 提取码:1meg