MAKER:David Packman/译:趣无尽(转载请注明出处)
这是国外 Maker David Packman 制作的基于树莓派机器人 MBO,该机器人的外观设计灵感来自动漫 Adventure Time 中的机器人 MBO。它具有强大的交互功能,可实现脱机唤醒词检测、调用 ChatGPT 3.5 进行聊天、机器视觉对图像进行分析和说明等众多功能。
组件清单
硬件
Raspberry Pi 3 Model B × 1
Raspberry Pi Camera Model 3 × 1
单声道 2.5 瓦音频放大器 × 1
8Ω1 瓦扬声器 × 1
Mini USB 麦克风 × 1
6mm 触摸模块 × 1
18650 电池 × 1
拨动开关 × 1
5V 风扇 × 1
9 克舵机 × 1
5V 稳压模块 × 1
USB 无线键盘 × 1
3D 打印机× 1
3D 打印笔× 1
热熔胶枪× 1
电烙铁× 1
电动螺丝刀× 1
丙烯颜料× 1
软件
树莓派官方系统
Microsoft Azure Cognitive 语音服务 API
Microsoft Azure Computer Vision
Open AI ChatGPT 3.5 Turbo
Open AI DALL-E2
项目介绍
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 计算机视觉服务进行图像分析和说明。
树莓派相机模块 v3,具有图像捕获和共享功能。
新的绘画模式使用稳定扩散根据您的口语描述绘制图片。
来自 ChatGPT 3.5 描述模式的新 DALL-E 映像,它将根据 ChatGPT 生成的描述创建映像。
3D 打印环节
打印部件文件可在
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、对于上腿和小腿,你需要在没有支撑的情况下打印,或者使用支撑执行器,以便你的打印机不会在穿过腿部的隧道内打印支撑。否则,你将无法将绳子推过腿部以进行踢腿动作。
组装准备舵机
1、在测试你的伺服电机以确保它们正常工作后,你需要根据它们的铰接点标记每个电机。例如,使用永久性标记将一个标记为 LA(左臂),将另一个标记为 LL(左腿)。(左和右是从 BMO 的角度)。
2、标记伺服电机后,应预先定位伺服电机,使左侧舵机处于最远的逆时针位置(通常为 0 度),右侧舵机处于最远的顺时针位置(通常为 180 度)。这样,所有伺服系统都从降低的位置开始,并具有抬起手臂或踢腿的范围。
3、手臂舵机的伺服喇叭需要修改,以便你可以安装手臂的肩部支架。基本上,你需要使用下图中描绘的喇叭并将其切割到适合印刷肩部安装件的程度,如下图所示。
4、一旦手臂的伺服喇叭被切割以使它们滑入肩部支架,你将需要将这些喇叭热胶或塑料焊接到位以将它们固定到肩部支架上,如上图所示。
5、现在你可以将肩部安装座连接到手臂伺服器上,使手臂的安装孔指向 BMO 的背部,如图所示。此时,你可以在夹住肩部支架的同时将其拧入伺服杆,这样伺服杆就不会从该预先定位的角度旋转。
准备按钮面板
1、首先,如下图所示切割通孔原型板,并使用 5/64 或 3/32 钻头创建,如图所示安装孔。
2、将板松散地安装到主体中的位置,然后转动主体并使用永久性记号笔在每个按钮位置的中心放置一个点,如图所示。然后取下板子。
3、请注意,开关的每个极上都有两个插脚,因此请尝试对齐开关,以便你可以跟踪按下时需要焊接哪些插脚才能使开关进行连接。然后定位每个开关,使按钮本身以你在上一步中创建的每个点为中心。
4、现在,你可以将按钮和电线焊接到板上以制作一个电路,其中每个按钮上的一根极连接到一根跳线,该跳线将到达树莓派上的 CRICKIT HAT,另一根极将连接到一个公共接地,该接地将插入 CRICKIT 帽子信号连接器上的接地引脚。
准备 Speaker
1、 焊接并测试按钮板后,你需要切割两块较小的通孔原型板,大约 5 孔 x 5 孔。
2、 然后,将焊接扬声器引线和一些 2 针 JST 或杜邦,以便引线连接到连接器,如下图所示。这些组件将热粘在 BMO主体的侧面,以便在组装步骤的后期可以通过主体中的扬声器孔听到扬声器的声音。
主体安装
1、首先,你可能希望在开始组装之前在侧面涂上字母,现在这样做会更容易。
2、使用烙铁或未加载的 3D 打印笔插入热定型滚花螺母,如图所示:
3、当你使用它时,将一些 M2 六角螺母推入伺服电机安装座的插槽中。实际上只需要将伺服电机连接到顶部安装座,但如果你真的愿意,你也可以进行底部安装。
底板安装
1、 将三个 M2 热固性插件插入后盖,如图所示。
2、如下图所示,将方形 M3 螺母插入电池盖螺丝孔的插槽中,然后用 M3 螺钉固定后将其热胶到位。
3、使用热胶或 3D 打印笔将 18650 电池座、电压表和滑动开关固定到位,如图所示。
4、将 5v 稳压器安装到后盖上。将电池座的红色引线焊接到一个开关端子,然后焊接另一根带有母杜邦连接器的跳线,该连接器可以将稳压器连接到另一个端子。此外,还要使用母杜邦连接器压接电压表的末端和电池座的接地引线。
5、连接电压表和电池引线,并切换到稳压器 VIN 引脚。如果需要,请使用热胶将所有引线固定在后盖上。
准备树莓派和 CRICKIT Hat
1、如果你已经安装了 CRICKIT Hat 的 40 针连接器的转接端子,请将其取下。如果我们希望按钮引线适合而不被后面板压扁,我们需要帽子以非常低的外形安装在树莓派的顶部。注意:如果你打算在树莓派上安装散热器,请使用非常低调的散热器以避免 CRICKIT 帽子短路。
2、将长 CSI 和 DSI 电缆连接到树莓派,然后将它们滑过 CRICKIT 帽子,然后将 CRICKIT 帽子松散地连接到树莓派 40 针连接器上。不要将针脚完全推入。
3、抓住其中一个打印的树莓派垫片和 14mm M2.5 螺钉,然后将垫片滑入左下角的位置,然后将螺钉推入以将垫片固定到位。使用 M2.5 螺母固定该螺钉。
4、对其他安装孔执行相同的操作,但不要用螺母固定它们,这些孔会在组装过程中拧入显示支架中的支架中。你可能还想将 2 针母杜邦压接到其中一个直角桶形千斤顶尾部,此时也将枪管插孔安装到 CRICKIT 电源插孔上。
5、重要!现在是握住组件并从各个侧面查看内部的好时机,以确保电路板底部的任何 CRICKIT 帽子销都不会在树莓派顶部的任何部件上短路!如果你确实发现任何针脚接触任何东西,尤其是散热器或音频插孔,请拆卸并尝试使用侧切器修剪这些接触点。
6、将此组件放在一边以备后用,确保螺钉和垫片保持在原位。
组装步骤
1、首先将主体朝下,然后将所有按钮放入相应的插槽中,如图所示。
2、如图所示,将按钮板安装在按钮顶部。
3、将主体翻转过来并检查以确保每个按钮激活其相应的开关而不会玩太多。如果你发现该按钮正在激活任何开关而没有被按下,你可能需要重新焊接该按钮,使其与电路板齐平。
4、检查按钮电缆的长度,它们应该到达显示器孔的中心,并有一些额外的游隙,但不要太多。
安装显示器、扬声器、RasPi 组件和摄像头
1、 如图所示,在右上角和右下角的显示屏支架底部安装 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 组件上方,如图所示(接线稍后会进行)。
组装腿部
1、将大腿部分滑入主体底部并尝试倾斜它们,使它们稍微向外弯曲或至少彼此平行。然后将它们塑料焊接到车身下方的适当位置。注意:最好稍微倾斜它们,使腿的前部靠在身体的前缘上,而它们的背部距离较远,导致 BMO 在坐着时稍微向前倾斜。
2、还要将腿焊接在身体内部,以牢固地将其固定到位。在执行此操作时,请小心确保保持字符串隧道开口畅通。
3、剪两根 40 厘米长的绳子,最好是编织钓鱼线,用双结或三结将每根绳子的一端绑在腿部伺服电机喇叭上。(你可能需要将其中一个喇叭孔变大以适合琴弦,我建议使用最靠近喇叭末端的第二个孔)。
4、将腿部伺服电机滑入到位并用 M2 螺钉固定。请注意,你可能需要稍微钻舵机的安装孔以使 M2 适合。
5、将琴弦穿过大腿的隧道,然后穿过小腿的隧道,直到琴弦从脚底出现。使用 M2 螺钉将小腿连接到大腿上,确保不要压伤线条。
6、将腿弯曲到 90 度,伺服电机的位置使喇叭靠近底部,在靠近脚底的琴弦上打结,确保腿保持弯曲,在琴弦上稍微弹奏。
7、塑料焊接脚底的孔,使孔和绳子不可见。
安装手臂
1、安装肩部支架后,将臂舵机滑入到位,然后用 M2 螺钉将其拧入到位。确保肩部的手臂安装孔指向 BMO 的背部。
2、将手臂插入方肩插座,然后用 M2 螺钉固定。注意:你可能需要将手臂的方形钉子锉削或打磨一点,以确保它们顺利滑入肩部,但在拧入后几乎没有缝隙。
接线
1、确保伺服引线按以下顺序连接到 CRICKIT 帽子伺服引脚(否则您必须更新代码):
a端口——左臂
b端口——右臂
c端口——左腿
d端口——右腿
2、将所有按钮信号线连接到 CRICKIT 信号端口,并将两个公共接地连接到接地引脚。
3、用 JST 连接器连接两对跳线,用于连接扬声器组件的引线,并将它们连接到音频放大器输出旋入式端子。
4、使用跳线将放大器的 VIN 和接地连接到 CRICKIT 上的 NEO-PIXEL 5v 和接地端子。此外,当你使用风扇时,将电源和接地引线从风扇连接到同一端子。
5、创建另一对跳线,将它们连接到旋入式音频插孔和放大器中的音频输入,然后将音频插孔插入 RasPi 音频输出。
6、将 USB 键盘跳线和直角 USB 电缆延长器插入 RasPi USB 插孔。
7、将 USB 麦克风插入 USB 电缆延长器,然后将其热胶粘下,以便可以通过 BMO-AI 上方向按钮下方的小端口看到麦克风孔,如下所示:
8、将 USB 电源线插入 RasPi USB 电源插孔,然后将另一端插入后盖上 5v 稳压器的 5v 输出。同时将 CRICKIT 电源线插入稳压器的其他 5v 输出。此时,所有内容都应该插入,看起来有点像这样:
注意:确保进入 5v 稳压器的线路方向,使接地在内部,电源线在外部引脚上。
9、尝试将后盖连接到机身,同时确保较大的电缆不会妨碍腿部伺服喇叭路径,并且机身和后盖之间没有电线夹住。
10、继续用 M3 螺钉将后盖固定到机身上。
11、将两节 18650 电池插入电池座,然后将电池盖放在电池座上并用 M3 螺钉固定。
软件设置
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
6、此时,你应该会看到一个矩阵,里面有数字 49。如果你不能确保 CRICKIT 帽子正确连接并且没有短路。
7、在终端中,运行以下命令以安装 CRICKIT 的电路 Python 库:
pip install Adafruit-circuitpython-crickit
设置 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
设置 Azure 计算机视觉
1、在 Azure 门户中,创建计算机视觉资源。请确保使用以下区域之一:美国东部、法国中部、韩国中部、北欧、东南亚、西欧或美国西部。
2、使用 F0 免费定价层,它有一些使用限制,但对于这样的单个机器人来说应该没问题。
3、复制 API 密钥和终端节点,在开始编码部分时需要用到它们。
4、在 BMO-AI 上打开终端并运行以下命令:
pip install azure-cognitiveservices-vision-computervision pip install pillow
设置 Open AI
1、在 OpenAI 上注册一个帐户。
2、复制你的 API 密钥。
3、在 BMO-AI 上打开终端并运行以下命令:
pip install openai pip install tiktoken
安装稳定的扩散库
1、在 beta.dreamstudio.ai 注册一个帐户,并获取 API 密钥。
2、复制 API 密钥。
3、通过在控制台中键入以下内容来安装库。
pip install stability-sdk
文件下载和制作目录
1、我建议创建以下目录:/home/bmo/Photos 作为存储 BMO-AI 拍摄的照片的地方。
2、将主代码和关键字表文件下载到同一目录。
3、将面部图像下载并提取到home下的图片目录中。
4、编辑 Python 文件以添加 API 密钥、设置和其他内容,如“代码”部分所述。
操作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 之间关断,以防止由于过度放电而缩短电池寿命。
via