Journal

Solid Knitting

Yuichi Hirose, Mark Gillespie, Angelica M. Bonilla Fominaya, James McCann

Carnegie Mellon University; Google

一句话总结

本文提出「实心针织(solid knitting)」——一种把 3D 打印的逐层体积堆叠思想与针织的线圈互锁结构结合起来的全新制造工艺,能用单根纱线织出致密、坚固的三维实体;作者还给出了配套的原型机器、低层指令语言、体积网格数据结构(augmented stitch volumes)以及从设计到机器指令的编译流程。该工作获得 SIGGRAPH 2024 最佳论文荣誉提名。

研究背景

传统针织(无论手工还是机器)本质上只能生产中空的表面织物:线圈在一个二维网格中排布,每个线圈与左右邻居靠纱线相连、与上下邻居靠互锁线圈相连。哪怕是号称做「3D 针织」的技术,产出的也多是曲面外壳而非实心体积。而 3D 打印的核心优势恰恰是逐层堆叠出致密体积。

作者提出的问题是:能不能把针织也扩展到第三维,像 3D 打印那样一层一层地织出实心物体?这样做的独特价值在于——由于各层是在制造过程中通过线圈拓扑互锁在一起的,实心针织物不需要任何黏合剂,因此可以像拆毛衣一样把物体拆解、回收出完整纱线并重新织成别的东西。作者设想的未来是:家具、鞋子(含鞋底)等日常物品可以整体针织成型,用完拆掉、纱线重织,成为一种可持续的「3D 打印」范式。

本文做出四项主要贡献:提出实心针织这一新制造方法;实现一台能自动完成实心针织的原型机器;引入 augmented stitch volumes 这一体积网格数据结构来表示实心针织图案;描述一个从数据结构生成机器指令的调度器。

核心方法

实心针织的结构:course–wale–layer 三维栅格

传统针织的单个线圈可抽象为一个矩形瓦片,连接四个邻居:左右方向(course,横向纱线方向)由纱线相连,上下方向(wale,纵向线圈方向)由互锁线圈相连。

实心针织把它扩展到第三维:单个实心线圈变成一个盒状瓦片,连接六个邻居。除了 course(\(x\))和 wale(\(y\))两个方向外,新增 layer(\(z\))方向。每一个实心线圈既穿过同一行前一个线圈(wale 方向),又穿过下一层对应位置的线圈(layer 方向)。也就是说,每个线圈都会被后续线圈穿过两次:一次来自 wale 方向的下一行,一次来自下一层。

这带来了三种线圈稳定性状态(关键设计):

  • active(活动/不稳定)线圈:最新一行的线圈,拉扯纱线端就会散开。
  • stable but incomplete(稳定但未完成)线圈:已被穿过一次,拉扯不会立刻散开,但还需被下一层再穿一次才算完成。
  • completed(完成)线圈:被穿过两次,彻底稳定。

「持有一整层的稳定但未完成线圈,直到下一层再来穿过它们」是实心针织区别于传统针织的核心难题——传统机器一次只需管理一行线圈。

实心针织机器

机器像传统 V 型床机一样有两组带舌针(latch needle)来形成和操纵线圈,但关键增设了 holder(持圈钩):这些钩以圆柱阵列排布,能持有一整个二维层里的所有线圈。通过旋转钩阵列,机器可让任意一个 holder 钩对齐到对应列的舌针,从而在 holder 与前/后床舌针之间转移线圈。舌针之间还有 retaining needles(保持针),用来把新纱线塞(tuck)进 holder 下方。机器只有单个纱线导纱器(yarn carrier)。每个 holder 钩由两半组成,通常闭合,某些操作时会张开以让出被持线圈的通路。

织一针的流程(图 6)可归纳为:(1) 在对侧 holder 钩下方 tuck 一段新纱线;(2) 把对侧舌针上的线圈转移到 holder 上(使其成为待下一层再穿的稳定线圈);(3) 向上 roll 旋转 holder 以取到上一层持有的线圈;(4) 把该线圈转移到舌针上;(5–7) 执行 knit——舌针前推抓住 tuck 的新纱线、后撤把纱线拉过 holder 上的线圈与舌针上的线圈,形成新的实心针脚。整个过程如同手工针织者在两根针之间来回移线圈,这里则是在两个 holder 阵列之间移动整层线圈。

低层指令语言(solid knitout)

作者定义了一套人类可读的机器指令,类似 3D 打印的 G-code 或传统针织的 knitout:

  • tuck D Hxy CS:用导纱器沿方向 D 在 holder 钩 Hxy 下 tuck 新纱线;
  • xfer Nx Hxy / xfer Hxy Nx:在舌针与对侧/同侧 holder 钩之间转移线圈;
  • knit Nx Hxy:拉纱线穿过舌针 Nx 与 holder 钩 Hxy 上的线圈;
  • drop Nx:丢弃舌针上的线圈(等价于不带纱的 knit);
  • release B:让床 B 上的保持针松开纱线;
  • roll H*y H*y:旋转 holder,使指定行对齐针床;
  • pause S:暂停并提示用户手动干预。

其中 needle 位置写作床(f/b)加索引(如 f1、b2),holder 位置写作 h 加床与一对索引(如 hf1,2)。当前机器没有 racking(横移)指令。

Augmented Stitch Volumes:体积网格数据结构

作者用 augmented stitch volumes 表示实心针织图案——把每个针脚编码为一个「块(block)」,块上标注纱线几何与机器指令,块的面上标注穿过该面的纱线/线圈信息。这是 Narayanan 等人 [2019] 提出的表面针织 augmented stitch mesh 的直接三维推广。

块类型包括:最基本的 knit 块(做标准实心针脚)、无底部来圈的首层 knit 块、把线圈从一层末尾带到下一层开头的 loop-next-layer 块、把纱线带到下一层开头的 yarn-next-layer 块、收尾用的 drop 块,以及标记纱线起止的 yarn-in/yarn-out 与手动完成的 cast-on/bind-off 块。

块上的程序片段是未调度(unscheduled)的:它们用占位变量(fNx、bHxy 等)书写,指令生成阶段再把这些占位符替换为机器上的具体针/钩位置。

面标注编码连接类型:yarn-in(-y)只能连 yarn-out(+y),wale-loop-in(-l)只能连 wale-loop-out(+l),layer-loop-in(-L)只能连 layer-loop-out(+L),不允许连接的面标为 x(unpairable)。相连的面在块之间诱导出一个有向图,为指令生成提供次序信息。每个面还带有 up 方向,连接时两块的 up 方向必须对齐。

技术细节

指令生成:三趟流程

指令生成算法分三趟:

  1. 调度(schedule):贪心地给每个块分配针、holder 位置并指定方向,同时满足约束——由 y 面相连的块必须调度到相邻针(因而是水平相邻的 holder 钩);由 l 面相连的块必须调度到竖直相邻的 holder 钩;每遇到一个 yarn-next-row 或 yarn-next-layer 块后块方向必须翻转。
  2. 发射(emit):按拓扑序遍历块,把块分配到的针/钩/方向代入其程序片段,发出 solid knitout 指令(Algorithm 1)。拓扑序保证逐层遍历,层内按纱线顺序遍历;处理完常规块后再处理 loop-next-layer 与 drop 块,最后处理 yarn-next-layer 块进入下一层。用优先队列管理(默认优先级:yarn-next-layer=0 最低,drop=1,loop-next-layer=2,其他块=3)。
  3. 分组(group):把指令按「趟(pass)」重排以提高效率,例如一行 knit 先做完所有 tuck,再做针到 holder 的 xfer,再做 holder 到针的 xfer,最后统一 knit;这也让 drop 能在针上没有其他线圈时执行。

可织性前置条件

指令生成假设 stitch volume 满足三条约束:

\[ \begin{aligned} &\text{(1) 每个 pairable 面必须连到一个互补类型的面;}\\ &\text{(2) 块的有向图必须无环;}\\ &\text{(3) 图案必须由单根纱线构成。} \end{aligned} \]

前两条保证拓扑有效(不会出现闭合纱环),任何可织图案都必须满足;第三条源于当前机器只有单个导纱器,未来多导纱器机器或手工针织可放宽。设计工具中:条件 1 由构造保证(只允许兼容面相连);条件 2 用 Kahn 算法做环检测并对发现的环告警;条件 3 归结为检查图案恰好用一个 begin-yarn 块和一个 end-yarn 块。

设计工具

作者实现了基于块拼接的交互式设计工具:界面会把块吸附到兼容面上自动建立连接,可隔离单层以便局部编辑,然后按上述方法生成机器指令。作者刻意选择「积木式手动拼图」而非 3D 打印切片那样的自动图案生成,是为了充分利用当前机器有限的层尺寸(3 针 × 8 行)。用户可查看调度器分配给每块的针/holder 位置,并可修改块的优先级或指定偏移,让某块指令延后到更晚的层发出——这对调度 drop 指令尤其有用。

机器机械设计与尺寸约束

机器由钢/铝钣金件、铝机加工件及现成机电元件构成。每根针由一个 42SHD4404-24 双极步进电机经丝杠驱动。holder 的左右两半各作为一个整体由步进电机经蜗轮蜗杆和丝杠控制:反向转动改变两半间距实现开合,同向转动实现 racking(横移)。控制器为 Arduino Mega 2560 兼容板配 DRV8825 驱动。

当前原型每床仅 3 根舌针(course 方向最多 3 针)。每个 holder 有 18 个钩,但因旋转范围的机械限制只有 9 个可用(从底部第 3 到第 11 个),由于末行活动线圈要作下一层首行,这 9 个钩最多形成 8 行稳定线圈;又因首层与加行层各多占一行,立方体情形下原型最多织 7 行。层数不受限制。

首行 cast-on 与末行 bind-off 需手动干预完成(图 9);注意只有首行需要这种稳定化,首层其余针脚会自动稳定。

实验结果

作者用棱柱类样例验证软硬件(图 14):

  • 短矩形棱柱:3 针 × 3 行 × 8 层(用旧版 solid knitout 手写指令);
  • 三角棱柱:3 针、9 层,从 6 行底层递减到 1 行顶层(靠在奇数层丢弃末行针脚实现,部分指令手动修改);
  • 长矩形棱柱:3 针 × 3 行 × 20 层(指令全自动生成)。

控制软件把指令分组成 pass,逐 pass 发送,每 pass 后暂停让操作者检查。这种检查很必要,因为机器常出现需人工修复的机械错误——作者记录的 342 个 pass 中有 180 个出错,约 53% 的 pass 发生机械错误(每个 pass 通常含若干指令)。

针脚尺寸方面:设计工具把针脚当作长宽高比 2.25(course):1.125(wale):1(layer)的立方体,依据是手工织的 8×8×8 立方体量得 54mm×27mm×24mm。机器织的 3×3×8 立方体量得 34mm×20mm×41mm,比例约 2.2:1.3:1,接近手工样本;作者指出要精确复现形状仍需像传统针织那样先织张力样片(gauge swatch)。

贡献与局限

贡献:开创了实心针织这一全新的体积织造工艺,用单根纱线做出无需黏合剂、可拆解回收重织的致密三维物体;给出可运行的原型机器(核心创新是持有整层线圈的二维 holder 钩阵列);提出 augmented stitch volumes 体积网格数据结构与配套的三趟指令生成/调度算法;提供交互式积木设计工具。

局限与未来工作

  • 机械可靠性差:约 53% 的 pass 出错,最常见的是针与 holder 钩之间转移线圈失败,根因是纱线弹性导致行末线圈形状差异大,目前靠调固件参数缓解,长期需靠机械改进使线圈形状一致。
  • 张力控制靠手动:需引入类似传统针织机的弹簧/电机张力机构。
  • 形状能力有限:当前只能做 cuboid 和 prism。作者把形状分为 cuboid、prism、pyramid、forked 四类;pyramid 必须同时改变每行针数与每层行数,需要 racking(横移);forked 形状(在 wale 或 layer 方向分叉)需要多个导纱器,而原型只有一个。
  • shaping 技术尚不成熟:增/减针、short rows/short layers 等塑形手段目前难以稳定实现,且会加剧线圈形状不一致。
  • 材料受限:转移线圈时纱线被拉伸到原长数倍,故必须用弹性绳(3mm 的 Kintenma Woolly Rubber),弹性也帮助线圈留在钩上;未来需支持更多材料与尺度。
  • 理论开放问题:stitch volumes 可视为规则六面体网格,引入塑形会引入奇异点(singularity),其可网格化条件是活跃研究方向;但实心针织的面兼容性约束比一般六面体网格更严,奇异点结构可能更简单,值得研究。

作者的长远愿景是让实心针织成为可持续的 3D 打印技术:织好的椅子可拆成纱线重织成桌子;若这类机器成为基础设施,甚至可以「传输物体的数据而非物体本身」——搬家者拆掉前住户的实心针织家具,按数据重织成自己的家具。本文只是迈向该愿景的第一步。