go back

pollen robotics

I wrote my second bachelor's thesis at Pollen Robotics, where I explored how Reachy 2 could automatically move its torso from table height down to the floor.

Reachy already had three manually-adjusted rails between its torso and holonomic base. My job was to work out what should replace them and then expose the practical problems via a simple kinematic and dynamic analysis.

problem

I started with the arm geometry rather than a mechanism to set some targets on elevation range and stationary floor workspace. If the arm is straight, its ground reach is

r(zee)=larm2(zee+ltorso)2.r(z_{ee}) = \sqrt{l_{\mathrm{arm}}^2 - (z_{ee} + l_{\mathrm{torso}})^2}.

Here's the diagram visualizing these values. I used it to find the lowest torso height that gave both arms a useful ground workspace. The resulting mechanism needed a 616mm616\,\mathrm{mm} stroke and ±30\pm 30^\circ of pitch while supporting Reachy's upper body. Pollen also wanted the full movement to take at most 10 seconds.

mechanisms

I designed seven candidate architectures, including telescopic columns, Stewart platforms and several folding legs. I scored each one against 13 weighted criteria with the Pollen engineers: load capacity and adjustment range, but also weight, cost, noise, repairability and how neatly it fit Reachy's existing body.

The folding mechanism was best, using two planar closed-loop chains that folded into each other, giving the torso vertical movement and pitch.

kinematics

To make the closed mechanism easier to study, I first reduced it to a three-link serial chain. Its end-effector pose was

xee=l1cosθ1+l2cos(θ1+θ2)+l3cos(θ1+θ2+θ3),zee=l0+l1sinθ1+l2sin(θ1+θ2)+l3sin(θ1+θ2+θ3),ϕee=θ1+θ2+θ3.\begin{aligned} x_{ee} &= l_1\cos\theta_1 + l_2\cos(\theta_1+\theta_2) + l_3\cos(\theta_1+\theta_2+\theta_3), \\ z_{ee} &= l_0 + l_1\sin\theta_1 + l_2\sin(\theta_1+\theta_2) + l_3\sin(\theta_1+\theta_2+\theta_3), \\ \phi_{ee} &= \theta_1+\theta_2+\theta_3. \end{aligned}

I used inverse kinematics and the Jacobian relation x˙=J(θ)θ˙\dot{\mathbf{x}} = J(\boldsymbol{\theta})\dot{\boldsymbol{\theta}} to map a 10 second trapezoidal motion profile into joint movement. I then checked the trajectory at 0°, 15° and 30° pitch. The links stayed away from their fully folded and extended singularities, although pitching at the lowest height pushed part of the linkage below the nominal base mounting plane.

loads

For a first-order load estimate, I modelled the links as uniform rigid bodies and the 40.77kg40.77\,\mathrm{kg} upper-body load as a point mass. The total joint torque was split into gravity and inertia:

τ=JCOMTFg+τin.\boldsymbol{\tau} = J_{\mathrm{COM}}^\mathsf{T}\mathbf{F}_g + \boldsymbol{\tau}_{\mathrm{in}}.

At zero pitch, the peak absolute joint torques were [3.45, 143.25, 0.02]Nm[3.45,\ 143.25,\ 0.02]\,\mathrm{Nm}. In the worst case at 30° pitch they increased to [22.45, 198.91, 37.14]Nm[22.45,\ 198.91,\ 37.14]\,\mathrm{Nm}. Acceleration only caused short spikes whereas gravity on the second joint dominated the load.

design direction

That result changed the problem from finding a large enough motor to avoiding the load in the first place. I proposed a parallelogram closed chain to keep the torso plate level and share torque across multiple actuators, plus two spring-assisted joints.

For an ideal zero-free-length spring, the required stiffness is k=mgL/(h1h2)k = mgL/(h_1h_2). The initial geometry put both springs in roughly the 5510kN/m10\,\mathrm{kN/m} range. The exact values depend on the final packaging, but the direction was clear: use the closed linkage to manage pitch, compensate most of the static load mechanically, then size rotary or linear actuators for movement rather than for continuously holding up Reachy's torso.

I stopped at CAD and simulation, so the next step would be detailed packaging and a physical prototype.