Skip to content

Sensors

BaseSensor

BaseSensor(rate)

Bases: ABC

Base class for all sensors.

Initialize the sensor.

Parameters:

Name Type Description Default
rate float

sensing rate (Hz).

required
Source code in pypolo/sensors/base_sensor.py
def __init__(self, rate: float) -> None:
    r"""Initialize the sensor.

    Args:
        rate (float): sensing rate (Hz).

    """
    assert rate > 0, "`rate` must be positive!"
    self.rate = rate
    self.dt = 1.0 / rate

sense abstractmethod

sense(robot_state, env_state)

Sense the environment.

Parameters:

Name Type Description Default
robot_state ndarray

robot state.

required
env_state TensorMap

environment state.

required

Returns:

Type Description
ndarray

np.ndarray: sensor output of shape (num_obs, ).

Source code in pypolo/sensors/base_sensor.py
@abstractmethod
def sense(
    self,
    robot_state: np.ndarray,
    env_state: TensorMap,
) -> np.ndarray:
    r"""Sense the environment.

    Args:
        robot_state (np.ndarray): robot state.
        env_state (TensorMap): environment state.

    Returns:
        np.ndarray: sensor output of shape (num_obs, ).

    """
    raise NotImplementedError

EnvironmentalSensor

EnvironmentalSensor(rate, noise_scale)

Bases: BaseSensor

Initialize the sensor.

Parameters:

Name Type Description Default
rate float

sensing rate (Hz).

required
noise_scale float

Standard deviation of the Gaussian noise.

required
Source code in pypolo/sensors/environmental_sensor.py
def __init__(self, rate: float, noise_scale: float) -> None:
    r"""Initialize the sensor.

    Args:
        rate (float): sensing rate (Hz).
        noise_scale (float): Standard deviation of the Gaussian noise.

    """
    super().__init__(rate)
    self.noise_scale = noise_scale

sense

sense(robot_state, env_state)

Sense the environment.

Parameters:

Name Type Description Default
robot_state ndarray

robot state.

required
env_state TensorMap

environment state.

required

Returns:

Type Description
ndarray

np.ndarray: sensor output of shape (num_obs, ).

Source code in pypolo/sensors/environmental_sensor.py
def sense(
    self,
    robot_state: np.ndarray,
    env_state: TensorMap,
) -> np.ndarray:
    r"""Sense the environment.

    Args:
        robot_state (np.ndarray): robot state.
        env_state (TensorMap): environment state.

    Returns:
        np.ndarray: sensor output of shape (num_obs, ).

    """
    ground_truth = env_state.get_values(robot_state[0], robot_state[1])
    observation = ground_truth + np.random.normal(0, self.noise_scale)
    assert observation.shape == (len(ground_truth), )
    return observation