# Orientation Problem of a 4-DOF manipulator

As shown in figure, I have a 4-DOF manipulator. I want to control the robot such that the end-effector should always be pointing down no matter where the robot is in the end space. For the orientation problem, I derived the Jacobian matrix, then derived the path equations parameterized with time t, but I am still not sure on how to keep the end-effector pointing downwards all the time. $$w_{x}$$ and $$w_{y}$$ control the end-effector orientation but how can this be implemented? Any help will be greatly appreciated.

• This is not an underactuated manipulator
– 50k4
Jul 20 at 18:37
• The Jacobian matrix dimensions are 6x4. Hence underactuated.
– Zzz
Jul 20 at 19:58
• No, that is not what understated means. See here: en.wikipedia.org/wiki/Underactuation
– 50k4
Jul 20 at 20:43
• Em, it is underactuated.. on cartesian space where end-effector have 6 degrees of freedom (x,y,z,wx,wy,wz) this robot only have 4 joint to control end-effector. Jul 24 at 5:51

If you have derived the 6x4 Jacobian, then using the same approach you should derive the 4x4 Jacobian. In the 4x4 Jacobian you will have the X Y and Z positions, and the only orientation you care about.

The only change you need to do in the kinematic equations, based on which you derive the Jacobian, is to make sure the express the orientation of the end-effector relative to a local Z axis, which rotates with the first motor, and not a fixed global axis. This way you will not have to deal with angle projections and the 4x4 Jacobian will suffice.

• I am only writing the angular velicities of the Jacobian matrix $\begin{bmatrix} w_{x}\\ w_{y}\\ w_{z}\\ \end{bmatrix} = \begin{bmatrix} 0 & sin \theta_{1} & sin \theta_{1} & sin \theta_{1}\\ 0 & -cos\theta_{1} & -cos\theta_{1} & -cos\theta_{1}\\ 1 & 0 & 0 & 0 \end{bmatrix} * \begin{bmatrix} \dot{\theta_1}\\ \dot{\theta_2}\\ \dot{\theta_3}\\ \dot{\theta_4} \end{bmatrix}$ As we can see that the end-effector rotation depends only upon the base frame Z axis $\\w_{z} = \dot{\theta_{1}}$
– Zzz
Jul 21 at 11:05
• I didn't understand what you meant by " is to make sure the express the orientation of the end-effector relative to a local Z axis", is the local z-axis the end-effector z-axis? I mean I derived the homogeneous transformation matrix using the Devavit-Hartenberg method and it has its own specific rules of assigning coordinate frames, i.e. the end-effector Z-axis is perpendicular to the orientation which I want, i.e. the end-effector should always be pointing down.
– Zzz
Jul 21 at 11:12

Ok you already know jacobian is need to map end-effector cartesian velocity into joint angular velocity.

$$\dot\theta=J^{-1}\dot x$$

And I assume, you know how to control the position. For orientation control it similiar to position control but the computation of error it bit tricky. First you need to define what is representation of your end-effector orientation. There are 4 main representation of end-effector orientation which is axis angle, rpy (expanded into 6 types), euler angle (expanded into 6 types) and unit quarternion. Normal jacobian is for axis angle representation. You can take a look example of axis angle orientation error computation on my other answer here.

If you wanna use other representation such euler angle, you need analytical jacobian Ja.

$$J_a = T*J$$ where T is transformation matrix.For more detail you can look at "Robotics motion, planning and control" by B. Siciliano sect 3.7.3 for orientation error and sect 3.6 for analytical jacobian. Or code implementation by Peter Corke on his github here

2. The simple approach

You can see that joint 4 value which control orientation are affected by joint 2 and 3.If you wanna make your system simpler, you can set that joint 4 is not there on forward kinematic & jacobian computation( so you make joint 4 as end-effector not as joint). In this graph, with A are joint 2 value, B joint 3 value, C joint 4 value and brown line is imaginary line, then

$$360^o = 90^o + A + B + C$$ $$C = 270^o - A - B$$

with that you could avoid orientation computation while still control the position of end-effector and keep end-effector point down (or anywhere, you just need to redraw and recompute my graph for your desired orientation)