OK, I couldn’t resist. Tweaking a few lines of code wrapped a knurl around emmitt’s Gear Bearing for enhanced griptivity:

That image has desaturated red to suppress the camera’s red burnout. It looks better in the realm of pure math:

Reducing the tolerance parameter to 0.4 produced a surprisingly rigid, yet freely turning, bearing that required no cleanup: it popped off the plate ready to roll!
The heavy lifting in the OpenSCAD source code remains emmitt’s work. I replaced the outer cylinder with a knurl and simplified his monogram to stand out better amid the diamonds. This is the affected section:
... snippage ... translate([0,0,T/2]){ difference(){ // cylinder(r=D/2,h=T,center=true,$fn=100); render(convexity=10) translate([0,0,-T/2]) knurl(k_cyl_hg=T, k_cyl_od=D, knurl_wd=5.0, knurl_hg=5.0, knurl_dp=0.5, e_smooth=5.0/2); herringbone(nr,pitch,P,DR,-tol,helix_angle,T+0.2); // difference(){ translate([0,-(D/2+4.5),0])rotate([90,0,0])monogram(h=10); // cylinder(r=D/2-0.25,h=T+2,center=true,$fn=100); // } } rotate([0,0,(np+1)*180/ns+phi*(ns+np)*2/ns]) difference(){ mirror([0,1,0]) herringbone(ns,pitch,P,DR,tol,helix_angle,T); cylinder(r=w/sqrt(3),h=T+1,center=true,$fn=6); } for(i=[1:m])rotate([0,0,i*360/m+phi])translate([pitchD/2*(ns+np)/nr,0,0]) rotate([0,0,i*ns/m*360/np-phi*(ns+np)/np-phi]) render(convexity=10) herringbone(np,pitch,P,DR,tol,helix_angle,T); }
I also added a few render(convexity=n)
operations to improve the preview, but that’s just cosmetic.