GUI简介 - OpenExo
本文所有图片来自官方教程
简介
-
OpenExo GUI 是一个跨平台、开源的外骨骼系统控制和可视化应用程序。
-
基于 OpenExo API,可用于设备搜索、连接、参数调节与实验数据实时显示。
-
完全开放源码(MIT License),支持自由修改与二次开发。
-
仅需 Python 3.12 环境,所有依赖库可通过 pip 一键安装。
最低系统要求:
-
操作系统:
-
Windows 7 或更高版本
-
macOS 10.9 或更高版本
-
-
Python 版本:
- Python 3.2 及以上(建议使用 3.12)
-
硬件配置:
-
处理器:双核(如 Intel Core i3 或同等级 AMD)
-
内存:最少 2 GB,推荐 4 GB
-
存储:至少 100 MB 可用空间(建议 1 GB 以便于大数据集存储)
-
显示:最低分辨率 768×1024
-
安装指南(Installation Guide)
蓝牙连接说明:
OpenExo GUI 通过 BLE(蓝牙低功耗,Bluetooth Low Energy)与外骨骼设备通信。
所有 BLE 操作由 Bleak 库实现,支持 Windows、macOS 和 Linux。
所需 Python 库(依赖包):
-
matplotlib —— 绘图与数据可视化
-
async_tkinter_loop —— 异步 tkinter 图形界面支持
-
pygame —— 声音和多媒体支持
-
numpy —— 科学计算
-
bleak —— BLE 蓝牙通信
-
pandas —— 数据处理
-
scikit-learn —— 机器学习支持
-
micromlgen —— 机器学习模型导出
-
pillow —— 图像处理
一键安装方法:
-
进入 GUI 文件夹
打开命令行(Windows 可用“命令提示符”,macOS/Linux 可用终端),进入项目的 Python_GUI 文件夹。 -
运行安装脚本
python install_dependencies.py
该脚本会自动通过 pip 安装所有所需库。
视频安装教程:
如果是首次操作或遇到依赖安装问题,可以先观看官方提供的视频。
总结
只需运行一次 install_dependencies.py,环境即配置完成,后续可直接运行 GUI 程序。
如有 pip 或 Python 环境问题,也可以手动单独安装各库,例如:
pip install matplotlib async_tkinter_loop pygame numpy bleak pandas scikit-learn micromlgen pillow
工作流
1. 启动应用
-
确保蓝牙已开启。
-
打开命令行,切换到项目 Python_GUI 目录。
-
运行:
python3 GUI.py
- GUI 界面将自动打开,出现多个交互页面(frames)。
2. 扫描并连接设备
-
在主界面点击 Scan 按钮,程序会自动搜索周围可用的外骨骼设备。
-
如果蓝牙未开启,界面会弹出错误提示。
-
扫描到设备后,选择设备进行连接。
3. 界面导航说明
-
Scan Window(扫描窗口): 用于查找和连接外骨骼设备。
-
Active Trial(试验监控): 实时监测与控制试验进程。
-
Biofeedback(生物反馈): 获取、展示传感器实时反馈,用于训练或评估。
-
Machine Learning(机器学习): 训练/测试个性化控制模型(可选功能)。
-
Update Torque(扭矩参数设置): 修改外骨骼扭矩与控制参数。
4. 操作小结
-
一切正常后,你即可用 GUI 实时操控并监测 OpenExo 设备。
-
各页面切换与主要按钮均有提示或文档说明。
5. 视频演示
建议参考项目主页或 YouTube 的 Example Video,可以直观了解每个功能的实际操作流程。
添加一个按钮(views/ 文件夹里的 Frame 页面)
class YourFrame(tk.Frame):def __init__(self, parent):super().__init__(parent)self.create_widgets()def create_widgets(self):my_button = tk.Button(self,text="My New Button", # 按钮上显示的文字command=self.my_button_action # 按下后的回调函数)my_button.pack(pady=10) # pady=10 是上下间隔def my_button_action(self):print("My New Button was clicked!") # 这里定义按钮功能
说明:
-
在 create_widgets() 里创建并添加按钮;
-
在 my_button_action() 里定义按钮功能(比如 print、弹窗、跳转页面等)。
修改图表绘制/显示的数据数量、坐标轴等
以 BasePlot.update_plot 为例:
def update_plot(self, xValues, yValues, secondY, title):max_points = -20 # 改成你想显示的最后N个点,比如 -50xValues = xValues[max_points:]yValues = yValues[max_points:]secondY = secondY[max_points:]# ...数据截断完再画图self.ax.set_title(title)self.ax.set_xlabel("Time")self.ax.set_ylabel("Value")
说明:
-
max_points 为负数时,显示最近 N 个点;
-
set_title、set_xlabel、set_ylabel 可自定义图表标题和坐标轴说明。
每个绘图类都有 animate(),该方法负责定时刷新数据和重绘,想要改变数据源或表现,直接在 animate() 里改即可。
添加一个新 Frame 页面
1. 创建 Frame 类
- 在 views/ 文件夹下新建文件,比如 newFeature.py:
import tkinter as tkclass NewFeature(tk.Frame):def __init__(self, parent, controller):super().__init__(parent)self.controller = controllerlabel = tk.Label(self, text="New Feature Frame", font=("Arial", 24))label.pack(pady=20)button = tk.Button(self,text="Go to Scan Window",command=lambda: controller.show_frame("ScanWindow") # 跳转到ScanWindow)button.pack(pady=10)
2. 注册新 Frame 到主程序
- 在主 app 文件(一般是 GUI.py 或 main.py),导入新页面,并添加到 Frame 列表:
from views.newFeature import NewFeaturefor F in (ScanWindow, ActiveTrial, UpdateTorque, BioFeedback, MachineLearning, NewFeature):# 按照现有结构注册各页面
3. 添加跳转新页面的按钮
例如在任意已有页面加:
button = tk.Button(self,text="Go to New Feature",command=lambda: controller.show_frame("NewFeature") # 注意和类名一致
)
button.pack(pady=10)
备注
-
controller.show_frame(“NewFeature”) 中的字符串需和 Frame 类名一致。
-
页面之间跳转用这种方式很方便。
-
新页面可添加自己的组件、布局和功能逻辑。
Biofeedback Frame 简明功能说明
用途
- 在实验过程中为用户实时显示和声音反馈,辅助其达到预设运动目标(如压力/功率)。
信号源
- FSRs(力敏电阻),用于检测足底压力,或用于估算踝功率。
数据访问方式
- 获取实时数据的路径(假设你在 Biofeedback 页面代码内):
chart_data = self.master.controller.deviceManager._realTimeProcessor._chart_data
# 分别获取左右脚FSR信号
left_fsr_data = chart_data.leftFsr
right_fsr_data = chart_data.rightFsr
切换显示左右脚
- 只需切换 chart_data.leftFsr 或 chart_data.rightFsr。
修改信号源
- 找到 chart.py 里的 FSRPlot 类,把其数据源变量设置为上述 _chart_data 路径。
主要功能与控件
-
图形显示
-
实时显示压力(或踝功率)变化曲线
-
目标线(用户设定目标时显示)
-
-
主要按钮
-
Back:返回 Active Trial 页面
-
Left/Right Leg Toggle:切换左右脚显示
-
Set Target Value:输入并显示训练目标
-
Reset Target Value:重置(清除)目标
-
Mark Trial:打标签,便于后续数据分析
-
Recalibrate FSRs:重新校准 FSR 传感器
-
快速小结
-
核心逻辑就是不断从 chart_data.leftFsr/rightFsr 读取最新数据刷新图表,其它控件处理目标/标签/校准等。
-
页面框架和按钮基本都在 views/BioFeedback.py 内,图形渲染靠 chart.py。