hexapod
纯前端六足机器人仿真器,零依赖IK求解器,支持步态生成与实时3D可视化
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
纯前端六足机器人仿真器,零依赖IK求解器,支持步态生成与实时3D可视化
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
六足机器人(Hexapod)是机器人学中的经典研究对象,其运动学复杂性——十八个关节的协同控制——让无数爱好者望而却步。而一位名为 Mithi 的开发者,用纯 JavaScript 构建了一个运行在浏览器中的六足机器人仿真器,无需安装任何后端依赖,所有计算都在前端完成。2020年诞生至今,已积累 749 Star、86 Fork,是同类项目中交互体验最丰富的开源方案之一。

图1: Mithi's Hexapod 仿真器运行界面(来源:项目官方Demo)
在实体机器人上做实验,代价高昂:舵机损坏、机构磨损、调试循环缓慢。一套完整的六足机器人硬件往往需要数千元,而一旦控制算法有 bug,烧毁驱动板是常有的事。软件仿真解决了这个矛盾——零成本、零风险、无限次迭代。对于研究逆运动学(Inverse Kinematics, IK)的学生、调试步态算法的工程师,以及想学习机器人学却缺少硬件条件的爱好者,仿真器是必经之路。
但大多数现有仿真器存在两个痛点:要么过于专业(如 ROS/MoveIt),门槛高到让人还没开始就放弃;要么过于简陋,只提供一个3D模型,没有任何交互能力。mithi/hexapod 的出现填补了这个空白——它足够简单,打开浏览器就能用;又足够强大,支持完整的逆运动学求解、步态仿真和姿态控制。
六足机器人的运动学问题可以这样理解:已知机器人的身体姿态和目标位置,需要求出每条腿的髋关节(Alpha)、膝关节(Beta)、踝关节(Gamma)三个角度,使六个脚尖恰好接触地面。这个问题没有解析解,需要通过数值迭代求解。
该项目实现了自己的 IK 求解器,完全不使用任何外部数学库,仅依赖 JavaScript 内置的 Math 对象。代码中手写了雅可比矩阵(Jacobian Matrix)迭代算法:
src/hexapod/solvers/ik/hexapodSolver.js — 迭代求解六足机器人参数src/hexapod/solvers/twistSolver.js — 处理身体扭转问题src/hexapod/solvers/orient/ — 通用/专用方向求解器这种实现方式保证了极致的加载速度——所有计算在浏览器主线程毫秒级完成,不涉及网络请求。同时也是一个极佳的学习范本:想理解 IK 如何工作?直接读这个项目的源码,比大多数教材清晰得多。

图2: 步态仿真效果及18个关节角度的实时可视化(来源:项目官方)
每条腿被建模为一个三段式 Linkage(连杆机构):Coxa(髋节)→ Femur(股节)→ Tibia(胫节)。src/hexapod/Linkage.js(约9KB)封装了单腿的运动学计算,包括 DH 参数建模、变换矩阵链构建与叠加、地面接触点实时检测。
仿真器内置两种经典步态:
| 步态 | 触地腿数 | 周期特点 | 适用场景 |
|---|---|---|---|
| Tripod(三足步态) | 3腿/3腿交替 | 速度快,动态稳定 | 平地快速移动 |
| Ripple(波纹步态) | 随相位依次落地 | 稳定性高,耗能低 | 崎岖地形 |
代码实现 walkSequenceSolver.js(约9KB)将步态规划为"支撑相(Power Stroke)"和"摆动相(Return Stroke)"的序列,精细控制每条腿的抬升高度(liftSwing)、前向步幅(hipSwing)和步数(stepCount)。
选择 Plotly 而非 Three.js/Babylon.js 的原因值得玩味:Plotly 的 3D 散点图 + 线段绑定的方案,对于"将连杆机构渲染为空间点线"这个需求来说,实现成本极低,且天然支持导出为 PNG/SVG。虽然没有 PBR 材质和物理引擎的视觉冲击力,但在数学可视化的语境下,这是务实而高效的选择。
src/
├── hexapod/ # 运动学核心算法
│ ├── VirtualHexapod.js # 虚拟机器人状态管理(约10KB)
│ ├── Linkage.js # 单腿连杆运动学(约9KB)
│ ├── Hexagon.js # 身体六边形建模
│ ├── geometry.js # 空间几何工具(矩阵/向量)
│ └── solvers/ # IK、方向、扭转求解器
├── components/ # React UI 组件
│ ├── HexapodPlot.js # Plotly 3D 渲染绑定
│ ├── DimensionsWidget.js # 机器人参数调节面板
│ └── pages/ # 路由页面
└── templates/ # 默认参数与 Plotly 配置
AppHelpers.js 中的 updateHexapod() 是状态更新的核心函数。React 的 setState 驱动每次参数变化后的重渲染,Plotly 图表随之更新。整个数据流是单向的:用户交互 → 参数更新 → IK 求解 → 3D 渲染,无 Redux/MobX 之类的状态管理库,保持轻量化。

图3: 项目GIF展示——步态仿真与IK求解效果(来源:GitHub Issues/PR)
项目部署在 Netlify(hexapod.netlify.app),无需注册即可使用。核心功能包括:
实时控制:机器人三维尺寸调节(体节长度、腿部长度)、3D 姿态控制(旋转/平移)、站立姿态微调。
运动学求解:Inverse Kinematics——拖拽目标点,实时解算18个关节角度;Forward Kinematics——给定关节角度,查看末端执行器位置。
步态仿真:Tripod / Ripple 步态选择,前进/后退、顺时针/逆时针旋转,步数、步幅、抬腿高度参数化配置。
数据可视化:18 个关节角度的实时折线图,Plotly 3D 交互视角(旋转/缩放/平移)。
该项目是最容易部署的 Web 应用之一:
git clone https://github.com/mithi/hexapod.git
cd hexapod
yarn install
yarn start # 启动开发服务器,浏览器自动打开 localhost:3000
依赖仅有 React + Plotly,安装体积约 100MB(node_modules)。没有 Python 环境、没有 Docker、没有 CUDA——一台普通的开发机即可。生产构建后只需将 build/ 目录部署到任意静态托管服务(Netlify、Vercel、GitHub Pages、Nginx)。

图4: 更多GIF示例——步态模式对比与实机控制(来源:GitHub用户贡献)
作者 Mithi 维护了配套的 hexapod-kinematics-library(纯算法 npm 包)和 hexapod-irl(实机控制版),构成了一个完整的学习/研究生态。
六足机器人在搜救、勘探、复杂地形移动领域有独特优势。随着四足机器人(如 Boston Dynamics Spot)商业化,六足方案以更高的静态稳定性进入研究者视野。该项目通过降低仿真门槛,让更多人能参与到这一领域的学习和研究中来。其"纯前端、无依赖"的工程哲学,本身也是一种有价值的示范。