You have noticed the original actuator used as a neck on Reachy and you wonder how it works ? Here is a presentation of the 3-dof joint developped by Pollen Robotics called Orbita.
On most robots, when many degrees of freedom are needed, it is common to place the motors as a serial system. Another alternative is to make a parallel system which is stronger, more powerful and accurate than a serial system.
Many versions of Orbita have been needed to finally get the version presented below:
The mechanism of Orbita is based on three disks actuated by three motors and gears between the motors and the disks. These disks are connected to three arms which are connected to the end effector through three points. When the disks rotate, they make the effector rotate too, thanks to the arms.
The motors used in Orbita are Maxon DC motors which allow us to have a powerful actuator (1Nm at the end effector for a 60 rpm speed) compared to the size and the accuracy of the motors (16mm of diameter and a very low backlash).
Magnetic encoders have been placed at the bottom of the motors, on their shafts to have a feedback of the rotation speed and to allow us to control their angular position.
To reduce backlash between the different parts of the actuator and have a more accurate system, every revolute joint has been designed with two ball-bearings on the same axis to get a perfect revolute joint.
To minimise the friction during the rotation of the disks, ball-bearings have also been placed between each disk.
Since the mechanical design has been explained, you may want to know how to make the platform rotate as we want by actuating the disks.
First, you need to visualise Orbita’s end effector as a platform with its own X,Y,Z frame and three points connected to the arms. The platform’s frame depend on the global frame X0, Y0, Z0. The arm rotate around the platform (blue, red and green circles on the schema) and are connected to the disks (making a rotation on the black circle).
To control the rotation of the platform, we actually want to control its frame so we need to find the X, Y and Z vectors of the platform’s frame oriented as we want. This can be calculated with the product of a transformation matrix with the X0, Y0 and Z0 vectors but it is not always easy to visualise the matrix needed to make the rotation we want. The other solution is to calculate a quaternion representing the rotation we want and use it on the vectors of the global frame to get the effector’s frame.
Once the X, Y and Z vectors have been calculated, the arm’s angular positions can be found, then the disks’ angular position needed to get the effector oriented can be calculated. When we get the angular position of the disks (i, j and k on the schema), we just need to control the position of the motors.
To control the position of the motors, the magnetic coders have been connected to Luos modules (https://luos.io/).
Thanks to that, we just had to configure some values like the encoder resolution, the gears reduction and the PID desired. After that, the desired angular position is sent to the module which controls the motor to get the goal position.
We have tried several uses of Orbita, like playing drums or xylophone, head dancing, control it with an IMU on a non motorised version…
You can find all the videos of the different versions and testing done during the development of Orbita here :