智随你动——基于RDX X3的多功能智能机器人,您的全能助手(源码分享)

一、前言

本作品是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