Flutter/Android 重构与三页界面位于 flutter_app。旧 Qt 工程仍保留;Flutter 版的真实设备与锁屏运行尚待验收。
SatoriManager 是一个基于 Qt 和 QML 的小型机器人控制项目,用户可以通过移动端远程操控机器人。项目支持模式切换(如自动模式、睡眠模式、人脸识别等)以及机器人头部的旋转和眨眼控制,包含移动端控制客户端和机器人服务器端的通信功能。
- C++ & Qt:实现移动客户端及通信功能
- QML:用于 UI 设计,提供用户交互
- UDP:实现客户端与服务器之间的实时通信
- Qt 6.8 或更高版本
- C++17 或更高版本
- 支持 UDP 的网络环境
SatoriManager 前端部分基于 Qt Quick 和 QML 实现,提供用户友好的界面来控制机器人眼部运动、模式切换、手动操作等功能。
-
主控制页面:
- 模式切换:提供多个按钮用于切换不同工作模式,如“自动模式”、“睡眠模式”、“人脸识别模式”和“手动模式”,方便用户选择适合的操作模式。
- 连接/断开连接:通过按钮与机器人建立或断开通信。
- 摇杆控件与呼吸效果及电池进度指示器:
- 摇杆控制:内圈为可拖动的摇杆,用户可以在外圈内自由移动。
- 电池进度指示器:外圈显示环形进度条,反映电池电量(范围:0到1)。
- 播放预设动画:
- 用户可以选择并播放预设的机器人动作序列。每个动作包含多个关键帧,关键帧中包括眼球和眼皮的 PWM 控制值及动作持续时间。
- 支持通过读取本地 JSON 文件中的数据来选择并播放预设动画。
- 用户选择动作名称(例如
lookUp或lookDown)即可触发对应的动画播放。 - 系统按顺序执行关键帧中的 PWM 值和持续时间,实现平滑的眼部运动。
-
眼部控制页面:
- 拨盘控件:用户可以通过拨盘实时调节眼皮的开合角度和瞳孔大小,精准控制眼部状态。
- 描述文本:界面上清晰标示每个拨盘的功能,例如“眼皮角度”和“瞳孔大小”,帮助用户了解调节项。
git clone https://github.com/3rdEyez/SatoriManager.git
cd SatoriManager- 使用 Qt Creator 或命令行进入项目根目录。
- 配置 Qt Kit,选择适合的目标平台(如 Android 或 Desktop)。
- 编译并运行项目。
确保服务器和客户端在同一局域网内,以便客户端能够自动发现服务器。
UI 提供模式切换按钮,用户可选择不同的工作模式。切换后,当前模式按钮高亮显示:
- 自动模式:机器人自动导航。
- 手动模式:用户手动控制机器人。
- 睡眠模式:机器人进入低功耗状态。
- 人脸识别模式:机器人开启人脸识别功能(当前未实装)。
UI 提供了控制机器人头部的操作按钮,用户可以实现机器人向上、向下、向左、向右旋转及眨眼操作。
初次连接时,客户端发送广播发现消息,寻找局域网内的机器人服务器。服务器响应后,客户端自动连接并发送心跳消息。如果网络中断,客户端会自动重连。
以下是包含头文件说明的更新版报文格式表格,帮助开发者清晰了解这些报文内容已集中定义在 ProtocolMessages.h 中:
所有报文类型和内容均在 ProtocolMessages.h 头文件中定义,以便集中管理和维护。每个报文类型对应的常量定义在 ProtocolMessages 命名空间中,方便在代码中引用。
| 报文类型 | 报文内容 | 说明 |
|---|---|---|
| 发现请求 | SatoriEye_DISCOVERY_REQUEST |
客户端发送的请求,寻找可用的机器人服务器。 |
| 发现响应 | SatoriEye_DISCOVERY_RESPONSE,<电量信息> |
服务器的响应,包含电量信息(如 85 表示 85%)。 |
| 心跳请求 | SatoriEye_HEARTBEAT_REQUEST |
客户端发送的心跳请求,确保连接的有效性。 |
| 心跳响应 | SatoriEye_HEARTBEAT_RESPONSE,<电量信息(可选)> |
服务器的响应,可能包含电量信息,表示连接正常。 |
| 设置模式命令 | SET_MODE:<模式> |
客户端发送的请求,用于设置机器人工作模式(如 Auto)。 但是在自动和手动之间切换不需要觉之瞳回复 |
| 设置模式成功响应 | SET_MODE_SUCCESS:<模式> |
服务器确认模式设置成功(如 SET_MODE_SUCCESS:Auto)。 |
| 断开连接 | SatoriEye_DISCONNECT |
客户端发送的请求,通知服务器断开连接。 |
| PWM 控制消息 | CH1:<值>CH2:<值>CH3:<值> |
发送通道 PWM 值,用于控制眼部运动(范围 500-2500 微秒)。 |
| PWM 平滑控制消息 | SMOOTH:CH1:<值>CH2:<值>CH3:<值> |
发送通道 PWM 值,用于控制眼部运动(范围 500-2500 微秒)。 |
假设要设置通道 PWM 值如下:
- CH1: 600(水平眼球运动)
- CH2: 2200(垂直眼球运动)
- CH3: 1600(上眼皮运动)
发送格式为:
CH1:600CH2:2200CH3:1600
预设动画数据结构位于 JSON 文件 PresetActions.json 中,每个预设动作包含多个关键帧,格式如下:
- -1 为不做修改
- 每个PWM值用比例表示(0 - 1)。
{
"wink": [
{ "CH1": -1, "CH2": -1, "CH3": 0.0, "duration": 200 },
{ "CH1": -1, "CH2": -1, "CH3": 1, "duration": 200 }
],
"wink2": [
{ "CH1": -1, "CH2": -1, "CH3": 0.0, "duration": 200 },
{ "CH1": -1, "CH2": -1, "CH3": 1, "duration": 200 },
{ "CH1": -1, "CH2": -1, "CH3": 0.0, "duration": 200 },
{ "CH1": -1, "CH2": -1, "CH3": 1, "duration": 200 }
]
}
- 确保客户端和服务器在同一网络内。
- 检查 IP 和端口配置。
- 确认防火墙未阻止 UDP 广播。
欢迎贡献代码和提出改进建议。请提交 Issue 或 Pull Request。
项目采用 GPL 许可证。详细信息请查看 LICENSE 文件。
- 项目维护人: 阿卡林真的是太可爱了
- GitHub: https://github.com/AkazaAkali
- Bilibili个人空间: space.bilibili.com/381473156