个人实验代码仓库,涵盖触觉传感仿真(毕业设计方向)、MuJoCo 物理仿真、计算机视觉手势识别、嵌入式编译链四块内容。全部可离线运行,双击 .bat 即可启动。
| 目录 | 内容 | 技术栈 |
|---|---|---|
force3d/ |
交互式触觉传感器工作台:双层切向力解算 + 上位机 + 画布模拟 + 滑移检测 + 竞技场/教练/助手 | NumPy / SciPy / Tkinter |
plugins/ |
算法插件目录(放 .py 即被自动加载,参与竞技场比较) |
Python |
tests/ |
自动化测试(python -m unittest discover -s tests -t .) |
unittest |
examples/ |
示例录制数据(.npz / .csv),无硬件可直接试用 |
— |
tactile_lab/ |
毕业设计:柔性触觉阵列建模、信号链仿真、触觉引导轴孔装配 | MuJoCo / NumPy |
mujoco_lab/ |
MuJoCo 学习实验:单摆、倒立摆 LQR、齿轮传动、渲染 | MuJoCo / Matplotlib |
gesture/ |
摄像头手势识别,8 种手势映射到系统媒体键 | MediaPipe Tasks / OpenCV |
games/ |
霓虹打砖块,支持手势控制 paddle | pygame |
keil_lab/ |
STM32F103 工程 + 命令行编译脚本 | Keil MDK / ARMCC |
openclaw_bridge/ |
OpenClaw 本地代理诊断与调用示例 | Python |
- Python 3.12 / 3.13
- 触觉与 MuJoCo 实验:
pip install mujoco numpy matplotlib - 手势与游戏:
pip install mediapipe opencv-python pygame(模型文件首次运行自动下载)
各目录下均有 run.bat,双击按菜单选择实验:
tactile_lab/run.bat # 触觉仿真:标定 / 成像 / 定位 / 参数扫描 / 轴孔装配
mujoco_lab/run.bat # MuJoCo 六课实验
games/run.bat # 打砖块(键盘 / 手势两种模式)
见 intro.md 与 docs/dual_layer_shear.svg。
原生 Python(tkinter)界面,免网页、点级交互。同一套解算可迁移到任意
taxel 布局:灵巧手指尖、智能布料、散点阵列、多指灵巧手。
物理内核:力经弹性层"传递 + 沿力方向各向异性扩散", 同一接触面改变力的方向 → 扩散朝向随之改变,这是反解切向力的依据。
- 双通道解方向:位移(有符号,各布局稳健)+ 各向异性主轴(对微小位移敏感),互为交叉验证
- 布局抽象层:物理坐标 mm → 核密度重采样 → 已验证 NCC;κ 与位移和 taxel 间距解耦
- 三模式:45° 标定 / 串口·TCP 实测(含进程内模拟源)/ 画布模拟(点击放置、拖拽=力方向)
- 协议优先:串口 / TCP 统一
T/B帧协议,附模拟源、监视器、Arduino 参考固件 - 输入模式切换:双层(成对矩阵)/ 单层(单矩阵)
| 入口 | 作用 |
|---|---|
① 上位机 apps/host.py |
主功能。三模式(45°标定 / 串口·TCP 实测 / 模拟)共用「读数 → 信号调理 → 解算 → 显示」,顶端实时显示滑移余量 |
② 画布模拟 apps/sim.py |
任意布局:点击放置接触、拖拽定力的方向,看力场与扩散;灵巧手各指尖独立接触 |
③ 自由触觉点 apps/points.py |
布点 → 施压 → 实时解算:点击/导入触觉点坐标,拖动压头读矩阵,逐点切向力 |
④ 滑移检测实验室 apps/slip.py |
粘着→滑移转变检测、摩擦锥余量、在线逐帧报警(四图联动) |
⑤ 信号调理工作台 apps/filters.py |
逐触觉点归零 + 尖峰钳位 + 时域滤波 + 漂移补偿,全程可视化(主链路的拆开细看版) |
⑤ 研究工具箱 apps/tools.py |
算法竞技场 / 自动标定教练 / 研究助手 |
python apps/points.py # 自由触觉点工作台(布点 → 施压 → 实时解算)
python apps/serial_sim.py --port tcp://127.0.0.1:9001 --scene point30 # 模拟源
python tools/serial_monitor.py --port COM3 --rows 24 --cols 24 # 监视器
python apps/filters.py # 信号调理工作台(逐点归零 + 滤波)
python apps/slip.py --check # 滑移检测自检
python apps/filters.py --check # 信号调理自检
python apps/tools.py --check # 工具箱自检
python apps/points.py --check # 自由触觉点自检(含实时性)
python apps/sim.py --check # 画布模拟自检(含灵巧手各指尖独立性)
python -m force3d.check # 核心算法自检
python -m force3d.align # 双层独立坐标自检
python -m force3d.filters # 时域信号调理自检
python -m unittest discover -s tests -t . # 全量测试(49 项)| 类别 | 模块 | 说明 |
|---|---|---|
| 数据接入 | serial_link.py |
串口/TCP 统一 T/B 帧协议,坏行丢弃不中断 |
| 预处理 | preprocess.py |
中值/高斯/卡尔曼、离群剔除、基线校正、接触区域识别(含不规则布局的坐标聚类) |
| 解算 | invert.py solver.py |
模糊不变 NCC、法向/切向力、摩擦上限与滑移 |
| 双层独立坐标 | align.py |
两层点云各自独立时的配准(Chamfer 粗扫 + ICP)+ 逐点切向力;DualSolver 缓存几何做实时链路 |
| 滑移 | slip.py |
不依赖已知 μ:从"位移-力脱钩"反推门槛,进而估计 μ |
| 信号调理 | filters.py |
逐触觉点零位(tare) + 尖峰钳位 + EMA/中值/滑动平均 + 漂移跟踪(时域,与 preprocess.py 的空域互补) |
| 事件 | events.py |
接触/释放/冲击/滑移/粘着状态机 |
| 录制 | iodata.py |
录制回放、.npz/.json/.csv 导入导出、合成示例数据 |
| 标定 | coach.py |
四步流程 + κ 自动拟合 + 健康度评分 |
| 对比 | plugins.py arena.py |
算法插件系统 + 竞技场(精度/自证/稳定性/延迟) |
| 诊断 | assistant.py |
本地规则引擎:数据体检、结果解读、根因排查、用例推荐 |
| 基建 | config.py |
参数持久化、错误日志(轮转)、设备连接记录 |
自检 python apps/host.py --check 全项 PASS(垂直自证 0、45° 方向误差 0°、
幅值误差 0.8%、滑移判定、布局方向误差 ≤8°);滑移 μ 估计误差 0.72.2%;
κ 自动标定复原误差 0.13.8%。
两个课题构成"感知 → 决策"的完整链路:
课题一 · 柔性触觉阵列建模与标定
24×24 弹性 taxel 阵列(间距 1.5 mm),物理层用 MuJoCo 软接触求解真实接触力,其上叠加完整的采集信号链——串扰、蠕变、迟滞、自适应死区、12 bit 量化、电子噪声。
- 静态标定:三类压头(球头 / 平头 / 探针)的力—深度曲线与接触面积变化
- 空间定位:重心法与高斯拟合对比,真值误差 < 0.05 mm
- 相位特性:细扫曲线呈现周期等于阵列间距的定位误差起伏(离散阵列固有下界)
- 性能边界:串扰对定位几乎无影响(对称扩散被重心法抵消),噪声才是主导误差源
课题二 · 触觉引导的轴孔装配
10 mm 方轴插入 12 mm 方孔(单边间隙 1 mm),孔位随机偏移 ±3 mm,轴身四面贴 40 个触觉单元,按力差做"先摆正、再进给"的两段式修正。
| 策略 | 成功率 | 峰值侧向力 |
|---|---|---|
| 盲插 | 2 / 6 | 27.8 N |
| 触觉引导 | 6 / 6 | 2.3 N |
output/与模型权重不入库,由脚本运行时生成 / 下载。- Keil 部分需要本机安装 MDK;
keil_lab/build.bat支持拖入.uvprojx直接编译。