MMT TE Modeling Reproduction

Reproduce the analytical equation surface from MMT_TEModeling.

The script implements the numbered equation groups from Yang et al., A modelling approach for kinematic equivalent mechanism and rotational transmission error of RV reducer. The included command-line entry point runs a small RV-80E demonstration with transparent equivalent-error values.

The demo is an executable equation-chain check, not a claim of exact figure reproduction. Exact figure reproduction requires the reducer-specific cycloidal contact geometry and measured component errors for every sample.

class scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.ReducerParameters(z1=10, z2=38, z4=39, z5=40, module_mm=1.75, pressure_angle_rad=0.3490658503988659, pin_pitch_radius_mm=77.5, crank_eccentricity_mm=1.5, pin_radius_mm=4.0)[source]

Bases: object

Store fixed reducer geometry for the analytical model.

Parameters:
  • z1 (int)

  • z2 (int)

  • z4 (int)

  • z5 (int)

  • module_mm (float)

  • pressure_angle_rad (float)

  • pin_pitch_radius_mm (float)

  • crank_eccentricity_mm (float)

  • pin_radius_mm (float)

z1

Sun gear tooth count.

Type:

int

z2

Planetary gear tooth count.

Type:

int

z4

Cycloidal gear tooth count.

Type:

int

z5

Pin gear tooth count.

Type:

int

module_mm

Involute gear module in millimeters.

Type:

float

pressure_angle_rad

Working pressure angle in radians.

Type:

float

pin_pitch_radius_mm

Pin gear pitch circle radius.

Type:

float

crank_eccentricity_mm

Crankshaft eccentricity.

Type:

float

pin_radius_mm

Pin radius.

Type:

float

z1: int = 10
z2: int = 38
z4: int = 39
z5: int = 40
module_mm: float = 1.75
pressure_angle_rad: float = 0.3490658503988659
pin_pitch_radius_mm: float = 77.5
crank_eccentricity_mm: float = 1.5
pin_radius_mm: float = 4.0
property carrier_radius_mm: float

Return the sun-to-planet-center distance used by the demo.

property sun_base_radius_mm: float

Return the sun gear base radius for the equivalent involute link.

property planetary_base_radius_mm: float

Return the planetary gear base radius for the equivalent link.

property normal_link_length_mm: float

Return an involute normal-link length used by the demo geometry.

property whole_machine_ratio: float

Return input angle divided by output angle from Eq. (2).

class scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.EquivalentErrors(delta_l_b1_mm=0.0, delta_l_b2_mm=0.005, delta_l_h_mm=0.004, delta_l_c_mm=0.005, delta_l_a_mm=0.003, delta_l_v_mm=0.0, delta_l_r_mm=0.005, accumulative_pitch_error_mm=0.005, cycloidal_profile_error_mm=0.005, pin_radius_error_mm=0.002, delta_theta_b1_rad=0.0, curvature_radius_positive=True)[source]

Bases: object

Store equivalent original-error amplitudes for one model evaluation.

All length values are millimeters and all angles are radians.

Parameters:
  • delta_l_b1_mm (float)

  • delta_l_b2_mm (float)

  • delta_l_h_mm (float)

  • delta_l_c_mm (float)

  • delta_l_a_mm (float)

  • delta_l_v_mm (float)

  • delta_l_r_mm (float)

  • accumulative_pitch_error_mm (float)

  • cycloidal_profile_error_mm (float)

  • pin_radius_error_mm (float)

  • delta_theta_b1_rad (float)

  • curvature_radius_positive (bool)

delta_l_b1_mm: float = 0.0
delta_l_b2_mm: float = 0.005
delta_l_h_mm: float = 0.004
delta_l_c_mm: float = 0.005
delta_l_a_mm: float = 0.003
delta_l_v_mm: float = 0.0
delta_l_r_mm: float = 0.005
accumulative_pitch_error_mm: float = 0.005
cycloidal_profile_error_mm: float = 0.005
pin_radius_error_mm: float = 0.002
delta_theta_b1_rad: float = 0.0
curvature_radius_positive: bool = True
scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.safe_sin(angle_rad)[source]

Return sine values with tiny denominators guarded.

Parameters:

angle_rad (ndarray | float)

Return type:

ndarray

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.angle_difference(theta_x_rad, theta_y_rad)[source]

Implement the paper shorthand theta_x,y = theta_x - theta_y.

Parameters:
  • theta_x_rad (ndarray | float)

  • theta_y_rad (ndarray | float)

Return type:

ndarray

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.output_and_crank_angles(theta_1_rad, parameters)[source]

Implement Eq. (2) for output and crankshaft angles.

Parameters:
  • theta_1_rad (ndarray)

  • parameters (ReducerParameters)

Return type:

tuple[ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.parallelogram_angles(theta_h_rad, theta_3_rad)[source]

Implement Eq. (3) for the three parallelogram loops.

Parameters:
  • theta_h_rad (ndarray)

  • theta_3_rad (ndarray)

Return type:

tuple[ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.involute_linkage_angles(theta_h1_rad, pressure_angle_rad)[source]

Implement Eq. (4) for equivalent involute link angles.

Parameters:
  • theta_h1_rad (ndarray)

  • pressure_angle_rad (float)

Return type:

tuple[ndarray, ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.pin_angle(pin_index, pin_count)[source]

Implement Eq. (7) for pin angular positions.

Parameters:
  • pin_index (ndarray)

  • pin_count (int)

Return type:

ndarray

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.pin_and_cycloid_centers(theta_p_rad, theta_a_rad, parameters)[source]

Implement Eq. (6) for pin and cycloidal-gear center coordinates.

Parameters:
  • theta_p_rad (ndarray)

  • theta_a_rad (ndarray)

  • parameters (ReducerParameters)

Return type:

tuple[ndarray, ndarray, ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.contact_linkage_angles(x_c_mm, y_c_mm, x_k_mm, y_k_mm, x_o4_mm, y_o4_mm)[source]

Implement Eq. (5) with quadrant-safe arctangent.

Parameters:
  • x_c_mm (ndarray)

  • y_c_mm (ndarray)

  • x_k_mm (ndarray)

  • y_k_mm (ndarray)

  • x_o4_mm (ndarray)

  • y_o4_mm (ndarray)

Return type:

tuple[ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.velocity_transfer_ratios(parameters)[source]

Implement Eqs. (19)-(22) in their tooth-count form.

Parameters:

parameters (ReducerParameters)

Return type:

tuple[float, float, float, float]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.cycloid_profile_pin_radius_errors(theta_k_rho_rad, errors)[source]

Implement Eqs. (35)-(36) for profile and pin-radius errors.

Parameters:
  • theta_k_rho_rad (ndarray)

  • errors (EquivalentErrors)

Return type:

tuple[ndarray, ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.output_disc_assembly_errors(output_disc_error_mm, output_disc_error_angle_rad, theta_h_rad, theta_v_rad)[source]

Implement Eq. (37) for output-disc assembly error.

Parameters:
  • output_disc_error_mm (float)

  • output_disc_error_angle_rad (float)

  • theta_h_rad (ndarray)

  • theta_v_rad (ndarray)

Return type:

tuple[ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.measured_rte(theta_h_rad, theta_1_rad, speed_ratio)[source]

Implement Eq. (38) for test-bench RTE.

Parameters:
  • theta_h_rad (ndarray)

  • theta_1_rad (ndarray)

  • speed_ratio (float)

Return type:

ndarray

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.compute_subsystem_errors(parameters, errors, theta_b1_rad, theta_n_rad, theta_b2_rad, theta_h1_rad, theta_hi_rad, theta_ai_rad, theta_v_rad, theta_ci_rad, theta_k_rad, theta_rho_rad, theta_p_rad, delta_l_k_mm, delta_l_rho_mm)[source]

Implement Eqs. (31)-(34) for subsystem error terms.

Parameters:
  • parameters (ReducerParameters)

  • errors (EquivalentErrors)

  • theta_b1_rad (ndarray)

  • theta_n_rad (ndarray)

  • theta_b2_rad (ndarray)

  • theta_h1_rad (ndarray)

  • theta_hi_rad (ndarray)

  • theta_ai_rad (ndarray)

  • theta_v_rad (ndarray)

  • theta_ci_rad (ndarray)

  • theta_k_rad (ndarray)

  • theta_rho_rad (ndarray)

  • theta_p_rad (ndarray)

  • delta_l_k_mm (ndarray)

  • delta_l_rho_mm (ndarray)

Return type:

tuple[ndarray, ndarray, ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.whole_machine_rte_universal(f1, f2i, f3, f4i, parameters)[source]

Implement Eq. (29), the universal transfer-coefficient expression.

Parameters:
  • f1 (ndarray)

  • f2i (ndarray)

  • f3 (ndarray)

  • f4i (ndarray)

  • parameters (ReducerParameters)

Return type:

ndarray

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.whole_machine_rte_one_tooth(f1, f2i, f3, f4i, parameters)[source]

Implement Eq. (30), the one-tooth-difference RV expression.

Parameters:
  • f1 (ndarray)

  • f2i (ndarray)

  • f3 (ndarray)

  • f4i (ndarray)

  • parameters (ReducerParameters)

Return type:

ndarray

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.run_rv80e_demo(sample_count=11440)[source]

Run an executable RV-80E equation-chain demonstration.

Parameters:

sample_count (int)

Return type:

tuple[ndarray, ndarray]

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.print_demo_summary(theta_h_rad, rte_rad)[source]

Print a compact numerical summary for the demonstration run.

Parameters:
  • theta_h_rad (ndarray)

  • rte_rad (ndarray)

Return type:

None

scripts.paper_reimplementation.mmt_te_modeling.mmt_te_modeling_reproduction.main()[source]

Run the script demonstration entry point.

Return type:

None