请搭配现代浏览器食用,口感更加~~~

- 嵌入式计算 - 基于树莓派的电子宠物系统 -

PixelPet3D - 3D电子宠物
需求分析

【用树莓派完成一个嵌入式系统】

具体来说,我组计划用树莓派外接一个 小型显示屏 作为核心,辅以一个用透明塑料片自制的 金字塔形装置 ,完成一个伪全息投影的立体的 电子宠物系统

规格说明

1、关于显示屏:
        通过Web服务,利用用户移动设备作为显示器,在浏览器中用 `WebGL` 技术渲染画面,多个设备可以同时访问Web服务,同步控制与展示。

2、关于金字塔:
        将一张透明塑料片裁剪折叠成一个金字塔形装置,尖端贴在屏幕上,金字塔的四面将分别反射屏幕上的四个预先设计好角度的图案,从而在三维空间形成一个立体影像。

3、关于电子宠物:
        宠物本体由一个三维16*16*16的像素数组来表示,通过 `threejs` 进行绘制。宠物的动作有多个三维数组作为关键帧,组成帧动画来表示。

    系统分成 核心层 展示层 驱动层 三层结构
核心层:

        处理电子宠物的基础逻辑,包括宠物的信息、当前的显示内容、用户交互控制、附加功能与小游戏等。

显示层:

        将经由驱动层转发的核心层运算结果渲染并呈现给用户,同时也负责处理用户的交互控制操作。

驱动层:

        连接核心层与显示层,将显示层用户的操作发往核心层进行处理,并将结果返还。另外还负责处理诸如多设备同步等问题。

屏幕动图
模块设计

1. C: core分支

基础逻辑部分

包含三个主要模块:


名称 对应的包 职责
配置模块 config 管理基本信息和配置,如应用名、版本号、作者、地址、宠物名称等
放映模块 screen 屏幕内容的处理,根据用户操作执行相应的逻辑运算并进行界面渲染内容的切换
服务模块 server 监听socket服务,将驱动层发来的请求转发给相应的控制器处理并返回结果
模块设计

2. JavaScript: brower分支

基于浏览器的UI视觉呈现

主要包含四个模块:



名称 主要脚本 职责
核心模块 pp3d.js 基本场景搭建、模型渲染
编辑模块 pp3d-editor.js 提供创建和编辑模型的编辑器
交互模块 websocket.js 处理用户操作,接收后端数据
资源模块 *.model.js 宠物、菜单、时钟等各种模型的配置加载
模块设计

3. Python (with Tornado): server分支

WebSocket服务器,连接树莓派(C语言)与用户浏览器(Js)

包含两个模块:



名称 主要脚本 职责
通信模块 connect_core.py 与核心层的数据交互
服务模块 main.py 显示层的Web后端
系统集成

系统呈插板式架构

主分支下执行 `run.sh` 脚本(命令: `./run.sh` )就可以自动的拉取、编译并构建三个子分支的代码,组装完毕后开始部署运行。如果需要后台长期运行,请追加`-d`参数。

系统集成

目标环境为装配Raspbian系统的树莓派

但也能在其它带有 `gcc` 和`python3` 环境的Linux系统下部署。注意,第一次部署过程请务必保证网络畅通以便拉取代码并下载依赖,最好挂上VPN,一些资源可能需要翻墙获取。

系统集成

在树莓派|Linux系统上部署成功后

将会监听5000端口启动一个Web服务器,供局域网下设备访问。手机访问`http://部署设备的IP地址:5000`,配合定制的金字塔棱镜,就可以看到3D投影的电子宠物。