docs: def forward_kinematics(self, q):
          """ Computes the homogeneous transformation matrix of the end effector of the chain.
  
          :param vector q: vector of the joint angles (theta 1, theta 2, ..., theta n)
  
          """
          q = numpy.array(q).flatten()
  
          if len(q) != len(self.links):
              raise ValueError('q must contain as element as the number of links')
  
          tr = self.base.copy()
  
          l = []
  
          for link, theta in zip(self.links, q):
              tr = tr * link.get_transformation_matrix(theta)
  
              l.append(tr)
  
          tr = tr * self.tool
          l.append(tr)
          return tr, numpy.asarray(l)