Limit surface for barbell
(see Mason, M.T., Mechanics of Robotic Manipulation, pp 134–139.  Adapted from S. Goyal et al.,"Planar sliding with dry friction", Wear 143, pp 307–330, 1991.)

Created 3 quicktime files:
LS4:  Viewpoint 0,-2,0, matches text Figure 6.15b
LS5:  Viewpoint 6,2,3, matches text Figure 6.15a
LS6:  Viewpoint 6,2,3 initial, y coord dropping at rate .1 per frame

initv[] := {vx = 6.0;  vy  =  2.0;  vz  =  3.0}

adjv[] := {vx += dvx; vy += dvy; vz += dvz}

dvx =  .0; dvy = - .1; dvz = 0.0

\(initv[]; 
    Do[adjv[]; 
      Show[{ParametricPlot3D[{Cos[theta] + Cos[phi], Sin[theta] + Sin[phi], \ 
              Cos[theta] - Cos[phi]}, \ {theta, 0, 
              2  Pi}, \ 
DisplayFunction -> 
              Identity
], 
Table[
            ParametricPlot3D[{Cos[theta] + Cos[pphi], Sin[theta] + Sin[pphi], 
                Cos[theta] - Cos[pphi]}, {pphi, 0, 
                phi}, 
DisplayFunction -> 
                Identity], 
{theta, 0, Pi, 
              Pi/10}]
}, 
PlotRange -> {{\(-4\), 4}, {\(-4\), 4}, {\(-4\), 
              4}}, 
DisplayFunction -> $DisplayFunction, 
Axes -> True, 
        AxesLabel -> {"fx", "fy", "nz"}, 
AxesEdge -> {{\(-1\), \(-1\)}, {\(-1\), \(-1\)}, {\(-1\), \(-1\)}}, 
Boxed -> 
          False, 
ViewPoint -> {vx, vy, 
            vz}], 
{phi, 0, Pi, 
        Pi/20}];\)
\(\(\(Do[adjv[]; 
      Show[{ParametricPlot3D[{Cos[theta] + Cos[phi], Sin[theta] + Sin[phi], \ 
              Cos[theta] - Cos[phi]}, \ {theta, 0, 
              2  Pi}, \ 
DisplayFunction -> 
              Identity
], 
Table[
            ParametricPlot3D[{Cos[theta] + Cos[pphi], Sin[theta] + Sin[pphi], 
                Cos[theta] - Cos[pphi]}, {pphi, 0, 
                Pi}, 
DisplayFunction -> 
                Identity], 
{theta, 0, Pi, 
              Pi/10}], 
Table[
            ParametricPlot3D[{Cos[theta] + Cos[pphi], Sin[theta] + Sin[pphi], 
                Cos[theta] - Cos[pphi]}, {pphi, Pi, 
                phi}, 
DisplayFunction -> 
                Identity], 
{theta, Pi, 2  Pi, 
              Pi/10}]
}, 
PlotRange -> {{\(-4\), 4}, {\(-4\), 4}, {\(-4\), 
              4}}, 
DisplayFunction -> $DisplayFunction, 
Axes -> True, 
        AxesLabel -> {"fx", "fy", "nz"}, 
AxesEdge -> {{\(-1\), \(-1\)}, {\(-1\), \(-1\)}, {\(-1\), \(-1\)}}, 
Boxed -> 
          False, 
ViewPoint -> \ {vx, vy, 
            vz}], 
{phi, Pi, 2  Pi, 
        Pi/20}]\)\(
\)\(
\)
    \)\)