[python] Re: Lean disturbances (and Dirk's code)

  • From: mtb@xxxxxxx
  • To: python@xxxxxxxxxxxxx
  • Date: Sun, 27 Feb 2005 22:22:29 -0800

I was trying to figure out how much centering force there is and so tried calculate some of the pivot forces directly. I read Dirk's code for a bit, but realized how rusty my matrix math is. Next, I tried to do something similar to his charts on:
http://dirkb.dnsalias.net/pythonselfcenter.html
using just x-z plane geometry. It seems to be correct for the angle limits etc., but disagrees with Dirk's for high turn angles. If anyone can critique it, please do. Basically, for any given pivot angle, I calculate the x-z point for the given turn angle. I don't quite see where Dirk used the wheel radius.


The objective was to then subtract the force of the front mass falling from the force needed to raise the rear mass. If correct, it seems from this math that once you put your feet on the pedals the front mass fall could ~balance the rear rise.
I need to add in lean and review Hand's thesis again as well...


Code below, cluttered diagram attached.

Ray

===============================================

trlP2Rear = 110
trlP2Front = -10     ## trail
pivotAngle = 30  * math.pi / 180.0 # deg from vertical
turnAngle = 30  * math.pi / 180.0
rearMassZ = 30
rearMassX = 100
frontMassZ = 40
frontMass2PivotAxis = 20

trlP2Front = -trlP2Front  # I use opposite sign

d1 = math.sin(pivotAngle)*trlP2Front
d2 = math.cos(pivotAngle)*d1

d4 = trlP2Front*math.cos(pivotAngle)


## good for pivot rise if trlP2Rear >> trlP2Front, rule of small angles rise = d2*abs(1-math.sin(turnAngle+math.pi/2.))

if pivotAngle==0: pivotAngle = .00000000001
d5 = rise/math.tan(pivotAngle)

rearFrameRiseAngle = math.atan(rise / (trlP2Rear+trlP2Front-d5))

rearMassHyp = (rearMassZ**2+rearMassX**2)**.5
rearMassAngle = math.asin(rearMassZ/rearMassHyp)
rearMassRise = math.sin(rearMassAngle+rearFrameRiseAngle)* \
                rearMassHyp - rearMassZ

frontMassX = ((trlP2Rear + math.cos(pivotAngle)*\
                    frontMass2PivotAxis*math.cos(turnAngle))**2 +\
            frontMassZ**2)**.5
frontMassHyp = (frontMassZ**2+frontMassX**2)**.5
frontMassAngle = math.asin(frontMassZ/frontMassHyp)

frontMassFall = frontMass2PivotAxis*math.sin(turnAngle)* \
math.sin(pivotAngle) - math.sin(rearFrameRiseAngle)*frontMassHyp


print "riseAngle: %fdeg,   mass rise: %fcm" % \
                (rearFrameRiseAngle*180/math.pi, rearMassRise)
print "frontMassFall: %fcm" % (frontMassFall)


OUTPUT: riseAngle: 0.279327deg, mass rise: 0.487159cm frontMassFall: 4.331108cm

Attachment: pivot.jpg
Description: JPEG image

Other related posts: