Source code for pymycar.Cad.Chassis.formula

"""
Formula
=======
"""

import pyvista as pv
import numpy as np

[docs] def model_A(front_axle_to_com=1500, rear_axle_to_com=1645*0.5, front_track=1500*0.5, rear_track=1645*0.5, com_height=400.0, roll=0, pitch=0, yaw=0, x=0, y=0, z=0) -> pv.MultiBlock: """ Generate a 3D model of a Formula vehicle chassis. .. code-block:: # --- #--------------------------- | | # | | | # ------------ | | # | | | #----------- CoG A ----B-----|C| # | * * * |*| #----------- ----------| | # | | | # ------------ | | # | | | #--------------------------- | | # --- Parameters ---------- front_axle_to_com : float, optional Distance from the front axle to the center of mass (CoM). rear_axle_to_com : float, optional Distance from the rear axle to the center of mass (CoM). front_track : float, optional Front track width. rear_track : float, optional Rear track width. com_height : float, optional Height of the center of mass (CoM). roll : float, optional Roll angle in radians. pitch : float, optional Pitch angle in radians. yaw : float, optional Yaw angle in radians. x : float, optional X-coordinate of the center of mass (CoM). y : float, optional Y-coordinate of the center of mass (CoM). z : float, optional Z-coordinate of the center of mass (CoM). Returns ------- pv.MultiBlock MultiBlock containing the chassis components. Notes ----- The model consists of multiple boxes representing different parts of the vehicle chassis. """ cog = np.array([x, y, z + com_height]) lf = front_track lr = front_track t1 = 1000 t2 = 1000 t3 = 1000 t4 = 1000 front_axle_to_com *= 0.8 d_CoG_A = front_axle_to_com d_A_B = front_axle_to_com * 0.5 d_B_C = front_axle_to_com / 3.0 box1_x, box1_y, box1_z = 2 * front_axle_to_com, front_track * 2, 400 box2_x, box2_y, box2_z = 0.33 * 2 * front_axle_to_com, 0.53 * front_track * 2, 300 box3_x, box3_y, box3_z = 0.26 * 2 * front_axle_to_com, 0.2 * front_track * 2, 200 box4_x, box4_y, box4_z = 0.066 * 2 * front_axle_to_com, 1.333 * front_track * 2, 50 box5_x, box5_y, box5_z = 0.5 * 2 * front_axle_to_com, 0.1333 * front_track * 2, 600 box6_x, box6_y, box6_z = 0.133 * 2 * front_axle_to_com, 1.333 * front_track * 2, 200 PA = np.array([cog[0] + box1_x * 0.5 + box2_x * 0.5, 0.0, box3_z + 0.25 * box2_z]) PB = np.array([PA[0] + box2_x * 0.5 + box3_x * 0.5, 0.0, 0.5 * box3_z]) PC = np.array([PB[0] + box3_x * 0.5 + box4_x * 0.5, 0.0, 0.5 * box4_z]) PD = np.array([cog[0] - box5_x * 0.5, 0.0, box1_z + 0.5 * box5_z]) PE = np.array([PD[0] - box5_x * 0.5 - box6_x * 0.7, 0.0, PD[2] + 0.5 * box6_z]) axe_front_front = 1225 wing_length = 250 BOX1 = pv.Cube(center=cog, x_length=box1_x, y_length=box1_y, z_length=box1_z) BOX2 = pv.Cube(center=PA, x_length=box2_x, y_length=box2_y, z_length=box2_z) BOX3 = pv.Cube(center=PB, x_length=box3_x, y_length=box3_y, z_length=box3_z) BOX4 = pv.Cube(center=PC, x_length=box4_x, y_length=box4_y, z_length=box4_z) BOX5 = pv.Cube(center=PD, x_length=box5_x, y_length=box5_y, z_length=box5_z) BOX6 = pv.Cube(center=PE, x_length=box6_x, y_length=box6_y, z_length=box6_z) cad = pv.MultiBlock([BOX1, BOX2, BOX3, BOX4, BOX5, BOX6]) return cad
[docs] def model_B(front_axle_to_com=1500, rear_axle_to_com=1645*0.5, front_track=1500*0.5, rear_track=1645*0.5, com_height=400.0, roll=0, pitch=0, yaw=0, x=0, y=0, z=0) -> pv.MultiBlock: """ Generate a 3D model of a different Formula vehicle chassis. Parameters ---------- front_axle_to_com : float, optional Distance from the front axle to the center of mass (CoM). rear_axle_to_com : float, optional Distance from the rear axle to the center of mass (CoM). front_track : float, optional Front track width. rear_track : float, optional Rear track width. com_height : float, optional Height of the center of mass (CoM). roll : float, optional Roll angle in radians. pitch : float, optional Pitch angle in radians. yaw : float, optional Yaw angle in radians. x : float, optional X-coordinate of the center of mass (CoM). y : float, optional Y-coordinate of the center of mass (CoM). z : float, optional Z-coordinate of the center of mass (CoM). Returns ------- pv.MultiBlock MultiBlock containing the chassis components. Notes ----- The model consists of multiple boxes representing different parts of the vehicle chassis. """ wheelbase = rear_axle_to_com + front_axle_to_com h = 400 / 4800 * wheelbase box1_x, box1_y, box1_z = 0.7 * wheelbase, front_track, h box2_x, box2_y, box2_z = 0.5 * front_axle_to_com, 800 / 1500 * front_track, 300 / 400 * h box3_x, box3_y, box3_z = 0.25 * front_axle_to_com, 300 / 1500 * front_track, 200 / 400 * h box4_x, box4_y, box4_z = 0.05 * front_axle_to_com, 2000 / 1500 * front_track, 50 / 400 * h box5_x, box5_y, box5_z = 0.5 * 0.7 * wheelbase, 200 / 1500 * front_track, 600 / 400 * h box6_x, box6_y, box6_z = 0.1 * front_axle_to_com, 2000 / 1500 * front_track, 200 / 400 * h cog = np.array([x, y, box1_z]) PA = np.array([cog[0] + box1_x * 0.5 + box2_x * 0.5, cog[1], box3_z + 0.25 * box2_z]) PB = np.array([PA[0] + box2_x * 0.5 + box3_x * 0.5, cog[1], 0.5 * box3_z]) PC = np.array([PB[0] + box3_x * 0.5 + box4_x * 0.5, cog[1], 0.5 * box4_z]) PD = np.array([cog[0] - box5_x * 0.5, cog[1], box1_z + 0.5 * box5_z]) PE = np.array([PD[0] - box5_x * 0.5 - box6_x * 0.7, cog[1], PD[2] + 0.5 * box6_z]) BOX1 = pv.Cube(center=cog, x_length=box1_x, y_length=box1_y, z_length=box1_z) BOX2 = pv.Cube(center=PA, x_length=box2_x, y_length=box2_y, z_length=box2_z) BOX3 = pv.Cube(center=PB, x_length=box3_x, y_length=box3_y, z_length=box3_z) BOX4 = pv.Cube(center=PC, x_length=box4_x, y_length=box4_y, z_length=box4_z) BOX5 = pv.Cube(center=PD, x_length=box5_x, y_length=box5_y, z_length=box5_z) BOX6 = pv.Cube(center=PE, x_length=box6_x, y_length=box6_y, z_length=box6_z) halo1 = pv.Cylinder(center=(-2400, 1000, 0.0), direction=(0, 0, 1), height=500, radius=100) cad = pv.MultiBlock([BOX1, BOX2, BOX3, BOX4, BOX5, BOX6]) return cad