基于IMU与触觉反馈的智能康复系统:从原理到实践 1. 项目概述当康复训练遇上“智能教练”前交叉韧带损伤对于运动员和运动爱好者来说是个绕不开的梦魇。术后漫长的康复期每天重复枯燥的足跟滑动练习动作是否标准全凭感觉康复效果难以量化更别提坚持了。传统的家庭康复要么靠纸质计划表要么看视频模仿缺乏实时反馈和个性化指导导致患者依从性差康复进程缓慢。作为一名长期关注康复工程的技术爱好者我一直在想能不能用更“聪明”的办法解决这个问题。于是这个想法诞生了做一个能“手把手”教你怎么做康复动作的智能设备。它的核心思路很简单但很有效用两个微型传感器IMU分别绑在大腿和小腿上实时监测膝关节的运动角度一旦你的动作偏离了预设的“黄金标准”设备就会通过轻微的振动提醒你告诉你该往哪个方向调整。这就像在你身边安排了一位不知疲倦的康复治疗师时刻关注你的每一个细微动作。这个项目我称之为“基于IMU与触觉反馈的智能康复系统”。它瞄准的正是家庭康复中“缺乏实时、个性化指导”的核心痛点。通过低成本、易获取的硬件如Arduino、MPU-6050传感器和相对简洁的算法我们构建了一个原型能够在前交叉韧带康复的经典动作——足跟滑动中提供精准的运动矫正。无论你是热衷于动手制作的创客、康复领域的学生还是希望为自己或家人改善康复体验的实践者这个项目都提供了一个从零到一、清晰可循的实现路径。接下来我将拆解整个系统的设计思路、硬件搭建、代码逻辑以及那些只有亲手做过才会知道的“坑”希望能为你带来启发。2. 核心思路与方案选型为什么是IMU触觉反馈在构思这个系统时我们面临几个关键选择用什么技术来捕捉运动如何给出反馈系统如何做到既精准又易于在家使用这些选择直接决定了项目的可行性和最终效果。2.1 运动追踪技术的抉择从视觉到惯性传感最初很多人会想到用摄像头。手机摄像头配合计算机视觉算法似乎是个不错的无接触方案。但深入研究后我发现这条路在家用场景下问题不少。首先三维空间下的无标记运动追踪精度一直是个挑战特别是在肢体遮挡、光照变化时误差会显著增大。其次它要求患者必须在摄像头视野内活动这本身就不够自然也限制了活动范围。最重要的是隐私问题和对计算资源的依赖让它在长期、高频的家庭使用中显得笨重。相比之下惯性测量单元IMU展现出了独特的优势。IMU通常集成了三轴加速度计和三轴陀螺仪有的还有磁力计。它能直接测量肢体的角速度和线性加速度通过传感器融合算法如互补滤波、卡尔曼滤波解算出实时的三维姿态角。这意味着只要把IMU牢固地绑在肢体上它就能在任何地方、任何姿态下工作不受环境光线和视野限制。其精度足以满足康复运动中对角度变化的监测需求通常要求误差在几度以内而且体积小、功耗低、成本可控。对于需要每日多次重复的足跟滑动练习IMU提供的是一种穿戴式、无感的持续监测能力这与家庭康复的需求完美契合。2.2 反馈模态的选择为何震动优于声音和图像监测到动作偏差后如何有效地通知用户纠正常见的有视觉反馈屏幕显示、听觉反馈提示音和触觉反馈振动。视觉反馈需要用户分神去看屏幕打断了练习本身的专注度。听觉反馈在嘈杂环境中可能被掩盖且持续的提示音容易造成干扰。而触觉反馈特别是局部振动具有其不可替代的优势。它直接作用于皮肤传递信息直观且私密不干扰听觉和视觉。在运动矫正中振动可以很容易地被赋予方向性例如左腿外侧振动提示膝盖向外偏了这与人体对空间方位的本能感知相匹配。研究表明触觉反馈能有效增强本体感觉对自己身体位置和运动的感知促进运动技能的学习和巩固。对于康复训练这种需要高度专注身体感受的活动一种不显眼但明确的物理提示无疑是更优的解。2.3 系统架构设计集中控制与模块化连接确定了IMU感知和触觉反馈后整个系统的架构就清晰了。我们需要一个大脑微控制器来读取两个IMU的数据进行计算判断然后驱动两个振动电机。这里选择了Arduino Micro因为它有足够的I/O口社区支持完善编程简单。但一个现实问题是Arduino的I2C总线通常只能有一个主设备而我们需要连接两个IMU传感器和两个振动电机驱动器DRV2605L也通过I2C通信。直接并联它们会导致地址冲突MPU-6050的I2C地址是固定的。解决方案是使用一个I2C多路复用器Multiplexer比如PCA9548A。它就像一个多通道的交换机允许主设备Arduino通过同一组I2C线SDA, SCL轮流与多个从设备通信完美解决了地址冲突和总线负载问题。因此最终的系统架构是Arduino Micro作为主控通过I2C连接到一个多路复用器。多路复用器的四个通道分别连接两个MPU-6050 IMU和两个DRV2605L驱动芯片。DRV2605L再连接并驱动线性谐振执行器LRA电机产生精确控制的振动。此外增加一个按钮用于手动重置训练次数或开始新的训练组。整个系统由USB供电数据通过串口实时上传到电脑方便用Python脚本进行可视化监控和记录。注意这个架构在原型阶段非常灵活但线材较多。对于最终产品必然要走向定制PCB和无线化如使用蓝牙IMU和主控以提升穿戴舒适度和实用性。但在开发和验证阶段模块化的接线方式便于调试和更换组件。3. 硬件搭建详解从零件到可穿戴设备理论说得再好最终都要落到实打实的硬件连接上。这部分我会详细列出物料清单并一步步讲解如何将这些分散的模块组装成一个能工作的整体特别是那些容易出错的连接细节。3.1 物料清单与核心元件解析首先你需要准备以下核心部件。选择这些特定型号主要是基于其性能、可用性和社区支持度。主控制器Arduino Micro。之所以选Micro而不是更常见的Uno主要是看中了它的体积和原生USB支持。它更小巧便于后续集成而且可以直接被识别为串口设备与电脑通信更稳定。运动感知核心MPU-6050模块2个。这是项目的“眼睛”。它集成了3轴加速度计和3轴陀螺仪成本低廉资料丰富。通过I2C接口输出原始数据我们需要通过算法将这些数据融合成稳定的姿态角。触觉反馈执行器LRA震动电机 DRV2605L驱动模块2套。普通的振动马达启停慢震动强度难以精确控制。我们选用的是线性谐振执行器LRA它需要交流信号驱动才能高效工作。DRV2605L正是专为驱动LRA和ERM偏心转子电机设计的芯片它内置了多种预置的振动效果库可以通过I2C轻松控制震动的强度和模式让反馈更细腻、更省电。交通枢纽PCA9548A多路复用器模块。这是解决I2C设备冲突的关键。它有8个通道我们只用其中4个。注意要选择带Stemma QT/Qwiic或类似4线防反插接口的版本能极大简化连接避免接错线烧毁设备。连接线材Arduino USB数据线Micro-USB接口1根。Stemma QT 4芯连接线200mm长度4根。用于连接多路复用器与IMU、DRV模块。母对母杜邦线若干。用于连接Arduino与多路复用器以及补充连接。细导线和电烙铁或压接端子。用于连接DRV模块与LRA电机。交互与控制带灯自锁按钮开关1个。用于用户控制如开始/结束一组训练。穿戴载体旧袜子或弹性绷带、针线。用于将传感器和电路固定在腿部。辅助工具面包板可选用于临时测试、电工胶布、热缩管。3.2 电路连接步步为营连接电路是项目的基石务必耐心细致。遵循“电源最后接”的原则先连接信号线再连接电源可以避免因短路造成的损失。第一步建立主控与多路复用器的通信桥梁首先用杜邦线将Arduino Micro与PCA9548A多路复用器连接起来。这是整个系统的“主干道”Arduino5V- 多路复用器VINArduinoGND- 多路复用器GNDArduinoD2- 多路复用器SDA(这里将D2作为软件I2C的数据线)ArduinoD3- 多路复用器SCL(这里将D3作为软件I2C的时钟线)注意这里使用了D2和D3作为I2C引脚是因为我们需要使用SoftwareWire库来模拟I2C通信以更好地控制多路复用器的通道切换。Arduino Micro的硬件I2C引脚是D2(SDA)和D3(SCL)但一些库可能占用硬件I2C使用软件模拟可以避免冲突。第二步接入感知与反馈终端接下来使用4芯Stemma连接线将两个MPU-6050和两个DRV2605L模块分别连接到多路复用器的剩余通道上例如通道0、1、2、3。Stemma接口是防反插的直接对准插入即可非常方便。每个模块都需要4根线VCC、GND、SDA、SCLStemma线已经将它们整合在一起。第三步驱动振动电机DRV2605L模块需要驱动LRA电机。模块上有电机的输出端子和-。你需要将LRA电机的两根线连接到这两个端子上。这里极性很重要虽然接反了电机也可能震动但效果和寿命会受影响。通常LRA电机红线接黑线接-。由于电机线可能很细建议用烙铁焊接并套上热缩管绝缘或者使用压线端子。避免仅仅用胶布缠绕在运动拉扯下容易松动。第四步添加用户控制按钮我们使用一个带灯的自锁按钮。这种按钮内部实际是两个独立部分LED灯和开关。LED部分因为模块通常内置了限流电阻所以可以直接连接。将LED的通常为长脚或标有接Arduino的5V-接GND。按下按钮时灯亮提供状态指示。开关部分我们需要配置一个上拉电阻电路。连接方式如下将开关的一个引脚接5V。将开关的另一个引脚同时连接到Arduino的一个数字输入引脚如D7和一个10kΩ电阻的一端。将这个10kΩ电阻的另一端接GND。 这样当按钮未按下时D7通过电阻被拉低到GND读到LOW当按钮按下时5V直接连通到D7读到HIGH。这种配置可以防止引脚悬空产生不确定信号。3.3 传感器穿戴与校准要点硬件连接好后如何穿戴是影响数据质量的关键。理想情况下传感器应与骨骼轴线对齐减少皮肤滑动带来的误差。制作穿戴套件找一只弹性适中的旧袜子在小腿肚和大腿中段位置分别剪开一个小口。将IMU模块用针线或强力魔术贴固定在袜子内侧确保其背面印有芯片的一面紧贴皮肤且模块的Y轴通常有箭头标记与胫骨小腿骨或股骨大腿骨的轴线平行指向膝盖方向。多路复用器和DRV模块可以缝在袜子外侧或大腿上方便的位置。放置振动电机将两个LRA电机分别置于小腿内侧和外侧靠近IMU的位置。这样当检测到膝盖向内或向外旋转时对应侧的电机振动提示方向非常直观。“零位”校准这是至关重要的一步。让患者以标准的“中立位”坐好或躺好腿部伸直脚尖朝上髌骨朝向正上方。在这个姿势下运行校准程序记录下两个IMU此时的Y轴角度值并将这个值作为后续计算的“零位”参考。这样系统测量的就是相对于这个标准姿势的偏移角度消除了传感器安装角度微小差异带来的影响。实操心得在缝制时可以在IMU背面垫一小块海绵或软布既能增加舒适度也能让传感器更贴合肢体曲线减少晃动。第一次校准前让患者反复放松、摆正姿势几次取一个平均的“零位”值比单次测量更可靠。4. 软件逻辑与算法核心让设备“理解”运动硬件是躯干软件才是灵魂。这套系统的智能全部体现在Arduino的C控制程序和电脑端的Python监控程序里。我们来深入看看代码是如何工作的。4.1 微控制器程序数据融合与实时决策Arduino端的程序承担了最核心的实时任务读取传感器数据、计算姿态角、判断是否越界、触发反馈。其流程可以概括为初始化、数据采集、融合计算、决策反馈四大步。4.1.1 初始化与传感器配置程序一开始需要建立软件I2C通信并初始化多路复用器、IMU和DRV模块。#include Wire.h #include “Adafruit_MPU6050.h” // 用于MPU6050 #include “Adafruit_DRV2605.h” // 用于DRV2605 #include “Adafruit_PCA9548A.h” // 用于多路复用器 Adafruit_PCA9548A mux; Adafruit_MPU6050 imu1, imu2; Adafruit_DRV2605 drv1, drv2; // 定义哪个通道接哪个设备 #define CH_IMU_THIGH 0 #define CH_IMU_SHANK 1 #define CH_DRV_INNER 2 #define CH_DRV_OUTER 3 void setup() { Serial.begin(115200); Wire.begin(); if (!mux.begin(0x70)) { // PCA9548A默认地址0x70 Serial.println(“Mux not found”); while (1); } // 初始化IMU1大腿 mux.selectChannel(CH_IMU_THIGH); if (!imu1.begin()) { Serial.println(“IMU1 (Thigh) not found”); } imu1.setAccelerometerRange(MPU6050_RANGE_2_G); imu1.setGyroRange(MPU6050_RANGE_250_DEG); // 类似地初始化IMU2小腿和DRV模块... // DRV模块需要设置震动模式例如 drv1.setMode(DRV2605_MODE_INTTRIG); }初始化时一个关键步骤是传感器校准。我们需要在设备静止时读取陀螺仪数百个样本计算其零偏Bias并在后续读数中减去这个值以消除传感器固有的微小误差。4.1.2 互补滤波从原始数据到稳定角度MPU6050直接输出的是加速度单位g和角速度度/秒。要得到姿态角这里我们最关心绕垂直轴的旋转角Yaw但实际用加速度计和陀螺仪融合主要得到Roll和Pitch对于足跟滑动我们更关注矢状面的屈伸角和水平面的旋转角需要根据穿戴轴向重新定义需要进行传感器融合。我们采用经典的互补滤波器。原理很简单加速度计在长期静态下测量倾角准确但动态时噪声大陀螺仪测量角速度积分得到角度短期动态准确但随时间会产生累积漂移。互补滤波器取两者之长用高通滤波器滤掉加速度计的低频噪声用低通滤波器滤掉陀螺仪的高频漂移再将结果融合。float complementaryFilter(float accelAngle, float gyroRate, float dt, float alpha) { // accelAngle: 由加速度计计算出的角度 // gyroRate: 陀螺仪测量的角速度 // dt: 两次循环的时间间隔秒 // alpha: 滤波系数0alpha1决定信任加速度计的程度 static float angle 0; angle alpha * (angle gyroRate * dt) (1 - alpha) * accelAngle; return angle; }在循环中我们以固定频率例如100Hz读取数据。先通过atan2(accelY, accelZ)等公式从加速度计估算出当前姿态角accelAngle。同时对陀螺仪读数积分gyroAngle previousAngle gyroRate * dt。最后用上述互补滤波公式融合两者得到稳定且响应快的角度值currentAngle。系数alpha通常取0.96-0.98表示更信任陀螺仪的短期数据。4.1.3 阈值判断与定向触觉反馈得到小腿IMU相对于初始“零位”的Y轴角度代表膝盖的内外旋后我们将其与预设的阈值进行比较。float threshold 10.0; // 允许偏离的角度阈值单位度 float yAngle getFilteredYAngle(); // 获取经过滤波的Y轴角度 if (abs(yAngle) threshold) { // 角度超出阈值 if (yAngle 0) { // 角度为正表示膝盖向外旋转过度 triggerVibration(CH_DRV_OUTER, map(abs(yAngle), threshold, 30, 50, 255)); // 外侧电机震动 } else { // 角度为负表示膝盖向内旋转过度 triggerVibration(CH_DRV_INNER, map(abs(yAngle), threshold, 30, 50, 255)); // 内侧电机震动 } } else { // 角度在允许范围内停止震动 stopVibration(); }这里有几个关键点阈值个性化threshold不是固定值。它应该根据用户的康复阶段动态调整。初期可能设为12度随着用户控制能力增强逐步降低到8度、5度以持续挑战并提升其运动精度。震动强度映射我们使用map()函数将超出阈值的角度偏差映射到一个震动强度值例如PWM占空比或DRV2605的震动效果强度。偏差越大震动越强给用户的纠正提示也越强烈。DRV2605库函数drv.setRealtimeValue(intensity)可以方便地控制强度。方向性通过判断角度正负决定触发内侧还是外侧电机实现了“方向性”提示。4.2 上位机程序监控、记录与可视化为了调试和评估一个Python上位机程序非常必要。它通过串口接收Arduino发送的数据时间戳、大腿角度、小腿角度、是否触发震动等并实时绘图。import serial import matplotlib.pyplot as plt from collections import deque import time # 设置串口 ser serial.Serial(‘COM3’, 115200, timeout1) # Windows # ser serial.Serial(‘/dev/ttyACM0’, 115200, timeout1) # Linux/Mac # 初始化绘图数据队列 max_len 500 time_data deque(maxlenmax_len) angle_data deque(maxlenmax_len) plt.ion() # 开启交互模式 fig, ax plt.subplots() while True: if ser.in_waiting: line ser.readline().decode(‘utf-8’).rstrip() try: # 假设数据格式: “timestamp,thigh_angle,shank_angle,vibration_flag” t, thigh, shank, vib map(float, line.split(‘,’)) current_time time.time() time_data.append(current_time) angle_data.append(shank) # 以小腿角度为例 # 清空重绘 ax.clear() ax.plot(time_data, angle_data, ‘b-‘, label‘Shank Y Angle’) # 添加阈值线 ax.axhline(y10, color‘r’, linestyle‘—‘, label‘Threshold (10°)’) ax.axhline(y-10, color‘r’, linestyle‘—‘, label‘Threshold (-10°)’) # 在触发震动的时间点做标记 if vib 0: ax.plot(current_time, shank, ‘ro’) # 红点标记震动时刻 ax.set_xlabel(‘Time (s)’) ax.set_ylabel(‘Angle (degrees)’) ax.legend() ax.grid(True) plt.pause(0.01) except ValueError: pass # 忽略不完整的数据行这个脚本不仅能实时展示运动曲线和越界情况还能将数据保存到CSV文件中供后期分析康复进展使用。通过观察曲线治疗师或用户可以清晰看到动作的平滑度、对称性以及触觉反馈触发的频率从而量化评估训练效果。注意事项串口通信要确保波特率一致并处理可能的数据丢包。绘图不宜过于频繁以免消耗过多CPU资源。对于长期记录建议将数据直接写入文件而非全部保存在内存队列中。5. 系统调试与个性化训练策略设备搭建完成并跑通代码后真正的挑战在于如何让它可靠、有效地工作并适配不同的用户。这部分充满了“踩坑”经验和实用技巧。5.1 常见问题与故障排查在调试过程中你几乎一定会遇到下面这些问题。别担心它们都有对应的解决思路。问题现象可能原因排查与解决步骤IMU数据跳动剧烈角度漂移快1. 传感器未校准或校准不充分。2. 互补滤波系数alpha设置不当。3. 传感器放置不牢随皮肤滑动。4. 附近有强磁场或振动干扰。1.重新执行静止校准确保设备在绝对静止的平面上进行采集足够多的样本如500-1000个点求平均零偏。2.调整滤波系数增大alpha如0.98更信任陀螺仪响应快但可能漂移减小alpha更信任加速度计稳定但响应慢。针对康复运动的频率通常较慢alpha可以设得稍低一些如0.94。3.加固穿戴使用弹性绷带或专用绑带确保IMU紧贴骨性标志减少软组织晃动的影响。4.检查环境远离电机、音箱等强磁或振动源。振动电机不工作或震动微弱1. 电源供电不足。2. DRV2605L模块未正确初始化或I2C通信失败。3. 电机线缆接触不良或断开。4. 驱动库函数调用错误。1.检查电源确保USB口能提供足够电流500mA以上尝试单独给DRV模块供电测试。2.检查I2C地址与通道用I2C扫描程序确认DRV模块是否在多路复用器的指定通道上被正确识别DRV2605L地址为0x5A。3.检查接线用万用表通断档检查电机到DRV模块的线路。4.查阅库文档确认使用了正确的函数如drv.useLRA()声明电机类型drv.setRealtimeValue(128)设置震动强度0-255。多路复用器切换后读不到数据1. 多路复用器通道切换指令未生效。2. I2C总线锁死或通信被干扰。3. 软件I2C时钟速度过快。1.确认切换函数使用mux.selectChannel(channel)后留出足够延时如几毫秒让总线稳定。2.简化总线断开所有从设备只连多路复用器进行扫描测试。检查上拉电阻通常模块已内置若无需在SDA、SCL上加4.7kΩ上拉到3.3V或5V。3.降低时钟频率在SoftwareWire初始化时尝试降低时钟速度如Wire.setClock(100000)设为100kHz。Python上位机收不到数据或乱码1. 串口号错误。2. 波特率不匹配。3. Arduino发送数据格式与Python解析格式不一致。4. 串口被其他程序占用。1.确认串口号在Arduino IDE或系统设备管理器中查看正确的COM口。2.统一波特率确保双方Serial.begin()和serial.Serial()的波特率相同常用115200。3.统一数据格式Arduino使用Serial.println(data)发送Python按行读取readline()。确保数据末尾有换行符且解析代码能处理数据分割。4.关闭其他串口软件确保Arduino IDE的串口监视器已关闭。按钮状态读取不稳定1. 按键抖动。2. 上拉/下拉电阻配置错误。1.软件消抖在检测到按键状态变化后延时10-50毫秒再次读取确认状态稳定后再执行动作。2.检查电路确认上拉电阻接VCC或下拉电阻接GND已正确连接避免引脚悬空。5.2 个性化训练策略设计设备稳定工作后如何用它进行有效的康复训练才是最终目的。一个简单的“超阈值就震”的策略是基础但远非最优。动态阈值调整这是个性化的核心。系统不应使用固定阈值。初始阶段可以设置一个较宽的“安全区”如±15度让患者先适应反馈模式。当患者连续多次训练都能将偏差控制在该区域内时系统或治疗师可以手动/自动将阈值收紧如±12度提高训练难度。这种“自适应挑战”能持续促进神经肌肉控制能力的提升。分阶段振动提示不要只做“开/关”式的振动。可以设计梯度反馈提示区如±8度内不振动或极轻微振动表示动作良好。警告区如±8度到±12度中等强度、间歇性振动提醒用户注意偏差趋势。错误区超过±12度持续、较强振动明确提示需要立即纠正。 这种设计更符合人体感知避免因持续强振动导致用户烦躁或习惯化。关注运动模式而不仅是终点足跟滑动的质量不仅在于最大屈膝角度更在于整个过程是否平滑、对称。系统可以计算每次滑动动作的角度-时间曲线分析其平滑度导数变化率、对称性左右腿对比并给出综合评分。反馈也可以不局限于“是否越界”而是在动作过程中提供引导性振动提示“加快一点”或“慢一点”。数据驱动的康复日记每次训练的角度数据、偏差次数、保持时间等都被记录。通过上位机软件生成简单的趋势报告让患者和治疗师清晰地看到“本周的平均偏差比上周减少了20%”这种可视化的进步是强大的激励工具。实操心得在初期测试时最好有一位康复治疗师或有一定经验的伙伴在旁边观察。将系统反馈与治疗师的专业判断进行对比校准能快速验证阈值设置是否合理反馈模式是否直观有效。记住技术是辅助工具最终目标是与专业的康复知识相结合。6. 项目总结与未来展望回顾整个项目从构思到实现最大的感触是将前沿技术应用于解决具体、细微的现实问题其带来的满足感远超单纯的技术实现。这个基于IMU和触觉反馈的康复原型成功地验证了“实时、定向、个性化”运动矫正的可行性。它不仅仅是一个课程设计或创客作品更指向了一个明确的临床需求缺口——家庭康复中的精准指导。目前这个版本毫无疑问还是一个实验室原型。线材的束缚、依赖电脑供电和数据显示、传感器穿戴的标准化问题都限制了其直接进入家庭场景。但它的价值在于提供了一个完整的技术验证闭环信号感知、数据处理、决策算法、物理反馈、数据记录。每一个环节都有明确的、可优化的方向。对于想要复现或改进这个项目的朋友我的建议是先跑通再优化。先用面包板和跳线把核心功能实现确保IMU读数稳定、反馈准确。然后可以沿着这些方向深化硬件集成化设计一块定制PCB将Arduino、多路复用器、驱动芯片集成在一起使用锂电池供电体积可以缩小到一块手表大小。无线化与移动化主控换成ESP32或nRF52832这类带蓝牙的芯片传感器数据通过蓝牙发送到手机App。手机App负责数据显示、记录和高级算法分析甚至可以用简单的机器学习模型识别错误模式彻底摆脱电脑。算法优化将互补滤波器升级为更鲁棒的卡尔曼滤波器或Madgwick滤波算法以应对更剧烈的运动。探索基于时间序列的异常动作模式识别实现预测性反馈。扩展应用场景这套框架不仅适用于膝关节。稍作修改同样可以用于踝关节背屈/跖屈训练、肩关节外展/内收训练甚至用于纠正脊柱侧弯患者的姿势。技术的终点是为人服务。这个项目的初衷是让康复训练变得更科学、更有趣、更有效。当你看到测试者因为一次及时的振动提示而立刻调整了动作并最终能更标准地完成练习时你会觉得所有的调试和折腾都是值得的。它或许还不够完美但无疑迈出了扎实的一步。希望这个详细的分享能为你点亮一盏灯无论是用于学习、研究还是最终创造出帮助更多人的产品。