code: def from_poppy_creature(cls, poppy, motors, passiv, tip,
                              reversed_motors=[]):
          
          chain_elements = get_chain_from_joints(poppy.urdf_file,
                                                 [m.name for m in motors])
  
          activ = [False] + [m not in passiv for m in motors] + [True]
  
          chain = cls.from_urdf_file(poppy.urdf_file,
                                     base_elements=chain_elements,
                                     last_link_vector=tip,
                                     active_links_mask=activ)
  
          chain.motors = [getattr(poppy, l.name) for l in chain.links[1:-1]]
  
          for m, l in zip(chain.motors, chain.links[1:-1]):
              # Force an access to angle limit to retrieve real values
              # This is quite an ugly fix and should be handled better
              m.angle_limit
  
              bounds = m.__dict__['lower_limit'], m.__dict__['upper_limit']
              l.bounds = tuple(map(rad2deg, bounds))
  
          chain._reversed = array([(-1 if m in reversed_motors else 1)
                                   for m in motors])
  
          return chain
docs: Creates an kinematic chain from motors of a Poppy Creature.
  
              :param poppy: PoppyCreature used
              :param list motors: list of all motors that composed the kinematic chain
              :param list passiv: list of motors which are passiv in the chain (they will not move)
              :param list tip: [x, y, z] translation of the tip of the chain (in meters)
              :param list reversed_motors: list of motors that should be manually reversed (due to a problem in the URDF?)