### BOSL2 sweep help?

BB
Bruno Boettcher
Sun, Mar 10, 2024 2:14 PM

Hello!

i am in the process of building my own pet-tennisball-launcher, and am
playing around with different shapes of friction wheels.

as with the other examples i found, i too am struggling with enough
friction between the rolls and the ball, especially when dealing with
chewed and utterly salivated tennis balls (i have a "deutsche dogge" who is
able to keep the ball in its mouth without you noticing its there, and
she's loving chewing the thing through for hours) ....
So i found one design interesting, which incurvated the wheel around the
ball shape to maximise contact surface...

and that's what i try to achieve, so i reused the last example, and instead
of just linear_extruding it,  (yes, i designed it in 2D ;) ) i begun to
stack it with increasing diameters to fit the ball shape:

``````// Friction Acceleration Wheel for Tennis Ball with Gripping Profile

// Parameters
wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis
ball with diameter of approximately 6.8cm
wheel_thickness = 10; // Thickness of the wheel
shaft_hole_distance = 15; // Distance from the center to the shaft hole
rim_width = 5; // Width of the rim
grip_depth = 1; // Depth of the gripping profile
grip_width = 2; // Width of each gripping ridge
ball_diameter = 68; // Diameter of the tennis ball

//wheel_profile();
%translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, \$fa=.1);
friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 5);

//------------------- modules and other lib stuff
// Create the wheel profile
// 2D profile of the wheel
module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth =
grip_depth,grip_width=grip_width, fn=80) {
assert(num_teeth >0,"use a valid number of teeth's");
// Main wheel body
circle(r=r, \$fn=fn);

// Gripping profile
step = 360/num_teeth;
for (angle = [0:360/num_teeth:360])
{
rotate([0,0,angle])
translate([(r+0.49*grip_depth ) ,0,0 ])
square([grip_depth,grip_width ], center=true);
}
}
// 3D friction wheel snugging to the ball
module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5,
center = false)
{

max_z = h/2;
translate([(center)?-r:0,0,0])
for(z = [-max_z:2*max_z/fn:max_z])
{
delta = r-sqrt(r^2-z^2);
translate([r+grip_depth, 0, z])
wheel_profile(r=ball_diameter/2+delta);
}
}
``````

and now looked for a sweep function....
well i found one in bosl2, but, well... that looks kinda chinese to me :(
so if someone would be kind enough to show me how to put a skin around my
stack of disks?
or tell me what i did wrong in my thought processes

--
ciao
Bruno

BB
Bruno Boettcher
Sun, Mar 10, 2024 4:20 PM

Hello again!

stupid me solved it with plain linear_extrude!

``````// Friction Acceleration Wheel for Tennis Ball with Gripping Profile

// Parameters
wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis
ball with diameter of approximately 6.8cm
wheel_thickness = 10; // Thickness of the wheel
shaft_hole_distance = 15; // Distance from the center to the shaft hole
rim_width = 5; // Width of the rim
grip_depth = 1; // Depth of the gripping profile
grip_width = 2; // Width of each gripping ridge
ball_diameter = 68; // Diameter of the tennis ball

//wheel_profile();
%translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, \$fa=.1);
friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 20);

//------------------- modules and other lib stuff
// Create the wheel profile
// 2D profile of the wheel
module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth =
grip_depth,grip_width=grip_width, fn=80) {
assert(num_teeth >0,"use a valid number of teeth's");
// Main wheel body
circle(r=r, \$fn=fn);

// Gripping profile
step = 360/num_teeth;
for (angle = [0:360/num_teeth:360])
{
rotate([0,0,angle])
translate([(r+0.49*grip_depth ) ,0,0 ])
square([grip_depth,grip_width ], center=true);
}
}
// 3D friction wheel snugging to the ball
module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5,
center = false)
{
max_z = h/2;
step =
2*max_z/fn;  translate([(center)?-r:0,0,0])
for(z = [-max_z:step:max_z-step])
{
delta = r-sqrt(r^2-z^2);
dnext = r-sqrt(r^2-(z+step)^2);
translate([r+grip_depth, 0, z])
linear_extrude(height=step,
scale=(ball_diameter/2+dnext)/(ball_diameter/2+delta))
wheel_profile(r=ball_diameter/2+delta);
}
}
``````

i was so fixated on a sweep function i forgot the basics.... and the result
looks ok:
[image: friction_wheel.png]
i will probably add a taper in and out....

still, a bosl2 based solution, just to learn how that stuff is supposed to
work, would be nice to know! and as usual, if i did something awkward,

ciao
bboett

Am So., 10. März 2024 um 15:14 Uhr schrieb Bruno Boettcher <bboett@gmail.com

:

Hello!

i am in the process of building my own pet-tennisball-launcher, and am
playing around with different shapes of friction wheels.

as with the other examples i found, i too am struggling with enough
friction between the rolls and the ball, especially when dealing with
chewed and utterly salivated tennis balls (i have a "deutsche dogge" who is
able to keep the ball in its mouth without you noticing its there, and
she's loving chewing the thing through for hours) ....
So i found one design interesting, which incurvated the wheel around the
ball shape to maximise contact surface...

and that's what i try to achieve, so i reused the last example, and
instead of just linear_extruding it,  (yes, i designed it in 2D ;) ) i
begun to stack it with increasing diameters to fit the ball shape:

``````// Friction Acceleration Wheel for Tennis Ball with Gripping Profile

// Parameters
wheel_radius = 3.4 + 1.5; // Radius of the wheel, considering a new tennis
ball with diameter of approximately 6.8cm
wheel_thickness = 10; // Thickness of the wheel
shaft_hole_distance = 15; // Distance from the center to the shaft hole
rim_width = 5; // Width of the rim
grip_depth = 1; // Depth of the gripping profile
grip_width = 2; // Width of each gripping ridge
ball_diameter = 68; // Diameter of the tennis ball

//wheel_profile();
%translate([-ball_diameter/2, 0, 0]) sphere(r=ball_diameter/2, \$fa=.1);
friction_wheel(r= ball_diameter/2, h = 2/3*ball_diameter,fn = 5);

//------------------- modules and other lib stuff
// Create the wheel profile
// 2D profile of the wheel
module wheel_profile( r=ball_diameter/2, num_teeth = 36,grip_depth =
grip_depth,grip_width=grip_width, fn=80) {
assert(num_teeth >0,"use a valid number of teeth's");
// Main wheel body
circle(r=r, \$fn=fn);

// Gripping profile
step = 360/num_teeth;
for (angle = [0:360/num_teeth:360])
{
rotate([0,0,angle])
translate([(r+0.49*grip_depth ) ,0,0 ])
square([grip_depth,grip_width ], center=true);
}
}
// 3D friction wheel snugging to the ball
module friction_wheel(r= ball_diameter/2, h = 3/4*ball_diameter,fn = 5,
center = false)
{

max_z = h/2;
translate([(center)?-r:0,0,0])
for(z = [-max_z:2*max_z/fn:max_z])
{
delta = r-sqrt(r^2-z^2);
translate([r+grip_depth, 0, z])
wheel_profile(r=ball_diameter/2+delta);
}
}
``````

and now looked for a sweep function....
well i found one in bosl2, but, well... that looks kinda chinese to me :(
so if someone would be kind enough to show me how to put a skin around my
stack of disks?
or tell me what i did wrong in my thought processes