def compute_sensori_effect(self, m):
        """ This function generates the end effector position at the end of the movement.

        .. note:: The duration of the movement is  1000*self.dt
        .. note:: To use basis functions rather than step functions, set :use_basis_functions: to 1
        """
        if self.use_basis_functions:
            func = simulation.step(m, 1000*self.dt)
        else:
            traj = self.bf.trajectory(m).flatten()
            func = lambda t: traj[int(1000*self.dt * t)]

        states = simulation.simulate(self.n, self.x0, self.dt, func)
        last_state_cartesian = simulation.cartesian(self.n, states[-1])

        end_effector_pos = array([last_state_cartesian[self.n], last_state_cartesian[2*self.n]])
        end_effector_pos += self.noise * random.randn(len(end_effector_pos))
        return end_effector_pos
This function generates the end effector position at the end of the movement.

        .. note:: The duration of the movement is  1000*self.dt
        .. note:: To use basis functions rather than step functions, set :use_basis_functions: to 1