三维手部角度绘制——右手食指运动学
一个矢量化的生物力学管道,从运动捕捉打字数据中提取右手食指的3D关节角度和角速度,然后可视化不同的击键是否在关节角度空间中形成可分离的簇。
为什么存在
每个按键都是由一个手指轨迹执行的,原则上,这个轨迹应该留下一个不同的生物力学特征——不同的MCP外展 y vs。 n,不同的PIP/DIP屈曲 u vs。 m,不同的角速度分布取决于钥匙所在的行。该管道要求 单峰问题:
*在没有注视和语言模型的情况下,右手食指的运动学能否将击键分为不同的簇?*
回答这个问题是更丰富的多模式文本输入系统的先决条件。如果单手运动学聚类清晰,注视和语言先验是强化;如果他们不这样做,这些模式必须完成大部分工作。
此存储库是对 improved-gaze-typing-prediction,它在手部运动学的基础上添加了凝视和语言先验,用于端到端的角色预测。
管道
flowchart TD
CSV["Qualisys/QTM CSVs
3D markers · keypress flag · timestamps"] --> Markers["Marker extraction
4 fingers × 4 joints + 2 palm refs"]
Markers --> Angles["Joint-angle computation
signed MCP abduction · MCP/PIP/DIP flexion"]
Angles --> Vel["Angular velocity
unwrapped, NaN-safe gradient w.r.t. timestamps"]
Vel --> Events["Keypress sampling
frames where KeyPressFlag = 1"]
Events --> Plots["3D cluster visualization
colored by pressed character"]几何方法
运动学计算是实质性的部分——它不仅仅是绘图:
MCP绑架(签名)。 手掌法线由指数MCP、小MCP和手掌中点形成的三角形计算得出。每个手指的MCP到尖端矢量被投影到手掌平面上。该投影与指数之间的角度——小MCP“条”是幅度;这个标志来自交叉产品与手掌法线的一致性。这产生了一个 *签署* 区分左栏和右栏偏移的外展——分离按键所必需的,如 y 对比 u.
MCP屈曲。 计算为 π/2 − angle(proximal_phalanx, palm_normal)π/2偏移将“与手掌法线的角度”转换为直观的屈曲(中性时为0°,随着手指向手掌卷曲而增加)。
PIP和DIP屈曲。 连续指骨向量之间的节间角度(MCP→PIP, PIP→DIP, DIP→tip).
角速度。 角度的时间梯度,有两个安全步骤:在微分之前展开角度,以防止±180°的环绕膨胀速度,跳过每列有效样本少于3个的行,以避免虚假梯度。
目标密钥
QWERTY右侧索引区域: y、 h,n,u,j,m.
存储库结构
3D_hand_angles_plotting/
├── kinematics_analysis.py # main pipeline (extraction + plotting)
├── requirements.txt
├── LICENSE # MIT
└── README.md安装
git clone https://github.com/mehrtam/3D_hand_angles_plotting.git
cd 3D_hand_angles_plotting
pip install -r requirements.txt数据格式
Qualisys运动捕捉会话中的CSV,3D标记列遵循QTM命名约定。必填栏:
- 食指标记:
QTMdc_R_Index_Prox_GLOBAL_X/Y/Z,QTMdc_R_Index_Inter_GLOBAL_X/Y/Z,QTMdc_R_Index_Distal_GLOBAL_X/Y/Z,QTMdc_R_Index_End_GLOBAL_X/Y/Z - 其他右手手指 (中、环、小)——相同的命名模式,用于手掌法线计算
- 手掌参考标记:
QTMdc_R_Cin,QTMdc_R_Cout(每个与_X/Y/Z) - 事件列:
Pressed_Letter,KeyPressFlag,TimeStamp
用法
# Extract kinematics and render the default 3D MCP-Abd × MCP-Flex × PIP-Flex plot
python kinematics_analysis.py --data /path/to/csvs
# Choose a different plot
python kinematics_analysis.py --data /path/to/csvs --plot flexion_clusters
python kinematics_analysis.py --data /path/to/csvs --plot mcp_kinematics
python kinematics_analysis.py --data /path/to/csvs --plot flex_vel_grid
# Render every plot
python kinematics_analysis.py --data /path/to/csvs --plot all
# Just extract, no plotting (e.g. for downstream ML)
python kinematics_analysis.py --data /path/to/csvs --plot none --save-csv kinematics.csv可用可视化
| 绘图键 | 轴 | 使用 |
|---|---|---|
mcp_kinematics | MCP外展×MCP屈曲×MCP外展速度 | 混合角/速度空间 |
flexion_clusters | MCP屈曲×PIP屈曲×DIP屈曲 | 纯屈曲空间 |
mcp_pip_flex | MCP外展×MCP屈曲×PIP屈曲 | 默认——外展与屈曲相结合 |
flex_vel_grid | 屈曲角度与屈曲速度,每个关节一个面板(MCP/PIP/DIP) | 2D相位图 |
样本集群数字将添加到 figures/ 在未来的承诺中。技术栈
Python·NumPy(矢量化3D几何)·pandas(每个文件处理)·matplotlib+seaborn(3D散点/面网格)· concurrent.futures (跨工作者的并行CSV处理)
应用程序
基于运动的AR/VR预测分型、可访问性和辅助输入、神经和运动运动解码、运动意图的生物力学和人机交互研究。
引用
如果你在这项工作的基础上,请参考:
伊斯兰教,F.(2025)。 *三维手部角度绘制——用于击键分析的右手食指运动学* \[计算机软件\]。https://github.com/mehrtam/3D_hand_angles_plotting
联系
法蒂玛(Mehrta)伊斯兰教 --伯明翰大学 · 领英
许可证
麻省理工学院——见 许可证.
