I’ve been discussing our latest thrust vectoring ideas with Andrew & Josef and we’ve sort picked the “ball” shape exhaust and got some basic design.

Then I’ve kept working on it even more hours and this is how it looks now.

Main changes are that the funnel part is now outside the intake and also you can see a new platform for a servo which will be directly steering the funnel.
I took one more image while enabling transparency for that funnel so all that setup is more obvious.

To get this, the code is not that crazy.
use <ShortCuts.scad>
use <edf_shared.scad>
//Sphere-based vector thrust exhaust
module axel_flexes_cutout() {
T(6.3,40,5) Rx(90)
minkowski() {
cube([.1,11,5], center = true);
cylinder(3,.3,.3);
}
T(-6.3,40,5) Rx(90)
minkowski() {
cube([.1,11,5], center = true);
cylinder(3,.3,.3);
}
R(-90)Tz(40)
difference(){
cylinder(5, 6.7, 6.7, center = true);
cylinder(5.1, 6, 6, center = true);
T(0,-7,0)cube(15, center = true);
}
}
module inner_part() {
//cable holder
difference() {
Rx(-2)
T(0, -39, 21)
TubeSimple(25, 6, 6, 1);
T(0, -30, 17)
cube([12,10,61], center = true);
T(0, -40, 48)
cube([13,13,2], center = true);
}
//Tube
Tz(17) {
TubeSimple(3, 36.2, 34.5, 1.8);
TubeSimple(30, 36.2, 36.2, 1.8);
}
difference() {
union() {
difference() {
sphere(40);
sphere(40 - 1.5);
cylinder(40, 34.4, 34.4, center = false);
}
}
//outlet cutout
difference() {
Tz(-42)
scale([0.45,3,0.555])
sphere(60);
}
//top axel cutout
R(90)
Tz(40)
cylinder(5, 2.6, 2.6, center = true);
axel_flexes_cutout();
}
//axels
axel( 40, 6.1, 6, true); //upper axel
axel(-40, 6.1, 6, false); //bottom axel
}
module outer_solid(dm, diff) {
//main bowl
sphere(dm);
//exhoust
Rx(180)Tz(5)
scale([0.9,1.4,1])
cylinder(65+diff/2, 27-diff/2, 20-diff/2, center = false);
}
module axel(tz, flexIn, flexOut, hole) {
difference() {
Rx(90)Tz(tz)
cylinder(2, flexIn, flexOut, center = true);
r = tz > 0 ? 8 : -8;
tz2 = tz > 0 ? tz+7.8 : tz-7.8;
if (hole) {
//servo gear hole
Rx(90)
Tz(tz-1) {
difference() {
cylinder(9, 2.5, 2.5, center = true);
n=12;
for(w=[0:360/n:359])
Rz(w)
Tx(2.5)
cylinder(9.2, 0.4, 0.4, center = true);
}
}
}
}
}
module servo_clamp() {
//servo clamp
difference() {
intersection() {
difference() {
T(0, -36, -28)
R(90,90,0)
minkowski() {
cube([75,13,21], center = true);
cylinder(1, center=true);
}
//Main axel hole
Rx(90)Tz(40)
cylinder(20, 6.1, 6.1, center = true);
//Side axel hole
Rx(90)T(0, -6, 40)
cylinder(20, 2.8, 2.8, center = true);
T(0, -47, -5)
cube([12,3,24], center = true);
}
//rudder
R(-15.5,0,180)
T(0,22,-12)
scale([.13, .3, .7])
sphere(100);
}
R(15.5,8,180)
T(20,22,-30)
scale([.13, .3, .7])
sphere(100);
R(15.5,-8,180)
T(-20,22,-30)
scale([.13, .3, .7])
sphere(100);
}
}
module outer_part() {
//outer cylinder
Rz(180)
difference() {
union() {
outer_solid(41.5, 0);
servo_clamp();
}
outer_solid(41.5 - 1.5, 2);
T(0, 0, -120)
cube(60, center = true);
//inlet cutout
Tz(45)
scale([1.6,0.8,1])
sphere(60);
//Upper Axel cutout
Rx(90)Tz(-39.5)
cylinder(4.5, 2.8, 2.8, center = true);
//axel holes
Rx(90)Tz(40)
cylinder(3, 6.2, 6.1, center = true);
Rx(90)Tz(-40)
cylinder(3, 6.1, 6.2, center = true);
}
}
// ************************************
// Output Renders
// ************************************
// 1 - full
// 2 - inlet
// 3 - outlet
// 4 - video
$fn = 100;
renderOpt = 4;
if (renderOpt == 1) {
outer_part();
inner_part();
}
if (renderOpt == 2) {
inner_part();
}
if (renderOpt == 3) {
outer_part();
}
//Video settings
if (renderOpt == 4) {
maxTwist = -36;
rot = $t >= 0.5 ? $t*2 - 1 : 1 -$t*2;
inner_part();
R(0, 72*rot + maxTwist, 180)
%outer_part();
$vpt = [-4, -4, -13];
$vpd = 450;
}
The next stage was to print it! It took roughly 4hrs to print each part. It was a quite a mesmerising experience to watch our 3D printer to keep tirelessly printing, so I took a video so you can enjoy a bit of it as well.
Our prints are now much better then before. Mainly I’ve slowed down printing speed to 75% and also increased the nozzle temperature to 250C. That seemed made layers to join together much better, making final print very stable.
And couple days later … voila!

I’ve spent about an hour sanding few leftovers and making sure that servo fits in. Also I’ve used acetone to polish the main gimball and it ended up amazingly awesome!
I took many pictures, so just a selection of those in gallery below.
I also couldn’t wait and had to instantly mount it on our cart.

Last three pictures depict how I am seeing this working.
Last step remains – connect it to our BeagleBoneBlue to see it working. Well, I expect that would have to wait for another day. 🙂
WOW!!!
We are looking forward to seeing you all.
R
Sent from iPhone by “either” Robin or Serge
>
Hello, I agree that it looks sexy but, as we discussed before, you will lose a lot of flow with this design. It may be a good idea to compare the force of the flow when the nozzle is straight to when it’s turning. May be a good idea to also compare the flow rate with the nozzle removed, and maybe with a boring simple rudder. Or maybe work on a nozzle design that will allow the flow to not bump on the inside of the ball. If you find it ok this way ignore my babbling. You may even get some idea from the picture below.
……………………………….. -Sent by “either” Robin or Serge. -Mail may be from; acrohc@me.com, acrohc@iCloud.com or acrohc@yahoo.com They are all valid. -Also, any bad grammar or spelling is due to self correcting!!!
>
To jsem blázen