docs: 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