## 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
Barcelona, 2009-05-16