今天小编给大家带来的是国外Maker David Packman 的基于树莓派机器人-MBO,该机器人的外观设计灵感来自动漫Adventure Time中的机器人MBO,该机器人具有强大的交互功能,可实现脱机唤醒词检测、调用Chat GPT3.5进行聊天、机器视觉对图像进行分析和说明等众多功能。
材料清单
硬件
- Raspberry Pi 3 Model B *1
- Raspberry Pi Camera Model 3 *1
- 单声道2.5瓦音频放大器 *1
- 8Ω1瓦扬声器 *2
- Mini USB 麦克风 *1
- 6mm触摸模块 *1
- 18650电池 *2
- 拨动开关 *1
- 5V风扇 *1
- 9克舵机 *4
- 5V稳压模块 *1
- USB无线键盘 *1
软件
- 树莓派官方系统
- Microsoft Azure Cognitive 语音服务API
- Microsoft Azure Computer Vision
- Open AI Chat GPT3.5 Turbo
- Open AI DALL-E2
工具和其他
- 3D打印机
- 3D打印笔
- 热熔胶枪
- 电烙铁
- 电动螺丝刀
- 丙烯颜料
Step1 - 项目介绍
BMO-AI是一款3D打印的可移动桌面伴侣机器人,其原型来自Adventure Time系列动漫中的机器人角色BMO,该机器人同时利用几种不同的AI功能,以便以更具吸引力和有用的方式与人进行社交。
BMO-AI利用运行Raspbian Bullseye的Raspberry PI 3B +和Adafruit CRICKIT Hat进行伺服电机控制和来自其按钮阵列的信号输入。BMO有四个关节点和一个5英寸的显示屏,用于使用Pygame库显示面部表情和图像。BMO 还使用其他几个库来利用以下 AI 功能:
- 语音转文本和文本转语音,使用 Azure 语音服务进行脱机唤醒词检测。
- 使用OpenAI ChatGPT 3.5 Turbo完成单轮问答文本。
- 使用 OpenAI ChatGPT 3.5 Turbo 聊天完成的多转和上下文感知聊天。
- 使用 Azure 计算机视觉服务进行图像分析和说明。
- 使用 Azure 计算机视觉服务进行图像分析和说明。
- 树莓PI相机模块v3,具有图像捕获和共享功能。
- *新的绘画模式使用稳定扩散根据您的口语描述绘制图片。
- *来自 ChatGPT 3.5 描述模式的新 DALL-E 映像,它将根据 ChatGPT 生成的描述创建映像。
Step2 - 3D打印环节
打印部件文件可在 printables.com. https://www.printables.com/model/452663
1.建议您在此版本中使用 PETG 或其他比 PLA 更具弹性和耐温性的灯丝,尤其是在您不安装风扇来冷却 SBC 和其他组件的情况下。
2.除了按钮外,这些构建说明中显示的型号在 Prusa MK2 和 MK3 打印机上使用 Polymaker Polylite 蓝绿色 PETG,层高为 .02。
3.按钮按它们应该打印的颜色标记,PLA适合这些。
4.关于手臂的说明。手臂有两个单独的STL版本,一个版本(ArmRtFull和ArmLtFull)用于单部件打印,其他版本(ArmRT和ArmLt)在7mm处拆分,以减少支撑瑕疵,打印后需要粘合在一起。
5.对于上腿和小腿,您需要在没有支撑的情况下打印,或者使用支撑执行器,以便您的打印机不会在穿过腿部的隧道内打印支撑。否则,您将无法将绳子推过腿部以进行踢腿动作。
Step3 - 预组装说明
Step 3.1 – 准备伺服电机
1.在测试您的伺服电机以确保它们正常工作后,您需要根据它们的铰接点标记每个电机。例如,使用永久性标记将一个标记为 LA(左臂),将另一个标记为 LL(左腿)。(左和右是从BMO的角度)。
2.标记伺服电机后,应预先定位伺服电机,使左侧舵机处于最远的逆时针位置(通常为0度),右侧舵机处于最远的顺时针位置(通常为180度)。这样,所有伺服系统都从降低的位置开始,并具有抬起手臂或踢腿的范围。
3.手臂舵机的伺服支架需要修改,以便您可以安装手臂的肩部支架。基本上,您需要使用下图中描绘的喇叭并将其切割到适合印刷肩部安装件的程度,如下所示。
4.一旦手臂的伺服喇叭被切割以使它们滑入肩部支架,您将需要将这些喇叭热胶或塑料焊接到位以将它们固定到肩部支架上,如上所示。
5.现在您可以将肩部安装座连接到手臂伺服电机上,使手臂的安装孔指向BMO的背部,如图所示。此时,您可以在夹住肩部支架的同时将其拧入伺服杆,这样伺服杆就不会从该预先定位的角度旋转。
Step 3.2 - 准备按钮面板
1.首先,如下图所示切割通孔原型板,并使用 5/64 或 3/32 钻头创建如图所示的安装孔。
2.将板松散地安装到主体中的位置,然后转动主体并使用永久性记号笔在每个按钮位置的中心放置一个点,如图所示。然后取下板子。
3.请注意,开关的每个极上都有两个插脚,因此请尝试对齐开关,以便您可以跟踪按下时需要焊接哪些插脚才能使开关进行连接。然后定位每个开关,使按钮本身以您在上一步中创建的每个点为中心。
4.现在,您可以将按钮和电线焊接到板上以制作一个电路,其中每个按钮上的一根极连接到一根跳线,该跳线将到达树莓派上的CRICKIT HAT,另一根极将连接到一个公共接地,该接地将插入CRICKIT帽子信号连接器上的接地引脚。
Step 3.3 - 准备扬声器
- 焊接并测试按钮板后,您需要切割两块较小的通孔原型板,大约 5 孔 x 5 孔。
- 然后,您将焊接扬声器引线和一些 2 针 JST 或杜邦,以便引线连接到连接器,如下所示。这些组件将热粘在BMO主体的侧面,以便在组装步骤的后期可以通过主体中的扬声器孔中听到扬声器播放的声音。
Step 3.4 - 主体组装
1.首先,您可能希望在开始组装之前在侧面涂上字母,现在这样做会更容易。
2.使用烙铁或未加载的3D打印笔插入热定型滚花螺母,如下所示:
3.当您使用它时,将一些M2六角螺母推入伺服电机安装座的插槽中。您实际上只需要将伺服电机连接到顶部安装座,但如果您真的愿意,您也可以进行底部安装。
Step 3.5 - 准备封底
- 将三个 M2 热固性插件插入后盖,如下所示。
2.如下图所示,将方形M3螺母插入电池盖螺丝孔的插槽中,然后用M3螺钉固定后将其热胶到位。
3.使用热胶或 3D 打印笔将 18650 电池座、电压表和滑动开关固定到位,如图所示。
4.将 5v 稳压器安装到后盖上。将电池座的红色引线焊接到一个开关端子,然后焊接另一根带有母杜邦连接器的跳线,该连接器可以将稳压器连接到另一个端子。此外,还要使用母杜邦连接器压接电压表的末端和电池座的接地引线。
5.连接电压表和电池引线,并切换到稳压器 VIN 引脚。如果需要,请使用热胶将所有引线固定在后盖上。
Step 3.6 - 准备树莓派和CRICKIT Hat
如果您已经安装了 CRICKIT Hat的 40 针连接器的转接端子,请将其取下。如果我们希望按钮引线适合而不被后面板压扁,我们需要CRICKIT Hat以非常低的外形安装在 Raspberry Pi 的顶部。注意:如果您打算在树莓派上安装散热器,请使用非常低调的散热器以避免 CRICKIT Hat短路。
2.将长 CSI 和 DSI 电缆连接到树莓派,然后将它们滑过 CRICKIT 帽子,然后将 CRICKIT 帽子松散地连接到树莓派 40 针连接器上。不要将针脚完全推入。
3. 抓住其中一个打印的树莓派垫片和 14mm M2.5 螺钉,然后将垫片滑入左下角的位置,然后将螺钉推入以将垫片固定到位。使用 M2.5 螺母固定该螺钉。
4.对其他安装孔执行相同的操作,但不要用螺母固定它们,这些孔会在组装过程中拧入显示支架中的支架中。您可能还想将 2 针母杜邦压接到其中一个直角桶形千斤顶尾部,此时也将枪管插孔安装到 CRICKIT 电源插孔上。
5.重要!现在是握住组件并从各个侧面查看内部的好时机,以确保电路板底部的任何 CRICKIT 帽子销都不会在 Raspberry Pi 顶部的任何部件上短路!如果您确实发现任何针脚接触任何东西,尤其是散热器或音频插孔,请拆卸并尝试使用侧切器修剪这些接触点。
6.将此组件放在一边以备后用,确保螺钉和垫片保持在原位。
Step 4 - 组装步骤
Step 4.2 – 安装按钮
1.首先将主体朝下,然后将所有按钮放入相应的插槽中,如图所示。
2.如图所示,将按钮板安装在按钮顶部。
3.将主体翻转过来并检查以确保每个按钮激活其相应的开关而不会玩太多。如果您发现该按钮正在激活任何开关而没有被按下,您可能需要重新焊接该按钮,使其与电路板齐平。
4.检查按钮电缆的长度,它们应该到达显示器孔的中心,并有一些额外的游隙,但不要太多。
Step 4.2 – 安装显示器、扬声器、RasPi 组件和摄像头
- 如图所示,在右上角和右下角的显示屏支架底部安装 3 个 M2.5 六角螺母。
2.使用 5mm M2.5 支座将螺母固定到位。
3.按此处所示的方向,使用 M2 螺钉将小风扇连接到左下角的显示支架上。
4.将显示器放在机身内部的显示器孔上方,DSI 电缆接头位于左侧。(是的,这意味着显示屏将颠倒)。
5.使用 M2.5 螺钉将支架安装到显示器上,使用 M3 和 M2 螺钉将支架安装到主体上,用右上方和右下方的显示器支架固定显示器。
6.在不安装 RasPi 组件的情况下,将 DSI/CSI 电缆连接到显示器和相机模块。
7.如图所示安装摄像头模块。请注意右上方的 M2 螺钉是如何从前面插入右下角支架并用 M2 螺母固定的。
8.将扬声器安装在主体的两侧,使扬声器盖住扬声器孔,连接器板以一定角度拖曳在扬声器孔后面。
9.将 RasPi 组件安装到显示器支架上的安装点,注意将 RasPi 垫片固定到位。(注意:在执行此操作之前连接任何USB连接器可能更容易,尽管我发现之后插入它们以保持电缆不碍事对我来说更容易)。
10.使用热胶将音频放大器安装在机身内部顶壁上的 RasPi 组件上方,如图所示(接线稍后会进行)。
Step 4.3 – 腿部组装
1.将大腿部分滑入主体底部并尝试倾斜它们,使它们稍微向外弯曲或至少彼此平行。然后将它们塑料焊接到车身下方的适当位置。注意:最好稍微倾斜它们,使腿的前部靠在身体的前缘上,而它们的背部距离较远,导致 BMO 在坐着时稍微向前倾斜。
2.还要将腿焊接在身体内部,以牢固地将其固定到位。在执行此操作时,请小心确保保持字符串隧道开口畅通。
3.剪两根40厘米长的绳子,最好是编织钓鱼线,用双结或三结将每根绳子的一端绑在腿部伺服电机喇叭上。(您可能需要将其中一个喇叭孔变大以适合琴弦,我建议使用最靠近喇叭末端的第二个孔)。
4.将腿部伺服电机滑入到位并用 M2 螺钉固定。请注意,您可能需要稍微钻舵机的安装孔以使 M2 适合。
5.将琴弦穿过大腿的隧道,然后穿过小腿的隧道,直到琴弦从脚底出现。使用 M2 螺钉将小腿连接到大腿上,确保不要压伤线条。
6.将腿弯曲到90度,伺服电机的位置使喇叭靠近底部,在靠近脚底的琴弦上打结,确保腿保持弯曲,在琴弦上稍微弹奏。
7.塑料焊接脚底的孔,使孔和绳子不可见
Step 4.4 – 安装手臂
1.安装肩部支架后,将臂舵机滑入到位,然后用 M2 螺钉将其拧入到位。确保肩部的手臂安装孔指向BMO的背部。
2.将手臂插入方肩插座,然后用 M2 螺钉固定。注意:您可能需要将手臂的方形钉子锉削或打磨一点,以确保它们顺利滑入肩部,但在拧入后几乎没有游隙。
Step 4.5 – 接线
- 确保伺服引线按以下顺序连接到 CRICKIT 帽子伺服引脚(否则您必须更新代码):
a. Left arm 一个。左臂
b. right arm B. 右臂
c. left leg C. 左腿
d. right leg D. 右腿 - 将所有按钮信号线连接到 CRICKIT 信号端口,并将两个公共接地连接到接地引脚。
- 用 JST 连接器压接两对两根跳线,用于连接扬声器组件的引线,并将它们连接到音频放大器输出旋入式端子。
- 使用跳线将放大器的 VIN 和接地连接到 CRICKIT 上的 NEO-PIXEL 5v 和接地端子。此外,当您使用风扇时,将电源和接地引线从风扇连接到同一端子。
- 创建另一对跳线,将它们连接到旋入式音频插孔和放大器中的音频输入,然后将音频插孔插入 RasPi 音频输出。
- 将 USB 键盘跳线和直角 USB 电缆延长器插入 RasPi USB 插孔。
- 将 USB 麦克风插入 USB 电缆延长器,然后将其热胶粘下,以便可以通过 BMO-AI 上方向按钮下方的小端口看到麦克风孔,如下所示:
8.将 USB 电源线插入 RasPi USB 电源插孔,然后将另一端插入后盖上 5v 稳压器的 5v 输出。同时将CRICKIT电源线插入稳压器的其他5v输出。此时,所有内容都应该插入,看起来有点像这样:
注意: 确保进入 5v 稳压器的线路方向,使接地在内部,电源线在外部引脚上。
9.尝试将后盖连接到机身,同时确保较大的电缆不会妨碍腿部伺服喇叭路径,并且机身和后盖之间没有电线夹住。
10.继续用 M3 螺钉将后盖固定到机身上。
11.将两节 18650 电池插入电池座,然后将电池盖放在电池座上并用 M3 螺钉固定。
Step 5 - 软件设置
1.我强烈建议在此版本中使用 2022-09-22 版本的 Raspbian Bullseye 作为 SBC 的操作系统。Bullseye 中预装了几个必需的库,这使得这里的事情变得容易得多。如果不使用 Bullseye,则可能需要查看代码中导入的库,并采取措施确保手动安装所有库。
注意:我建议使用用户名“bmo”,因为这将减少您需要对代码进行的更改次数。
2.您需要翻转显示器,因为显示器是倒置安装的。只需打开“首选项”,选择“屏幕配置”,然后右键单击显示屏,选择“方向”,然后选择“反转”,即可轻松完成此操作。如果这不起作用,您可能需要回退到 2022-09-22 Raspbian 版本,因为某些新版本存在阻止屏幕旋转的错误。
3.在配置中,您需要启用i2c,但可能还需要启用SSH和VNC等其他功能。
4.打开终端并运行以下命令:
sudo apt-get update
sudo apt-get upgrade
5.在终端中,使用以下命令设置 CRICKIT CAT:
pip install Adafruit-blinka
i2cdetect -y 1
- 此时,您应该会看到一个矩阵,里面有数字49。如果您没有确保您的 CRICKIT Hat 正确连接并且没有短路。
在终端中,运行以下命令以安装 CRICKIT 的电路 Python 库:
pip install Adafruit-circuitpython-crickit
Step 5.2 - 设置 Azure 语音服务
1. 在 azure.microsoft.com 注册一个免费的 Azure 帐户(我们将使用免费层语音服务,因此除非你经常使用 BMO-AI,否则不应期望收取任何费用!
2.使用以下步骤在 Azure 门户中创建语音资源:https://portal.azure.com/#create/Microsoft.CognitiveServicesSpeechServices
3. 获取资源的密钥和区域:https://learn.microsoft.com/azure/cognitive-services/cognitive-services-apis-create-account#get-the-keys-for-your-resource。
4.在我共享的文件中,将有一个文件包含“Hey BMO”唤醒词的离线关键字模型表,无需额外的步骤或代码更改即可使用。但是,如果您想要不同的唤醒词,则需要使用 https://learn.microsoft.com/azure/cognitive-services/speech-service/custom-keyword-basics?pivots=programming-language-python 中的步骤创建一个唤醒词。
5 . 在终端上,键入以下命令:
sudo apt-get install build-essential libssl-dev libasound2 wget
pip3 install azure-cognitiveservices-speech
Step 5.3 设置 Azure 计算机视觉
1.在 Azure 门户中,创建计算机视觉资源。请确保使用以下区域之一:美国东部、法国中部、韩国中部、北欧、东南亚、西欧或美国西部。
2.使用 F0 免费定价层,它有一些使用限制,但对于这样的单个机器人来说应该没问题。
3.复制 API 密钥和终端节点,在开始编码部分时需要用到它们。
4.在 BMO-AI 上打开终端并运行以下命令:
pip install azure-cognitiveservices-vision-computervision
pip install pillow
Step 5.4 设置OpenAI
- 在 OpenAI 上注册一个帐户。
- 复制您的 API 密钥。
在 BMO-AI 上打开终端并运行以下命令:
pip install openai pip install tiktoken
Step 5.5 安装稳定的扩散库
1. 在 beta.dreamstudio.ai 注册一个帐户。并获取 API 密钥。
2. 复制 API 密钥。
3. 通过在控制台中键入以下内容来安装库。
pip install stability-sdk
Step 5.6 文件下载和制作目录
1. 我建议创建以下目录:/home/bmo/Photos作为存储BMO-AI拍摄的照片的地方。
2. 将主代码和关键字表文件下载到同一目录.
3. 将面部图像下载并提取到home下的图片目录中。
4. 编辑 Python 文件以添加 API 密钥、设置和其他内容,如“代码”部分所述。
Step 6 - 操作 BMO-AI
1. 通过在终端窗口中键入 python filename.py 来启动 python 文件。如果你做对了一切,你不应该得到任何错误。
2. 在说出唤醒短语“Hey BMO”(发音为“be moe”)后使用以下任何口头命令。
- 拍照 - 在您的回复中包含“照片”一词(即“请给我拍照”)将提示BMO-AI拍摄它面对的任何内容的照片并将其存储在照片目录中。然后它会询问您是否想要图片,如果您说不,它会通过电子邮件发送给您。
- 你看什么?BMO-AI 将使用 Azure 认知计算机视觉来描述它所看到的内容。
- 你在想什么?- BMO-AI将拍摄照片并使用DALL-E 2图像变体向您展示它如何想象它正在看的东西。
- 绘画 - 在您的回复中包含“绘画”一词(即“请画一张小狗与企鹅交谈的图片”)将提示稳定扩散根据您告诉 BMO-AI 绘制的内容创建图像。
- 描述 - 在提示中包含“描述”一词,(即
- 让我们聊天 - 说“让我们聊天”会启动OpenAI ChatGPT 3.5对话聊天模式,它将记住您之前的问题,以便在整个对话过程中获得上下文。说“我完成了”将结束聊天模式。
- 问任何问题。- 如果您说上述关键短语以外的任何内容,BMO-AI 将使用 OpenAI ChatGPT 3.5 完成来回答单个问题,但不会记住您要求的任何后续内容
3. 注意:AI 功能需要互联网连接。如果您打算将伴侣机器人带到家庭WiFi范围之外的城镇,则应将其设置为与手机相连,以便在奔跑中继续享受乐趣。
4. 注意:使用背面的电压表确定何时需要关闭 BMO-AI 并更换电池。一般的经验法则是在6.8v和6.6v之间关断,以防止由于过度放电而缩短电池寿命。