Equilibria of a Unicycle

This is a very rough attempt at deriving useful conclusions from the equations of motion of a unicycle. It was inspired by my brother's desire to buy one: my brother is large (almost 2 m tall, and around 100 Kg) and I wanted to know how the usual recommendations for beginners (a 20" unicycle) would work for him. Does a large fellow need a large wheel? The equations have turned out to be too complex of me to be able to make much sense out of them. But I haven't lost hope.

Variables

  • \(m\) and \(I\) are mass and inertia moment.
  • Geometry. \(L\): hub to saddle; \(R\): wheel radius; \(r\): crank length.
  • Normal forces: \(N\) is the total normal force. \(S\) is the force in saddle (and hub). \(N_1\) is in the front pedal, \(N_2\) in rear pedal. σ is the proportion of \(N\) that is loaded on the saddle; β is the proportion of the remaining \(N\) that is loaded in the front pedal.
  • Tangential forces. \(T_1\) is in front pedal, \(T_2\) in rear pedal. \(T\) is the tangential force on the wheel.
  • \(x, y\) are the horizontal and vertical displacements of the center of gravity.
  • \(\varphi\) is the rotation of the unicycle with respect to the hub.
  • θ is the rotation of the cranks.

Relationships between variables

In the horizontal axis

\[ x = R\theta + \sin{\varphi} L. \]

In the vertical axis \[ y = L - L\cos{\varphi}, \] so \[ \ddot{y} = \ddot{\varphi}L\sin{\varphi} + \dot{\varphi}^2 L \cos{\varphi}. \] The normal forces are: \[ S = \sigma N, \] \[N_1 = \beta (1-\sigma) N, \] and \[N_2 = (1-\beta)(1-\sigma) N. \]

Equations of motion

Horizontal axis

Equilibrium of the wheel: \[ T_1 \left(R + r \cos{\theta}\right) + T_2\left(R + r \cos(\theta+\pi)\right) + T R = N_1 r \sin{\theta} + N_2 r \sin(\theta + \pi). \] Equation of motion: \[ m \ddot{x} = T_1 + T_2 + T. \]

Vertical axis

\[ m \left(\ddot{y} + g\right) = S + N_1 + N_2. \]

Rotation

\[ -I\ddot{\varphi} = L \sin{\varphi} + T L \cos{\varphi} -N_1 \left(L \sin{\varphi} - r \sin{\theta}\right) -N_2 \left(L \sin{\varphi} - r \sin(\theta + \pi)\right) +T_1 \left(L \cos{\varphi} - r \cos{\theta}\right) +T_2 \left(L \cos{\varphi} - r \cos(\theta + \pi)\right) \]

The sage code

I've used sage to manipulate these equations. This is the code, in case anybody wants to help:

# Mass, g and inertia moment
m, g, I = var('m, g, I')

# Geometry. L: hub to saddle; R: wheel radius; r: crank length
L, R, r = var('L, R, r')

# Normal forces.  S is in saddle (and hub)). N1 is in front pedal, N2
# in rear pedal.  Sigma is the proportion of N that is loaded on the
# saddle; beta is the proportion of the remaining N that is loaded in
# the front pedal.
N, S, N1, N2, sigma, beta = var('N, S, N1, N2, sigma, beta')

# Tangential forces.  T1 is in front pedal, T2 in rear pedal.
T, T1, T2 = var('T, T1, T2')

t = var('t')
phi = function('phi', t)
theta = function('theta', t)

x(t) = theta*R + L*sin(phi)
ddx(t) = diff(x, t, 2)

y(t) = L - L*cos(phi)
ddy(t) = diff(y, t, 2)

S = sigma*N
N1 = beta*(1-sigma)*N
N2 = (1-beta)*(1-sigma)*N

eqT1 = solve((T1*(R + r*cos(theta)) + T2*(R + r*cos(theta+pi)) + T*R
              -N1*r*sin(theta) - N2*r*sin(theta + pi) == 0), T)[0]
eqN = solve((m*(g + ddy(t)) == S + N1 + N2), N)[0]

eqT = (m*ddx(t) == T1 + T2 + T)(T = eqT1.right())
eqT = eqT(N = eqN.right())

eqI = (-I*diff(phi, 2) ==
        -S*L*sin(phi) + T*L*cos(phi)
        -N1*(L*sin(phi) - r*sin(theta))
        -N2*(L*sin(phi) - r*sin(theta + pi))
        +T1*(L*cos(phi) - r*cos(theta))
        +T2*(L*cos(phi) - r*cos(theta + pi)))(T = eqT1.right())
eqI = eqI(N = eqN.right())

# Substitute T1=T2=0 in eqT and eqI, and then edit to replace cos(phi)
# with 1 and sin(phi) with phi.

eqISimp = diff(phi(t), t, 2)*I == ((1 - 2*beta)*r - (1 - 2*beta)*r*sigma)*sin(theta(t))*L*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m)/R - (beta - 1)*(1 - sigma)*(phi(t)*L + r*sin(theta(t)))*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m) + beta*(1 - sigma)*(phi(t)*L - r*sin(theta(t)))*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m) + sigma*phi(t)*L*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m)

eqTSimp = m*(diff(theta(t), t, 2)*R + diff(phi(t), t, 2)*L - phi(t)*diff(phi(t), t, 1)^2*L) == ((1 - 2*beta)*r*sigma - (1 - 2*beta)*r)*sin(theta(t))*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m)/R

#eqISimp = (-diff(phi(t), t, 2)*I == ((beta*r - beta*r*sigma)*sin(theta(t)) - ((1 - beta)*r*sigma + (beta - 1)*r)*cos(theta(t)))*L*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m)/R - beta*(1 - sigma)*(phi(t)*L - r*sin(theta(t)))*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m) + (beta - 1)*(1 - sigma)*(phi(t)*L - r*cos(theta(t)))*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m) - sigma*phi(t)*L*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m))
#eqTSimp = m*(diff(theta(t), t, 2)*R + diff(phi(t), t, 2)*L - phi(t)*diff(phi(t), t, 1)^2*L) == ((beta*r - beta*r*sigma)*sin(theta(t)) - ((1 - beta)*r*sigma + (beta - 1)*r)*cos(theta(t)))*((m*phi(t)*diff(phi(t), t, 2) + m*diff(phi(t), t, 1)^2)*L + g*m)/R

Related

Magnitude — A python library for computing with physical quantities
A Unicycle on a Slope
Datos globales de temperatura
Visual Bayes
Juan Reyero Barcelona, 2009-05-16
 

blog comments powered by Disqus