打造零食推送机器人应用:从功能实现到硬件采购指南
1. 创建零食推送应用
在创建零食推送应用时,我们已经完成了部分代码编写,如下所示:
{% for item in items %}
<button formaction="{{ item['code'] }}">
{{ item['icon'] }}<br>
{{ item['code'] }}
</button>
{% end %}
</form>
</body>
</html>
现在,应用的大部分功能已就绪,可以开始运行并测试其部分功能。操作步骤如下:
1. 确保在另一个终端中运行
stream_save.py
。
2. 运行新的
pusher_web.py
应用。
3. 可以在与机器人同一网络的任何计算机或移动设备上,通过网页浏览器访问该网页应用。访问地址为
http://robopi:8888/items
,也可以将 URL 中的
robopi
替换为机器人的 IP 地址。
应用界面会显示 CSV 文件中定义的四种零食列表,每种零食都有其图标和名称。按下其中一个按钮,机器人将启动,找到所选零食并将其从柜台上推下。
2. 为网页应用添加样式
为了让应用界面更加美观,我们将创建一个样式表来为两个页面设置样式。由于两个页面有一些共同的样式元素,将所有样式放在一个样式表中会更方便。
样式表的代码如下:
body, a, button {
font-family: Verdana, Arial, sans-serif;
text-align: center;
text-decoration: none;
}
button {
font-size: 200%;
padding: 10px;
margin: 10px;
width: 140px;
}
iframe {
width:100%;
height:300px;
border:none;
}
将上述代码保存为
style.css
,并放在应用的静态内容文件夹中。
以下是对样式设置的详细解释:
| 选择器 | 属性 | 值 | 说明 |
| ---- | ---- | ---- | ---- |
|
body, a, button
|
font-family
|
Verdana, Arial, sans-serif
| 设置字体 |
|
body, a, button
|
text-align
|
center
| 文本居中显示 |
|
body, a, button
|
text-decoration
|
none
| 去除链接下划线 |
|
button
|
font-size
|
200%
| 按钮字体大小加倍 |
|
button
|
padding
|
10px
| 按钮内边距为 10px |
|
button
|
margin
|
10px
| 按钮外边距为 10px |
|
button
|
width
|
140px
| 按钮宽度统一为 140px |
|
iframe
|
width
|
100%
| iframe 宽度占满屏幕 |
|
iframe
|
height
|
300px
| iframe 高度为 300px |
|
iframe
|
border
|
none
| 去除 iframe 的边框 |
重新启动
pusher_web.py
应用,访问相同的 URL,就可以看到页面样式的变化。应用的按钮会变得更大,在小屏幕移动设备上更容易点击。
3. 为应用添加实时视频流
将实时视频流添加到网页应用相对简单,只需将视频流服务的 URL 放入
img
标签中。但问题是,每次按下按钮选择零食时,网页浏览器会提交整个页面,导致页面刷新,从而错过视频流中最精彩的部分,即机器人寻找零食的过程。
为了解决这个问题,我们将零食列表放在单独的
iframe
中,这样无论选择多少零食,视频流的播放都不会被中断。
以下是主索引页面的模板代码:
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Snack Pusher</title>
<meta name="viewport" content="width=device-width">
<link rel="icon" href="data:,">
<link rel="stylesheet" href="{{ static_url('style.css') }}">
</head>
<body>
<h1><a href='/'>Snack Pusher</a></h1>
<img src="http://{{request.host_name}}:9000/" alt="camera"><br>
<iframe src="/items"></iframe>
</body>
</html>
将上述代码保存为
index.html
,放在应用的模板文件夹中。
要测试最终版本的应用,需要确保以下几点:
1. 运行
stream_save.py
。
2. 运行
stream_web.py
,以便将实时视频流提供给应用。
3. 运行
pusher_web.py
脚本。
4. 通过访问
http://robopi:8888/
或机器人的 IP 地址来访问网页应用。
此时,我们可以在同一个应用中看到实时视频流,并进行零食选择。选择任何零食时,视频流将继续不间断播放。
4. 视频流功能拓展
将实时视频流嵌入网页应用是 HTML 语言的一个强大功能,我们可以通过多种方式扩展此功能:
-
多视频流显示
:创建同时显示多个视频流的用户界面,这对于配备多个摄像头的机器人特别有用,例如一个摄像头朝前,另一个朝后,这样可以全面了解机器人周围的环境。
-
视频录制与回放
:创建一个流存档应用,将视频流的每一帧保存为带时间戳的文件名,并在用户界面中添加时间回溯选项。为避免磁盘空间不足,可以实施数据保留策略,只保留过去 24 小时的视频流数据,自动删除旧数据;或者将旧视频数据同步到网络上的集中视频存档服务器。
5. 硬件采购指南
要构建这个零食推送机器人,需要采购一些硬件组件,以下是详细的硬件清单及购买建议:
5.1 Raspberry Pi 组件
| 组件名称 | 具体型号 | 购买链接 |
|---|---|---|
| Raspberry Pi | Raspberry Pi 4(2GB 或更多 RAM) | http://mng.bz/A8aK |
| 摄像头模块 | Raspberry Pi Camera Module 2(常规或 NoIR 版本) | http://mng.bz/ZRVO |
| 摄像头外壳 | Adafruit 摄像头外壳 | https://www.adafruit.com/product/3253 |
| 控制板 | Adafruit CRICKIT HAT for Raspberry Pi | https://www.adafruit.com/product/3957 |
| 机箱 | Pimoroni Pibow Coupe 4 | https://shop.pimoroni.com/products/pibow-coupe-4 |
购买建议:
- Raspberry Pi 基金会在每个产品页面列出了官方零售商,可以在其网站上点击购买产品时找到。在线工具会列出特定产品和国家的官方零售商。
- Adafruit 产品可以在线购买(https://www.adafruit.com/),也可以通过其官方经销商购买(https://www.adafruit.com/distributors)。
- Pimoroni 产品可以在线购买(https://shop.pimoroni.com/),也可以通过经销商购买(http://mng.bz/RmN0)。
Raspberry Pi 需要使用 microSD 卡或 USB 闪存驱动器作为存储,以下是不同存储选项的注意事项:
- 首次使用 Raspberry Pi 时,购买套件会提供很多对新手有用的额外物品,且性价比高。套件通常包含存储用的存储卡、电源和 HDMI 视频输出线。例如,Raspberry Pi 4 桌面套件(http://mng.bz/27gd)和 Pimoroni Raspberry Pi 4 必备套件(http://mng.bz/1JaV)。
- USB 闪存驱动器在 Raspberry Pi 上的速度比 microSD 卡快很多,这会使软件的安装和升级速度更快。可以参考文章(http://mng.bz/PRN9)了解更多关于 Raspberry Pi 存储性能的磁盘基准测试和快速 USB 闪存驱动器的信息。
- USB 闪存驱动器在 Raspberry Pi 上更换更方便,尤其是当 Raspberry Pi 完全组装到机器人底盘中时,USB 端口比 microSD 插槽更容易访问。你可以轻松地将系统备份到另一台计算机,也可以准备多个不同软件设置的 USB 闪存驱动器进行切换。
5.2 电机、底盘套件和操纵杆控制器
-
电机与底盘套件
:
- Adafruit 三层机器人底盘套件(https://www.adafruit.com/product/3244),包含两个直流电机和轮子。
- Adafruit 迷你云台套件(https://www.adafruit.com/product/1967),预装两个微型伺服电机,可实现平移和倾斜运动。
-
操纵杆控制器
:可以使用原装索尼 PlayStation 4 或 5 控制器,也可以使用 Xbox 原装或兼容控制器。以下两款 Xbox 兼容控制器已经过测试,可在 Linux 和 Raspberry Pi 上使用:
- W&O 无线控制器(兼容 Xbox 360)(https://a.co/d/7FA95aj)
- YAEYE 控制器(适用于 Xbox 360)(https://a.co/d/8lsabwI)
需要注意的是,无线蓝牙连接仅适用于 PlayStation 控制器,但可以使用 Wi-Fi 网络连接的方式,通过任何控制器远程控制机器人。
5.3 电源和电缆
- 电源 :推荐使用单个 USB 移动电源为 Raspberry Pi 和 CRICKIT HAT 供电。Anker PowerCore Select 10000(https://walmart.com/ip/Anker/211593977),具有双 12W 输出端口和 10000 mAh 电量,经过测试效果良好。
-
电缆
:
- USB 转桶形插孔电缆(https://www.adafruit.com/product/2697),用于将 CRICKIT HAT 连接到移动电源。
- 优质 M/M 扩展跳线(https://www.adafruit.com/product/1956),因为机器人底盘套件中的电缆在组装完所有部件后可能不够长,无法连接到 CRICKIT HAT。
5.4 可选配件
以下配件可提升机器人构建体验,但并非必需:
-
Velcro 粘性方块
(https://a.co/d/8Sz6OMi):方便将 Raspberry Pi 和移动电源从底盘上轻松拆卸和安装。
-
尼龙螺丝和支柱套件
(https://www.adafruit.com/product/3658):在处理 Raspberry Pi、CRICKIT HAT 和机器人底盘时,提供不同长度的螺丝和支柱,用于牢固固定部件。
-
七件套磁性 USB 电缆
(https://a.co/d/cYc3waP):可轻松连接和断开移动电源与 Raspberry Pi,以及移动电源与 USB 充电器。
-
Monoprice SlimRun 以太网电缆
(https://a.co/d/0GBLsyQ):比标准网络电缆更轻更细,使机器人在使用有线网络连接时更具机动性。
综上所述,通过以上步骤,我们不仅完成了零食推送机器人应用的开发,还了解了所需硬件的采购信息。这个项目结合了多种技术,具有很强的扩展性,可以根据自己的想象进一步改进机器人的功能,如添加自动库存检查功能或创建一个类似仓库机器人的拾取和放置机器人。
打造零食推送机器人应用:从功能实现到硬件采购指南
5. 硬件采购指南(续)
为了更清晰地展示硬件采购的整体流程,我们可以用 mermaid 流程图来表示:
graph LR
A[确定项目需求] --> B[选择 Raspberry Pi 组件]
B --> C[选择电机、底盘套件和操纵杆控制器]
C --> D[选择电源和电缆]
D --> E{是否需要可选配件}
E -- 是 --> F[选择可选配件]
E -- 否 --> G[完成采购]
F --> G
在采购过程中,我们还可以根据不同的预算和需求进行灵活调整。例如,如果预算有限,可以选择一些性价比更高的替代产品;如果对性能有更高的要求,可以选择配置更高的组件。
6. 项目总结与展望
这个零食推送机器人项目结合了多种不同的技术,实现了一个可以通过网页应用控制的机器人,它能够与环境进行交互,并且具有很强的扩展性。以下是对项目的总结:
-
控制方式
:通过基于网页的 Python 应用来控制零食推送机器人。
-
关键部件
:使用伺服电机来控制伺服臂的上下移动,从而推动零食。
-
图标显示
:利用 emoji Python 包将表情符号短代码转换为 Unicode 字符,作为应用中零食的图标。
-
数据来源
:零食列表从 CSV 文件中读取,该文件包含每种零食的 QR 代码和图标。
-
样式设计
:使用单一的样式表来为应用的两个模板页面设置样式,因为两个页面有共同的样式元素,这样便于管理。
-
视频流处理
:使用 iframe 来实现实时视频流的播放和零食选择的提交,确保视频播放不会被中断。
未来,我们可以从以下几个方面进一步扩展和优化这个项目:
-
功能拓展
:
-
自动库存检查
:添加一个功能,让机器人自动在周围环境中移动,对可用零食进行库存检查。
-
拾取和放置功能
:将机器人改造成一个拾取和放置机器人,类似于仓库机器人,能够抓取物品并放置到其他位置。
-
用户体验优化
:
-
界面设计
:进一步优化网页应用的界面,使其更加美观和易用。
-
交互功能
:增加更多的交互功能,例如用户可以设置机器人的运动速度、选择不同的搜索模式等。
-
技术升级
:
-
视频处理
:采用更先进的视频处理技术,提高视频流的质量和稳定性。
-
机器人控制算法
:优化机器人的控制算法,使其运动更加精准和高效。
以下是一个简单的表格,总结了项目的主要特点和未来拓展方向:
| 项目方面 | 现有特点 | 未来拓展方向 |
| ---- | ---- | ---- |
| 控制方式 | 基于网页的 Python 应用 | 无 |
| 关键部件 | 伺服电机控制伺服臂 | 无 |
| 图标显示 | emoji 包转换图标 | 无 |
| 数据来源 | CSV 文件读取零食列表 | 无 |
| 样式设计 | 单一样式表 | 无 |
| 视频流处理 | iframe 保证视频不间断 | 采用更先进视频处理技术 |
| 功能拓展 | 零食推送 | 自动库存检查、拾取和放置功能 |
| 用户体验 | 基本的零食选择界面 | 优化界面设计、增加交互功能 |
| 技术升级 | 无 | 优化机器人控制算法 |
总的来说,这个零食推送机器人项目为我们提供了一个很好的实践平台,让我们能够将多种技术融合在一起,并且可以根据自己的想象和需求不断改进和完善。无论是对于初学者还是有一定经验的开发者,都具有很高的学习和实践价值。通过不断地探索和创新,我们可以让机器人在更多的领域发挥作用,为我们的生活和工作带来更多的便利。
零食推送机器人开发全指南
超级会员免费看
18

被折叠的 条评论
为什么被折叠?



