def _goto(self, pose, duration, wait, accurate):
        """ Goes to a given cartesian pose.

            :param matrix pose: homogeneous matrix representing the target position
            :param float duration: move duration
            :param bool wait: whether to wait for the end of the move
            :param bool accurate: trade-off between accurate solution and computation time. By default, use the not so accurate but fast version.

        """

        kwargs = {}
        if not accurate:
            kwargs['max_iter'] = 3

        q0 = self.convert_to_ik_angles(self.joints_position)
        q = self.inverse_kinematics(pose, initial_position=q0, **kwargs)

        joints = self.convert_from_ik_angles(q)

        last = self.motors[-1]
        for m, pos in list(zip(self.motors, joints)):
            m.goto_position(pos, duration,
                            wait=False if m != last else wait)
Goes to a given cartesian pose.

            :param matrix pose: homogeneous matrix representing the target position
            :param float duration: move duration
            :param bool wait: whether to wait for the end of the move
            :param bool accurate: trade-off between accurate solution and computation time. By default, use the not so accurate but fast version.