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