项目介绍
这是一款高性价比的桌面宠物机器人,总成本不足四百元,它以esp32为主控,借助pc端运行深度模型进行控制,内置成长系统,能够在与主人互动过程中逐渐增加熟悉度。它的外形为椭圆的黄豆形状,以两个后驱的主动轮和一个前置的万向轮进行移动,后背有一个透明的罩壳,可用于存放小物品,额头上的小摄像头是它的眼睛,用于感知这个世界。它的胸部是一个距离传感器,用于躲避障碍物和悬崖。

产品设计思路
本产品的设计思路如下:
以esp32cam为下位机控制底层硬件,比如驱动机器人的电机和舵机使之产生相应的动作,同时收集传感器采集的信息如激光测距传感器所测的距离、摄像头采集的图像、mpu6050采集的姿态信息等。同时esp32与电脑通过蓝牙或wifi通信,将传感器的数据回传至电脑中,而电脑则将控制电机、舵机的信号发送给机器人。在PC端运行深度学习模型,以传感器的数据为输入,以执行器的数据为输出,经过一定数据量的训练后让模型能够实现一定的自主互动。后续也可通过接入deepseek、豆包等大模型实现智能化。
以下将从产品造型、机械结构、底层硬件、MCU软件、PC端顶层算法六个方面展开介绍。
产品造型
如图所示为机器人3d模型的渲染图,其外形是通过fusion360自由造型功能设计而成的,整体采用了圆润清新的、小巧可爱的科幻风格,机器人通身为与小麦颜色接近的淡黄暖色调,形象如同一颗长着三个车轮的黄豆。整体采用光敏树脂进行3D打印而成,机器人面部和背部透明部分则采用透明树脂,机器人头部有一个可以俯仰的摄像头,充当机器人的“眼睛”,机器人胸部有一个朝向前下方的激光测距传感器,用于避开障碍物和悬崖,下方凸出部分则是一个万向轮,机器人后方左右各有一个主动轮,用于移动,通过差速的方式进行转弯。机器人面部使用了1.3寸的oled屏幕,其眼睛为绿色椭圆形。在图中,机器人背部的透明罩可以手动打开,在里面的空腔里用户可以进行适当装饰,笔者计划在此放置苔藓,使其充当一个智能花盆。


机械结构
如图所示为机器人的侧面透视图,舵机通过连杆驱动摄像头转动,采用的是曲柄摇杆机构,其中连接舵机的杆比连接摄像头的杆短,因而能起到减速的作用,从而提高摄像头转角的精度。舵机的左侧为一块小锂电池,用于给机器人供电,电池左边为oled屏幕,用于显示机器人的表情,舵机下方为电机驱动和mpu6050陀螺仪,舵机右方为esp32cam主控,主控下方为扩展板,再下方则是两个小型减速电机,用于驱动车轮行进。车的前方下部为一个万向轮,用于平衡整个车底。

底层硬件
如图为esp32cam扩展板的原理图,其主要作用是连接主控和mpu6050、laser等传感器,以及下载程序和与串口通信电脑,方便调试程序代码使用。图为硬件布局示意图,esp32cam向舵机和电机驱动以及oled屏幕发送信号,从laser激光测距传感器和mpu6050陀螺仪以及ov2640摄像头收集信号,之后esp32cam与上位机采用udp、mqtt、蓝牙三中通信方式之一进行通信,具体通信方式视可具体情况而定。
MCU软件
采用arduinoide编写和编译代码,程序主要功能是通过iic协议与mpu6050、oled、laser进行通信,通过控制四个引脚输出的高低电平控制两个电机的转向和速度,通过pwm控制舵机转角,通过wifi将ov2640采集的图像以及所有从传感器采集的数据传输给电脑,并将电脑发送来的执行信号比如oled应该显示的图像以及电机驱动电平和舵机角度等信息输入到相应的执行器中,如图所示。
PC端顶层算法
PC端顶层算法是整个机器人的核心,也是机器人模拟宠物思考的关键技术所在。其主要以pytorch为框架,使用深度神经网络来模拟宠物的思考过程,以及生成相应的情绪和行为。
预期功能以及相关算法的原理与设计:
作为宠物的模仿者,机器人应能具备类似于宠物感官的多种功能,如视觉、听觉、触觉,以及相应的活动能力如移动、巡路、发出声音等,再者是机器人应能像宠物一般思考,会有类似宠物一样的心情状态变化。以下将分四个方面对机器人主要功能极其算法和设计进行介绍:
视觉功能
在视觉功能上,应具备人脸以及常见物品识别的功能,以使其认识身边的事物,为使机器人能“察言观色”,它也需要有情绪识别功能。
人脸识别
在人脸识别方面,采用dlib库: dlib库是一个开源的C++库,用于机器学习、计算机视觉和数值优化。它包含了大量预先训练好的模型,可以用于人脸识别、面部特征提取等任务。使用dlib库进行人脸识别的流程大致如下:首先,利用dlib库中内置的模型文件,检测图像中的人脸和面部特征点;然后,利用预训练的人脸识别模型,根据面部特征点计算人脸的嵌入向量;最后,通过比较不同人脸的嵌入向量,判断是否为同一人。
常见物品识别
在常见物品识别上,采用yolo系统:YOLO 是一种广泛使用的深度学习算法,因为它是一种基于分类/回归的目标检测方法,赋予了该算法的核心优势:结构非常简单、模型体积小、计算速度快。YOLO采用了深度学习的方法,通过训练卷积神经网络(CNN)来识别物体。使用YOLO进行物品识别的流程如下:首先,将图像输入到训练好的YOLO模型中,模型会在图像中检测出多个物体;然后,根据检测结果,提取出物体的类别和位置信息,由此机器人便获知周边物品的基本信息。

情绪识别
在情绪识别上采用了deepface,DeepFace是Facebook研发的一种人脸识别技术,它可以通过分析人脸图像来判断人的情绪状态。DeepFace采用了深度学习的方法,通过训练卷积神经网络(CNN)来提取人脸的特征,并利用这些特征来判断情绪。DeepFace拥有多种模型和检测器,能够以超过93%的准确率进行人脸识别。使用DeepFace进行情绪识别的流程如下:首先,利用CNN提取人脸图像的特征;然后,将这些特征输入到情绪分类器中,判断人的情绪状态;最后,根据情绪分类结果,对机器人进行相应的反馈和调整。
听觉功能
在听觉功能上,由于硬件的简化,在此暂时采用pc端的麦克风和音响作为机器人的“耳朵”和“喉咙”,机器人应能实现基本的语音交互,比如类似“hey siri”的叫唤功能,机器人在收到声音信号后能发出声音作为回应,在本项目里暂时未让机器人具备“说话”的功能,只让其发出类似动物叫声的声音,以此简化开发;
SpeechRecognition(简称SR)库是一个开源的库,用于实时语音识别。它支持多种语音识别引擎,包括Google Web Speech API、Microsoft Bing Voice Recognition、IBM Speech to Text等。这个库非常方便,可以轻松地将语音转换为文本,非常适合我们的项目需求。在本项目中,我们首先需要引入SpeechRecognition库,然后使用其中的Recognizer类来初始化识别器。接下来,我们可以使用Microphone类作为音频源,捕获用户的声音,然后将捕获的声音通过识别器的recognize_google()方法,提交给Google的Speech-to-Text API进行识别。识别结果会以字符串的形式返回,我们可以对其进行处理和显示。
思维功能
在最为核心的思维功能上,首先,借助于神经网络机器人能在收集相应的周围环境信息如人物、物品、人物的表情行为后经过模型的运算产生相关的回应,比如主人笑着向它挥手时,它能驱动舵机使摄像头对着主人,在oled屏幕上显示“开心”的表情;其次,安东尼奥·达马西奥(Antonio Damasio)提出,有效的决策在很大程度上依赖于情感的基本机制,他的研究表明,即使在简单的决策过程中,情感在达成适当结果方面也是至关重要的。因此,我们的工作包括一个情感系统,利用认知过程来解决基于行为控制系统中的行为选择问题。比如,机器人有时心情低落时就不愿意走动,只会躲在角落;此外,宠物机器人还应通过与主人的互动学习多种行为。为了保障用户在使用时间长久新鲜感淡化而对产品失去兴趣,机器人也应有一套“学习成长系统”,该系统能使机器人在与主人长期互动的过程学习更多技能,使其性格也缓慢发生变化;最后,为了满足不用用户的个性化要求,机器人的“性格”,应具有多样性,如分内敛和外向两种,内敛的机器人倾向于只和熟悉的主人互动,而外向的机器人则对所有人类都十分热情。
为实现上述功能,笔者决定采用循环神经网络(RNN)来构造机器人的思维系统,循环神经网络作为深度学习的一个分支,是处理序列数据的强大模型,在众多重要的物联网任务中表现出色。循环神经网络由于其独特的结构和性质,非常适合用于构造机器人的思维系统。由于机器人所面对的外界环境也是一直处在按照时间顺序的连续变化之中的,所以机器人必须能够处理序列化的信息。而RNN能够处理序列数据,即能够有效地处理如语音、文本和时间序列数据,因而也很适合用于本项目中模拟宠物思维的系统里。并且RNN能够让从前输入的信息影响当前的模型的输入,这意味着它能让机器人像真宠物一般具备一定的记忆力,存储一定的信息,并在需要时使用这些信息。此外,RNN具有良好的可扩展性,可以很容易地与其他神经网络结构(如卷积神经网络)结合使用。这使得它可以用于构造复杂的多模态机器人思维系统,如结合视觉、听觉和触觉信息的系统。最后,RNN的参数共享特性可以减少模型的复杂性,提高计算效率。这对于机器人思维系统来说非常重要,因为它可以使其在处理不同类型的数据时共享学习能力,从而提高整个系统的性能。

如图为机器人思维系统的示意图,其中图象经过yolo处理后变为目标物体的类别与位置,声音信号经过SR处理后变为了文本,其他传感器如陀螺仪和激光测距器采集的数据不需加工直接作为神经网络的输入,而神经网络的输出为机器人的心情状态和行为,行为数据经过执行器处理后会转变为oled屏幕、舵机、电机的具体动作,比如oled显示什么样的表情,舵机转至什么样的角度,电机以多大的速度和方向旋转。其中心情状态和输出数据经过成长机制处理后的数据会反馈至输入处。心情状态反馈可以使机器人在不同心情下对同一环境作出截然不同的反射,而成长机制则能让机器人在不同时间维度下展现完全不同的风格的面貌,模拟着一只宠物在心智上随着年龄增长的变化。
下图则为RNN的结构示意图,共一个输入层和三个隐藏层以及一个输出层,其中输入层有150神经元的输入用于表示yolo输出的视觉信号,可输入最多五个目标类别的名称和位置,有90个输入用于表示SP输出的文本信号,有100个神经元用于表示其余传感器的数据,余下60个输入则用于表示心情状态的输入。而输出的25个数据有15个用于反映行为,10个用于反映心情状态。

在完成思维系统的设计后,还需对该神经网络“投喂”足够的数据后才可以使其真正起作用。在此收集数据笔者使用人工采集的方法,即先在人为操控的模式下让机器人与人互动,由人控制机器人使其输出相应的动作和表情,与此同时电脑不断记录着传感器采集的数据与机器人的所执行的行为,传感器数据将会作为网络的输入,执行器数据将作为网络的输出,当积累一定量后便可投入RNN思维系统中进行训练。完成训练后,充分学习了人类操控机器人的方式后机器人将学会独立控制自己的身体,实现宠物机器人情绪反馈的效果。
实物展示




项目持续开发中,后续将进一步更新和开源~~