Beispiel #1
0
def create_default_randomizer_qbb() -> DomainRandomizer:
    """
    Create the default randomizer for the `QBallBalancerSim`.

    :return: randomizer based on the nominal domain parameter values
    """
    from pyrado.environments.pysim.quanser_ball_balancer import QBallBalancerSim
    dp_nom = QBallBalancerSim.get_nominal_domain_param()
    return DomainRandomizer(
        NormalDomainParam(name='g', mean=dp_nom['g'], std=dp_nom['g']/10, clip_lo=1e-4),
        NormalDomainParam(name='m_ball', mean=dp_nom['m_ball'], std=dp_nom['m_ball']/5, clip_lo=1e-4),
        NormalDomainParam(name='r_ball', mean=dp_nom['r_ball'], std=dp_nom['r_ball']/5, clip_lo=1e-3),
        NormalDomainParam(name='l_plate', mean=dp_nom['l_plate'], std=dp_nom['l_plate']/5, clip_lo=5e-2),
        NormalDomainParam(name='r_arm', mean=dp_nom['r_arm'], std=dp_nom['r_arm']/5, clip_lo=1e-4),
        NormalDomainParam(name='K_g', mean=dp_nom['K_g'], std=dp_nom['K_g']/4, clip_lo=1e-2),
        NormalDomainParam(name='J_l', mean=dp_nom['J_l'], std=dp_nom['J_l']/4, clip_lo=1e-6),
        NormalDomainParam(name='J_m', mean=dp_nom['J_m'], std=dp_nom['J_m']/4, clip_lo=1e-9),
        NormalDomainParam(name='k_m', mean=dp_nom['k_m'], std=dp_nom['k_m']/4, clip_lo=1e-4),
        NormalDomainParam(name='R_m', mean=dp_nom['R_m'], std=dp_nom['R_m']/4, clip_lo=1e-4),
        UniformDomainParam(name='eta_g', mean=dp_nom['eta_g'], halfspan=dp_nom['eta_g']/4, clip_lo=1e-4, clip_up=1),
        UniformDomainParam(name='eta_m', mean=dp_nom['eta_m'], halfspan=dp_nom['eta_m']/4, clip_lo=1e-4, clip_up=1),
        UniformDomainParam(name='B_eq', mean=dp_nom['B_eq'], halfspan=dp_nom['B_eq']/4, clip_lo=1e-4),
        UniformDomainParam(name='c_frict', mean=dp_nom['c_frict'], halfspan=dp_nom['c_frict']/4, clip_lo=1e-4),
        UniformDomainParam(name='V_thold_x_pos', mean=dp_nom['V_thold_x_pos'], halfspan=dp_nom['V_thold_x_pos']/3),
        UniformDomainParam(name='V_thold_x_neg', mean=dp_nom['V_thold_x_neg'], halfspan=abs(dp_nom['V_thold_x_neg'])/3),
        UniformDomainParam(name='V_thold_y_pos', mean=dp_nom['V_thold_y_pos'], halfspan=dp_nom['V_thold_y_pos']/3),
        UniformDomainParam(name='V_thold_y_neg', mean=dp_nom['V_thold_y_neg'], halfspan=abs(dp_nom['V_thold_y_neg'])/3),
        UniformDomainParam(name='offset_th_x', mean=dp_nom['offset_th_x'], halfspan=6./180*np.pi),
        UniformDomainParam(name='offset_th_y', mean=dp_nom['offset_th_y'], halfspan=6./180*np.pi)
    )
def create_default_randomizer_qbb() -> DomainRandomizer:
    """
    Create the default randomizer for the `QBallBalancerSim`.

    :return: randomizer based on the nominal domain parameter values
    """
    from pyrado.environments.pysim.quanser_ball_balancer import QBallBalancerSim

    dp_nom = QBallBalancerSim.get_nominal_domain_param()
    return DomainRandomizer(
        NormalDomainParam(name="gravity_const",
                          mean=dp_nom["gravity_const"],
                          std=dp_nom["gravity_const"] / 10,
                          clip_lo=1e-4),
        NormalDomainParam(name="ball_mass",
                          mean=dp_nom["ball_mass"],
                          std=dp_nom["ball_mass"] / 5,
                          clip_lo=1e-4),
        NormalDomainParam(name="ball_radius",
                          mean=dp_nom["ball_radius"],
                          std=dp_nom["ball_radius"] / 5,
                          clip_lo=1e-3),
        NormalDomainParam(name="plate_length",
                          mean=dp_nom["plate_length"],
                          std=dp_nom["plate_length"] / 5,
                          clip_lo=5e-2),
        NormalDomainParam(name="arm_radius",
                          mean=dp_nom["arm_radius"],
                          std=dp_nom["arm_radius"] / 5,
                          clip_lo=1e-4),
        NormalDomainParam(name="gear_ratio",
                          mean=dp_nom["gear_ratio"],
                          std=dp_nom["gear_ratio"] / 4,
                          clip_lo=1e-2),
        NormalDomainParam(name="load_inertia",
                          mean=dp_nom["load_inertia"],
                          std=dp_nom["load_inertia"] / 4,
                          clip_lo=1e-6),
        NormalDomainParam(name="motor_inertia",
                          mean=dp_nom["motor_inertia"],
                          std=dp_nom["motor_inertia"] / 4,
                          clip_lo=1e-9),
        NormalDomainParam(name="motor_back_emf",
                          mean=dp_nom["motor_back_emf"],
                          std=dp_nom["motor_back_emf"] / 4,
                          clip_lo=1e-4),
        NormalDomainParam(name="motor_resistance",
                          mean=dp_nom["motor_resistance"],
                          std=dp_nom["motor_resistance"] / 4,
                          clip_lo=1e-4),
        UniformDomainParam(
            name="gear_efficiency",
            mean=dp_nom["gear_efficiency"],
            halfspan=dp_nom["gear_efficiency"] / 4,
            clip_lo=1e-4,
            clip_up=1,
        ),
        UniformDomainParam(
            name="motor_efficiency",
            mean=dp_nom["motor_efficiency"],
            halfspan=dp_nom["motor_efficiency"] / 4,
            clip_lo=1e-4,
            clip_up=1,
        ),
        UniformDomainParam(
            name="combined_damping",
            mean=dp_nom["combined_damping"],
            halfspan=dp_nom["combined_damping"] / 4,
            clip_lo=1e-4,
        ),
        UniformDomainParam(name="ball_damping",
                           mean=dp_nom["ball_damping"],
                           halfspan=dp_nom["ball_damping"] / 4,
                           clip_lo=1e-4),
        UniformDomainParam(name="voltage_thold_x_pos",
                           mean=dp_nom["voltage_thold_x_pos"],
                           halfspan=dp_nom["voltage_thold_x_pos"] / 3),
        UniformDomainParam(
            name="voltage_thold_x_neg",
            mean=dp_nom["voltage_thold_x_neg"],
            halfspan=abs(dp_nom["voltage_thold_x_neg"]) / 3,
        ),
        UniformDomainParam(name="voltage_thold_y_pos",
                           mean=dp_nom["voltage_thold_y_pos"],
                           halfspan=dp_nom["voltage_thold_y_pos"] / 3),
        UniformDomainParam(
            name="voltage_thold_y_neg",
            mean=dp_nom["voltage_thold_y_neg"],
            halfspan=abs(dp_nom["voltage_thold_y_neg"]) / 3,
        ),
        UniformDomainParam(name="offset_th_x",
                           mean=dp_nom["offset_th_x"],
                           halfspan=6.0 / 180 * np.pi),
        UniformDomainParam(name="offset_th_y",
                           mean=dp_nom["offset_th_y"],
                           halfspan=6.0 / 180 * np.pi),
    )