Now with steering arms at approximately correct ackerman angle.
This commit is contained in:
parent
01d92421cf
commit
d20ecb005a
3 changed files with 29 additions and 15 deletions
|
|
@ -9,12 +9,16 @@ include <BOSL2/std.scad>
|
|||
include <suspension.scad>
|
||||
include <tub.scad>
|
||||
|
||||
wheelbase = 2000;
|
||||
track = 1400;
|
||||
|
||||
ackerman = 90 + atan( wheelbase/( track / 2) );
|
||||
|
||||
tub(fl=1100);
|
||||
|
||||
translate([-900,0,130])
|
||||
suspension();
|
||||
suspension(aa = ackerman);
|
||||
|
||||
translate([1100,0,130])
|
||||
suspension(cst=0);
|
||||
suspension(aa = 0, cst=0);
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ caster_angle = 7;
|
|||
// TODO: should be calculated from hub width and wheel radius?
|
||||
camber_angle = 10;
|
||||
|
||||
module kingpin( h = 300, r = 12.5,
|
||||
module kingpin( aa=0, h = 300, r = 12.5,
|
||||
cmb = camber_angle, cst = caster_angle,
|
||||
al = 100) {
|
||||
kl = h * (1/cos(90 - cmb)) * (1/cos(90 - cst));
|
||||
|
|
@ -44,17 +44,22 @@ module kingpin( h = 300, r = 12.5,
|
|||
camber_offset = aof/tan(90-cmb);
|
||||
caster_offset = 0 - aof/tan(90-cst);
|
||||
|
||||
|
||||
// axle itself
|
||||
translate([caster_offset, al + camber_offset, 0-aof])
|
||||
rotate([ 90, 0, 0])
|
||||
cylinder( h=al, r=r);
|
||||
rotate([ 90, 0, 0])
|
||||
cylinder( h=al, r=r);
|
||||
|
||||
// steering arm
|
||||
translate([caster_offset, camber_offset, 0-aof])
|
||||
rotate([ aa, -90, 0])
|
||||
cylinder( h=al, d=r);
|
||||
|
||||
translate([caster_offset, al, 0-aof])
|
||||
wheel();
|
||||
|
||||
|
||||
wheel();
|
||||
}
|
||||
|
||||
// kingpin();
|
||||
// TODO: still need steering rack and track rods.
|
||||
|
||||
module lug() {
|
||||
difference() {
|
||||
|
|
@ -145,7 +150,7 @@ module wishbone(l, w, skew = 0, is_upper = true) {
|
|||
}
|
||||
}
|
||||
|
||||
module suspension( l = 300, w = 300, h = 300,
|
||||
module suspension( aa = 7, l = 300, w = 300, h = 300,
|
||||
track = 1400, hub_width = 135, wheel_diameter=600,
|
||||
cmb=camber_angle, cst=caster_angle) {
|
||||
subframe(l,w,h);
|
||||
|
|
@ -187,11 +192,11 @@ module suspension( l = 300, w = 300, h = 300,
|
|||
|
||||
translate([caster_offset/2,
|
||||
wishbone_length + (stock_section * 4), 0])
|
||||
kingpin(cst=cst);
|
||||
kingpin(aa=aa, cst=cst);
|
||||
mirror([0,1, 0])
|
||||
translate([caster_offset/2,
|
||||
wishbone_length + (stock_section * 4), 0])
|
||||
kingpin(cst=cst);
|
||||
kingpin(aa=aa, cst=cst);
|
||||
}
|
||||
|
||||
|
||||
// suspesion()
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ a_pillar_y = -400; // y location of face of 'A' pillar
|
|||
bb_height = 274; // internal height of battery box
|
||||
bb_width = 260; // internal width of battery box
|
||||
|
||||
|
||||
/*****************************************************
|
||||
* the 'cowl' is the near-horizontal panel which the
|
||||
* bottom of the windscreen is mounted to. In practice
|
||||
|
|
@ -20,8 +21,8 @@ bb_width = 260; // internal width of battery box
|
|||
* is horizontal.
|
||||
****************************************************/
|
||||
|
||||
// slope of the cowl
|
||||
cowl_angle = -70;
|
||||
// slope of the cowl to horizontal
|
||||
cowl_angle = 20;
|
||||
// maximum height of the cowl (at the A pillar)
|
||||
cowl_height = 450;
|
||||
|
||||
|
|
@ -43,6 +44,10 @@ sill_max_height = bb_height;
|
|||
sill_min_height = 125;
|
||||
sill_width = 150;
|
||||
|
||||
// As nearly as I can measure it, the windscreen angle
|
||||
// of the Citroen C1 is 23.8° to horizontal.
|
||||
windscreen_angle = 24;
|
||||
|
||||
module battery_box_side( floor_length = 1100) {
|
||||
fhl = (floor_length/2);
|
||||
top_hlf = (bb_height * tan(layback_angle_f)) + fhl;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue