def AddFallingItems(sys): # Shared contact materials for falling objects mat = chrono.ChMaterialSurfaceSMC() # Create falling rigid bodies (spheres and boxes etc.) for ix in range(-2, 3): for iz in range(-2, 3): # add spheres mass = 1 radius = 1.1 body = chrono.ChBody() comp = (2.0 / 5.0) * mass * radius**2 body.SetInertiaXX(chrono.ChVectorD(comp, comp, comp)) body.SetMass(mass) body.SetPos(chrono.ChVectorD(4.0 * ix + 0.1, 4.0, 4.0 * iz)) body.GetCollisionModel().ClearModel() body.GetCollisionModel().AddSphere(mat, radius) body.GetCollisionModel().BuildModel() body.SetCollide(True) sphere = chrono.ChSphereShape() sphere.GetSphereGeometry().rad = radius body.AddAsset(sphere) texture = chrono.ChTexture() texture.SetTextureFilename( chrono.GetChronoDataFile("textures/bluewhite.png")) body.AddAsset(texture) sys.AddBody(body) # add boxes mass = 1 hsize = chrono.ChVectorD(0.75, 0.75, 0.75) body = chrono.ChBody() body.SetMass(mass) body.SetPos(chrono.ChVectorD(4.0 * ix, 6.0, 4.0 * iz)) body.GetCollisionModel().ClearModel() body.GetCollisionModel().AddBox(mat, hsize.x, hsize.y, hsize.z) body.GetCollisionModel().BuildModel() body.SetCollide(True) box = chrono.ChBoxShape() box.GetBoxGeometry().Size = hsize body.AddAsset(box) texture = chrono.ChTexture() texture.SetTextureFilename( chrono.GetChronoDataFile("textures/pinkwhite.png")) body.AddAsset(texture) sys.AddBody(body)
tire_vis_type = veh.VisualizationType_MESH # : VisualizationType::PRIMITIVES my_bus.SetChassisVisualizationType(chassis_vis_type) my_bus.SetSuspensionVisualizationType(suspension_vis_type) my_bus.SetSteeringVisualizationType(steering_vis_type) my_bus.SetWheelVisualizationType(wheel_vis_type) my_bus.SetTireVisualizationType(tire_vis_type) # Create the terrain terrain = veh.RigidTerrain(my_bus.GetSystem()) if (contact_method == chrono.ChContactMethod_NSC): patch_mat = chrono.ChMaterialSurfaceNSC() patch_mat.SetFriction(0.9) patch_mat.SetRestitution(0.01) elif (contact_method == chrono.ChContactMethod_SMC): patch_mat = chrono.ChMaterialSurfaceSMC() patch_mat.SetFriction(0.9) patch_mat.SetRestitution(0.01) patch_mat.SetYoungModulus(2e7) patch = terrain.AddPatch(patch_mat, chrono.ChVectorD(0, 0, 0), chrono.ChVectorD(0, 0, 1), terrainLength, terrainWidth) patch.SetTexture(veh.GetDataFile("terrain/textures/tile4.jpg"), 200, 200) patch.SetColor(chrono.ChColor(0.8, 0.8, 0.5)) terrain.Initialize() # Create the vehicle Irrlicht interface app = veh.ChWheeledVehicleIrrApp(my_bus.GetVehicle(), 'Citybus', irr.dimension2du(1000, 800)) app.SetSkyBox() app.AddTypicalLights(irr.vector3df(30, -30, 100), irr.vector3df(30, 50, 100),
b_mat.SetFriction(0.5) o_mat = chrono.ChMaterialSurfaceNSC() o_mat.SetRestitution(0.9) o_mat.SetFriction(0.4) ground_mat = g_mat ball_mat = b_mat obst_mat = o_mat time_step = 1e-3 frame_skip = 10 else: # use SMC contact method sys = chrono.ChSystemSMC() g_mat = chrono.ChMaterialSurfaceSMC() g_mat.SetRestitution(0.9) g_mat.SetFriction(0.4) b_mat = chrono.ChMaterialSurfaceSMC() b_mat.SetRestitution(0.9) b_mat.SetFriction(0.5) o_mat = chrono.ChMaterialSurfaceSMC() o_mat.SetRestitution(0.9) o_mat.SetFriction(0.4) ground_mat = g_mat ball_mat = b_mat obst_mat = o_mat time_step = 1e-4 frame_skip = 100
body.SetInertiaXX(chrono.ChVectorD(20, 20, 20)) body.SetPos(tire_center + chrono.ChVectorD(0, 0.3, 0)) # Load mesh mesh = chrono.ChTriangleMeshConnected() mesh.LoadWavefrontMesh( chrono.GetChronoDataFile('models/tractor_wheel/tractor_wheel.obj')) # Set visualization assets vis_shape = chrono.ChTriangleMeshShape() vis_shape.SetMesh(mesh) body.AddAsset(vis_shape) body.AddAsset(chrono.ChColorAsset(0.3, 0.3, 0.3)) # Set collision shape material = chrono.ChMaterialSurfaceSMC() body.GetCollisionModel().ClearModel() body.GetCollisionModel().AddTriangleMesh( material, # contact material mesh, # the mesh False, # is it static? False, # is it convex? chrono.ChVectorD(0, 0, 0), # position on body chrono.ChMatrix33D(1), # orientation on body 0.01) # "thickness" for increased robustness body.GetCollisionModel().BuildModel() body.SetCollide(True) # Create motor motor = chrono.ChLinkMotorRotationAngle()
def AddContainer(sys): # The fixed body (5 walls) fixedBody = chrono.ChBody() fixedBody.SetMass(1.0) fixedBody.SetBodyFixed(True) fixedBody.SetPos(chrono.ChVectorD()) fixedBody.SetCollide(True) # Contact material for container fixed_mat = chrono.ChMaterialSurfaceSMC() fixedBody.GetCollisionModel().ClearModel() AddContainerWall(fixedBody, fixed_mat, chrono.ChVectorD(20, 1, 20), chrono.ChVectorD(0, -5, 0)) AddContainerWall(fixedBody, fixed_mat, chrono.ChVectorD(1, 10, 20.99), chrono.ChVectorD(-10, 0, 0)) AddContainerWall(fixedBody, fixed_mat, chrono.ChVectorD(1, 10, 20.99), chrono.ChVectorD(10, 0, 0)) AddContainerWall(fixedBody, fixed_mat, chrono.ChVectorD(20.99, 10, 1), chrono.ChVectorD(0, 0, -10), False) AddContainerWall(fixedBody, fixed_mat, chrono.ChVectorD(20.99, 10, 1), chrono.ChVectorD(0, 0, 10)) fixedBody.GetCollisionModel().BuildModel() texture = chrono.ChTexture() texture.SetTextureFilename( chrono.GetChronoDataFile("textures/concrete.jpg")) fixedBody.AddAsset(texture) sys.AddBody(fixedBody) # The rotating mixer body rotatingBody = chrono.ChBody() rotatingBody.SetMass(10.0) rotatingBody.SetInertiaXX(chrono.ChVectorD(50, 50, 50)) rotatingBody.SetPos(chrono.ChVectorD(0, -1.6, 0)) rotatingBody.SetCollide(True) # Contact material for mixer body rot_mat = chrono.ChMaterialSurfaceSMC() hsize = chrono.ChVectorD(5, 2.75, 0.5) rotatingBody.GetCollisionModel().ClearModel() rotatingBody.GetCollisionModel().AddBox(rot_mat, hsize.x, hsize.y, hsize.z) rotatingBody.GetCollisionModel().BuildModel() box = chrono.ChBoxShape() box.GetBoxGeometry().Size = hsize rotatingBody.AddAsset(box) rotatingBody.AddAsset(texture) sys.AddBody(rotatingBody) # A motor between the two my_motor = chrono.ChLinkMotorRotationSpeed() my_motor.Initialize( rotatingBody, fixedBody, chrono.ChFrameD(chrono.ChVectorD(0, 0, 0), chrono.Q_from_AngAxis(chrono.CH_C_PI_2, chrono.VECT_X))) mfun = chrono.ChFunction_Const(chrono.CH_C_PI / 2.0) # speed w=90°/s my_motor.SetSpeedFunction(mfun) sys.AddLink(my_motor) return rotatingBody
cloth_radius, NNODES_ANGLE, NNODES_LENGTH, NEIGHBOURS, cloth_material, node_mass, sleeve_thickness, alphadamp, shift_z=-bb_dz / 2. - offset) # Set the rest position as the actual position sleeve.relax() cloth_mesh = sleeve.get_mesh() # Add a contact surface mesh with material properties contact_material = chrono.ChMaterialSurfaceSMC() # contact_material.SetFriction(0.1) # contact_material.SetAdhesion(0.5) contact_material.SetYoungModulus(30e5) sphere_swept_thickness = 0.008 mcontact = fea.ChContactSurfaceMesh() cloth_mesh.AddContactSurface(mcontact) mcontact.AddFacesFromBoundary(sphere_swept_thickness) mcontact.SetMaterialSurface(contact_material) # Fix the extremities of the sleeve to the disks sleeve.fix_extremities(left_cyl, right_cyl, mysystem) # Extend the sleeve. It will be released after some iterations. # TODO check for a generic way of computing the expanding force sleeve.expand(1 / (NNODES_ANGLE * NNODES_LENGTH) * 7000000. * UNIT_FACTOR *