Esempio n. 1
0
    def createApplication(self):
        #  Create an Irrlicht application to visualize the system

        self.myapplication = chronoirr.ChIrrApp(
            self.mysystem, 'PyChrono example',
            chronoirr.dimension2du(1024, 768))

        self.myapplication.AddTypicalSky()
        self.myapplication.AddTypicalLogo()
        self.myapplication.AddTypicalCamera(chronoirr.vector3df(0.6, 0.6, 0.8))
        self.myapplication.AddLightWithShadow(
            chronoirr.vector3df(2, 4, 2),  # point
            chronoirr.vector3df(0, 0, 0),  # aimpoint
            9,  # radius (power)
            1,
            9,  # near, far
            30)  # angle of FOV

        # ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
        # in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
        # If you need a finer control on which item really needs a visualization proxy in
        # Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

        self.myapplication.AssetBindAll()

        # ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
        # that you added to the bodies into 3D shapes, they can be visualized by Irrlicht!

        self.myapplication.AssetUpdateAll()
        self.myapplication.AddShadowAll()
        self.myapplication.SetShowInfos(True)
Esempio n. 2
0
   def render(self):
         if not self.render_setup :
             self.myapplication = chronoirr.ChIrrApp(self.ant_sys)
             self.myapplication.AddShadowAll()
             self.myapplication.SetTimestep(self.timestep)
             self.myapplication.AddTypicalSky(chrono.GetChronoDataPath() + '/skybox/')
             self.myapplication.AddTypicalCamera(chronoirr.vector3df(0,1.5,0))
             self.myapplication.AddLightWithShadow(chronoirr.vector3df(4,4,0),    # point
                                            chronoirr.vector3df(0,0,0),    # aimpoint
                                            20,                 # radius (power)
                                            1,9,               # near, far
                                            90)                # angle of FOV
             self.myapplication.AssetBindAll()
             self.myapplication.AssetUpdateAll()
             self.render_setup = True
         
         self.myapplication.GetDevice().run()
         self.myapplication.BeginScene()
         self.myapplication.DrawAll()
         #self.myapplication.DoStep()
         
         self.myapplication.EndScene()
        

                     
    def run_visible(self):
        visible_sim = chronoirr.ChIrrApp(self.system, 'Falling',
                                         chronoirr.dimension2du(1024, 768))

        # visible_sim.AddTypicalSky()
        # visible_sim.AddTypicalLogo(chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
        visible_sim.AddTypicalCamera(chronoirr.vector3df(0, 14, -20))
        visible_sim.AddTypicalLights()

        visible_sim.AssetBindAll()
        visible_sim.AssetUpdateAll()
        visible_sim.SetTimestep(0.02)
        visible_sim.SetTryRealtime(True)

        start_t = time.time()
        while visible_sim.GetDevice().run():
            visible_sim.BeginScene()
            visible_sim.DrawAll()
            visible_sim.DoStep()
            visible_sim.EndScene()

            # break if velocity and rotational velocity is below threshold
            if self.is_settled():
                break

        end_t = time.time()
        duration = end_t - start_t

        self.post_run(duration, silent=False)
Esempio n. 4
0
 def render(self):
     if not self.animate:
         print(
             'It seems that for efficiency reasons visualization has been turned OFF. To render the simulation set self.animate = True in ChronoHexapod.py'
         )
         sys.exit(1)
     if not self.render_setup:
         self.myapplication = chronoirr.ChIrrApp(
             self.hexapod_sys, 'Test', chronoirr.dimension2du(1280, 720))
         self.myapplication.AddShadowAll()
         self.myapplication.SetStepManage(True)
         self.myapplication.SetTimestep(self.timestep)
         self.myapplication.AddTypicalSky(chrono.GetChronoDataPath() +
                                          '/skybox/')
         self.myapplication.AddTypicalLogo(chrono.GetChronoDataPath() +
                                           '/logo_pychrono_alpha.png')
         self.myapplication.AddTypicalCamera(
             chronoirr.vector3df(1, 1, 1),
             chronoirr.vector3df(0.0, 0.0, 0.0))
         self.myapplication.AddTypicalLights(
         )  # angle of FOV              # angle of FOV
         self.myapplication.AssetBindAll()
         self.myapplication.AssetUpdateAll()
         self.render_setup = True
     #self.myapplication.GetSceneManager().getActiveCamera().setPosition(chronoirr.vector3df(self.centralbody.GetPos().x - 0.75 , 0.4, self.centralbody.GetPos().z + 0.25))
     #self.myapplication.GetSceneManager().getActiveCamera().setTarget(chronoirr.vector3df(self.centralbody.GetPos().x , 0.25, self.centralbody.GetPos().z))
     self.myapplication.GetDevice().run()
     self.myapplication.BeginScene()
     self.myapplication.DrawAll()
     self.myapplication.EndScene()
def SetupSystem():
    ChSystem = chrono.ChSystemNSC()
    ChSimulation = chronoirr.ChIrrApp(ChSystem, 'MiroSimulation', chronoirr.dimension2du(1720, 920))
    # Set the default outward/inward shape margins for collision detection,
    # this is epecially important for very large or very small objects.
    chrono.ChCollisionModel.SetDefaultSuggestedEnvelope(0.0000001)
    chrono.ChCollisionModel.SetDefaultSuggestedMargin(0.0001)
    
    # Maybe you want to change some settings for the solver. For example you
    # might want to use SetSolverMaxIterations to set the number of iterations
    # per timestep, etc.
    
    #MiroSystem.ChSystem.SetSolverType(chrono.ChSolver.Type_BARZILAIBORWEIN) # precise, more slow
    ChSystem.SetSolverMaxIterations(70)
    return [ChSystem, ChSimulation]
Esempio n. 6
0
def main():
    mysystem = chrono.ChSystemNSC()

    model.make_model(mysystem)

    # ---------------------------------------------------------------------
    #
    #  Create an Irrlicht application to visualize the system
    #

    myapplication = chronoirr.ChIrrApp(mysystem, 'Oswald',
                                       chronoirr.dimension2du(1024, 768))

    # myapplication.AddTypicalSky()
    # myapplication.AddShadowAll()
    myapplication.AddTypicalLogo()
    myapplication.AddTypicalCamera(chronoirr.vector3df(0.6, 0.6, 0.8))
    myapplication.AddTypicalLights()

    # ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
    # in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
    # If you need a finer control on which item really needs a visualization proxy in
    # Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

    myapplication.AssetBindAll()

    # ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
    # that you added to the bodies into 3D shapes, they can be visualized by Irrlicht!

    myapplication.AssetUpdateAll()

    # ---------------------------------------------------------------------
    #
    #  Run the simulation
    #

    myapplication.SetTimestep(0.005)
    # myapplication.SetTryRealtime(True)

    while myapplication.GetDevice().run():
        myapplication.BeginScene()
        myapplication.DrawAll()
        myapplication.DoStep()
        myapplication.EndScene()
    def window(self,
               arm1,
               arm2,
               print_time=False,
               timestep=0.005,
               headless=True):

        if not headless:
            self.window = chronoirr.ChIrrApp(
                self.system, self.name,
                chronoirr.dimension2du(1920,
                                       1080))  #Create window for visualization
            self.window.AddTypicalCamera(chronoirr.vector3df(1, 1, 2))
            self.window.AddTypicalLights()
            self.window.AddTypicalSky()
            self.window.AssetBindAll()
            self.window.AssetUpdateAll()
            self.window.SetTimestep(timestep)
            self.window.AddTypicalLogo(
                chrono.GetChronoDataFile('logo_pychrono_alpha.png'))

            while (self.window.GetDevice().run()
                   ):  #create a window and display simulation
                s = time.perf_counter()
                self.window.BeginScene()
                self.window.DrawAll()
                motor_torque(arm1)
                motor_torque(arm2)
                self.window.DoStep()
                print(arm1.arm_tip.GetPos())
                self.window.EndScene()
                if print_time == True:
                    print(time.perf_counter() - s)

        else:
            while (self.system.GetChTime() <
                   10):  #Run simulation without viewing
                motor_torque(arm1)
                motor_torque(arm2)
                self.system.DoStepDynamics(timestep)
                print(arm1.arm_tip.GetPos())
                if print_time == True:
                    print(time.perf_counter() - s)
Esempio n. 8
0
def animateSystem(system, am=animationModifiers()):
    """
    animate the system using the chrono 
    """
    # -------------------------------------------------------------------------
    #            Create an Irrlicht application to visualize the system
    # -------------------------------------------------------------------------
    myapplication = chronoirr.ChIrrApp(system, 'PyChrono example',
                                       chronoirr.dimension2du(1024, 768))

    myapplication.AddTypicalSky()
    myapplication.AddTypicalLogo()
    myapplication.AddTypicalCamera(chronoirr.vector3df(0.6, 0.6, 0.8))
    myapplication.AddTypicalLights()

    # ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
    # in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
    # If you need a finer control on which item really needs a visualization proxy in
    # Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

    myapplication.AssetBindAll()

    # ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
    # that you added to the bodies into 3D shapes, they can be visualized by Irrlicht!

    myapplication.AssetUpdateAll()

    # -------------------------------------------------------------------------
    #                             Run the simulation
    # -------------------------------------------------------------------------

    myapplication.SetTimestep(0.005)

    while (myapplication.GetDevice().run()):
        myapplication.BeginScene()
        myapplication.DrawAll()
        am.draw(myapplication)
        myapplication.DoStep()
        myapplication.EndScene()
Esempio n. 9
0
    def window(
        self,
        arm1,
        arm2,
        timestep,
        print_time=False,
        headless=True,
    ):

        if not headless:
            self.window = chronoirr.ChIrrApp(
                self.system, self.name,
                chronoirr.dimension2du(1920,
                                       1080))  #Create window for visualization
            self.window.AddTypicalCamera(chronoirr.vector3df(1, 1, 2))
            self.window.AddTypicalLights()
            self.window.AddTypicalSky()
            self.window.AssetBindAll()
            self.window.AssetUpdateAll()
            self.window.SetTimestep(timestep)
            self.window.AddTypicalLogo(
                chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
Esempio n. 10
0
    def render(self):
        if not self.render_setup:
            self.myapplication = chronoirr.ChIrrApp(
                self.robosystem, 'Test', chronoirr.dimension2du(1280, 720))
            self.myapplication.AddShadowAll()
            self.myapplication.SetStepManage(True)
            self.myapplication.SetTimestep(self.timestep)
            self.myapplication.AddTypicalSky(chrono.GetChronoDataPath() +
                                             '/skybox/')
            self.myapplication.AddTypicalLogo(chrono.GetChronoDataPath() +
                                              '/logo_pychrono_alpha.png')
            self.myapplication.AddTypicalCamera(
                chronoirr.vector3df(1, 1, 1),
                chronoirr.vector3df(0.0, 0.0, 0.0))
            self.myapplication.AddTypicalLights()  # angle of FOV
            self.myapplication.AssetBindAll()
            self.myapplication.AssetUpdateAll()
            self.render_setup = True

        self.myapplication.GetDevice().run()
        self.myapplication.BeginScene()
        self.myapplication.DrawAll()
        self.myapplication.EndScene()
Esempio n. 11
0
# Create a large cube as a floor.

my_floor = chrono.ChBodyEasyBox(1, 0.2, 1, 1000, True)
my_floor.SetPos(chrono.ChVectorD(0, -0.3, 0))
my_floor.SetBodyFixed(True)
mysystem.Add(my_floor)

my_color = chrono.ChColorAsset(0.2, 0.2, 0.5)
my_floor.AddAsset(my_color)

# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#

myapplication = chronoirr.ChIrrApp(mysystem, 'Use OpenCascade shapes',
                                   chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalSky(chrono.GetChronoDataPath() + 'skybox/')
myapplication.AddTypicalLogo(chrono.GetChronoDataPath() +
                             'logo_pychrono_alpha.png')
myapplication.AddTypicalCamera(chronoirr.vector3df(0.2, 0.2, -0.2))
myapplication.AddTypicalLights()

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
# If you need a finer control on which item really needs a visualization proxy in
# Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

myapplication.AssetBindAll()

# ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
Esempio n. 12
0
mesh.AddAsset(viz)

mvisualizebeamA = fea.ChVisualizationFEAmesh(mesh)
mvisualizebeamA.SetFEMdataType(fea.ChVisualizationFEAmesh.E_PLOT_ELEM_BEAM_MZ)
mvisualizebeamA.SetColorscaleMinMax(-0.4, 0.4)
mvisualizebeamA.SetSmoothFaces(True)
mvisualizebeamA.SetWireframe(False)
mesh.AddAsset(mvisualizebeamA)

mysystem.AddMesh(mesh)

# ---------------------------------------------------------------------
# IRRLICHT
# Create an Irrlicht application to visualize the system
#
myapplication = chronoirr.ChIrrApp(mysystem, 'Cloth Simulation',
                                   chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalSky()
# myapplication.AddTypicalLogo(chrono.GetChronoDataPath() + 'logo_pychrono_alpha.png')
myapplication.AddTypicalCamera(chronoirr.vector3df(0.3, 0., 0.3))
myapplication.AddTypicalLights()
myapplication.SetShowInfos(False)
# myapplication.SetContactsDrawMode(chronoirr.IrrlichtDevice.)

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
# If you need a finer control on which item really needs a visualization proxy in
# Irrlicht, just use application.AssetBind(myitem) on a per-item basis.
myapplication.AssetBindAll()

# ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
Esempio n. 13
0
#import pychrono.mkl as mkl
import pychrono.irrlicht as chronoirr
from cables import Model1, Model2, Model3

# Select solver type (SPARSE_QR, SPARSE_LU, or MINRES).
#ChSolver::Type solver_type = ChSolver::Type::SPARSE_QR
solver = chrono.ChSolverSparseQR()

print("Copyright (c) 2017 projectchrono.org\nChrono version: ")

# Create a Chrono::Engine physical system
my_system = chrono.ChSystemSMC()

# Create the Irrlicht visualization (open the Irrlicht device,
# bind a simple user interface, etc. etc.)
application = chronoirr.ChIrrApp(my_system, "Cables FEM",
                                 chronoirr.dimension2du(800, 600), False, True)

# Easy shortcuts to add camera, lights, logo and sky in Irrlicht scene:
application.AddTypicalLogo()
application.AddTypicalSky()
application.AddTypicalLights()
application.AddTypicalCamera(chronoirr.vector3df(0., 0.6, -1))

# Create a mesh, that is a container for groups of elements and
# their referenced nodes.
my_mesh = fea.ChMesh()

# Create one of the available models (defined in FEAcables.h)
##model = Model1(my_system, my_mesh)
##model = Model2(my_system, my_mesh)
model = Model3(my_system, my_mesh)
Esempio n. 14
0
vshape_s.GetSphereGeometry().Pos = ball.GetPos()
ball.AddAsset(vshape_s)
ball.AddAsset(
    chrono.ChTexture(chrono.GetChronoDataFile("textures/bluewhite.png")))

# Create a custom collision detection callback object and register it with the system
my_collision = MyCustomCollisionDetection(ball, ground, ball_mat, obst_mat,
                                          ball_radius, obstacle)
sys.RegisterCustomCollisionCallback(my_collision)

# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#

myapplication = chronoirr.ChIrrApp(sys, 'PyChrono example: Custom contact',
                                   chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalSky()
myapplication.AddTypicalLogo(
    chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
myapplication.AddTypicalCamera(chronoirr.vector3df(8, 8, -6))
myapplication.AddTypicalLights()

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
# If you need a finer control on which item really needs a visualization proxy in
# Irrlicht, just use application.AssetBind(myitem) on a per-item basis.

myapplication.AssetBindAll()

# ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
dist_crank_slider = chrono.ChLinkDistance()
dist_crank_slider.SetName("dist_crank_slider")
dist_crank_slider.Initialize(crank, slider, False, chrono.ChVectorD(-2, 0, 0),
                             chrono.ChVectorD(2, 0, 0))
system.AddLink(dist_crank_slider)

## 4. Write the system hierarchy to the console (default log output destination)
system.ShowHierarchy(chrono.GetLog())

## 5. Prepare visualization with Irrlicht
##    Note that Irrlicht uses left-handed frames with Y up.

## Create the Irrlicht application and set-up the camera.
application = chronoirr.ChIrrApp(
    system,  ## pointer to the mechanical system
    "Slider-Crank Demo 0",  ## title of the Irrlicht window
    chronoirr.dimension2du(800, 600),  ## window dimension (width x height)
    False,  ## use full screen?
    True)  ## enable shadows?
application.AddTypicalLogo()
application.AddTypicalSky()
application.AddTypicalLights()
application.AddTypicalCamera(
    chronoirr.vector3df(2, 5, -3),  ## camera location
    chronoirr.vector3df(2, 0, 0))  ## "look at" location

## Let the Irrlicht application convert the visualization assets.
application.AssetBindAll()
application.AssetUpdateAll()
## 6. Perform the simulation.
## Specify the step-size.
application.SetTimestep(0.01)
Esempio n. 16
0
mvisualizebeamC.SetFEMglyphType(fea.ChVisualizationFEAmesh.E_GLYPH_NODE_CSYS)
mvisualizebeamC.SetFEMdataType(fea.ChVisualizationFEAmesh.E_PLOT_NONE)
mvisualizebeamC.SetSymbolsThickness(0.006)
mvisualizebeamC.SetSymbolsScale(0.01)
mvisualizebeamC.SetZbufferHide(False)
my_mesh.AddAsset(mvisualizebeamC)

# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#

# Create the Irrlicht visualization (open the Irrlicht device,
# bind a simple user interface, etc. etc.)
myapplication = chronoirr.ChIrrApp(
    my_system, 'Test FEA: the Jeffcott rotor with IGA beams',
    chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalLogo(
    chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
myapplication.AddTypicalSky()
myapplication.AddTypicalCamera(chronoirr.vector3df(0, 1, 4),
                               chronoirr.vector3df(beam_L / 2, 0, 0))
myapplication.AddTypicalLights()

# This is needed if you want to see things in Irrlicht 3D view.
myapplication.AssetBindAll()
myapplication.AssetUpdateAll()

# ---------------------------------------------------------------------
#
Esempio n. 17
0
mbodyR.SetMaterialSurface(brick_material)
mysystem.Add(mbodyR)

if not (fixed_L):
    mbodyG = chrono.ChBodyEasyBox(1, 0.5, thick * 2.2, 1000, True, True)
    mbodyG.SetPos(chrono.ChVectorD(-1, L2.y - 0.5 / 2, 0))
    mbodyG.SetBodyFixed(True)
    mbodyG.SetMaterialSurface(brick_material)
    mysystem.Add(mbodyG)

# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#

myapplication = chronoirr.ChIrrApp(mysystem, 'Test',
                                   chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalLogo(
    chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
myapplication.AddTypicalSky()
myapplication.AddTypicalCamera(chronoirr.vector3df(0.6, 0.6, 0.8))
myapplication.AddTypicalLights()

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
# If you need a finer control on which item really needs a visualization proxy in
# Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

myapplication.AssetBindAll()

# ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
    def __init__(self,
                 configuration,
                 visualization: bool = False,
                 output: Optional = None) -> None:
        # TODO a copy of the configuration is better
        self._conf = configuration
        self._visualization = visualization
        self._output = output
        self._app = None

        # TODO not sure about the meaning of theese two parameters, take them from the configuation
        chrono.ChCollisionInfo.SetDefaultEffectiveCurvatureRadius(1)
        chrono.ChCollisionModel.SetDefaultSuggestedMargin(0.006)

        # TODO look into the parameters of the system
        # e.g. MinBounceSpeed, Gravity
        self._system = chrono.ChSystemSMC()

        if self._visualization:
            # TODO take the data path, the title, the dimension and do_[something] from the configuration
            chrono.SetChronoDataPath(
                "/home/gianluca/anaconda3/envs/chrono/share/chrono/data/")
            self._app = irr.ChIrrApp(
                self._system,
                "Artificial Skin",
                irr.dimension2du(1024, 768),
                do_fullscreen=False,
                do_shadows=True,
                do_antialias=True,
            )
            self._app.AddTypicalSky()
            self._app.AddTypicalLights()
            # TODO take the info for the came and lighs from the configuation
            self._app.AddTypicalCamera(irr.vector3df(-1, -1, 0),
                                       irr.vector3df(0, 0, 0))
            # TODO this has too many parameters and it is not that important
            self._app.AddLightWithShadow(
                irr.vector3df(1.5, 5.5, -2.5),
                irr.vector3df(0, 0, 0),
                3,
                2.2,
                7.2,
                40,
                512,
                irr.SColorf(1, 1, 1),
            )
            self._app.AddShadowAll()
            self._app.SetTimestep(0.004)

        self._make_sheets()
        self._make_sensors()
        # TODO make the load class -> it takes a node / pair of indexes and time and return the force
        self._add_forces()

        # TODO look at all the parameters of the solver and the stepper
        # TODO consider also mkl.ChSolverMKL
        # TODO take the parameters from the configuration
        self._solver = chrono.ChSolverMINRES()
        self._system.SetSolver(self._solver)
        self._solver.SetMaxIterations(1000)
        self._solver.SetTolerance(1e-12)
        self._solver.EnableDiagonalPreconditioner(True)
        self._solver.SetVerbose(
            False)  # don't take this from the configuration

        # HHT implicit integrator for II order systems, adaptive
        # TODO take the parameters from the configuaration
        self._stepper = chrono.ChTimestepperHHT(self._system)
        self._system.SetTimestepper(self._stepper)
        self._stepper.SetAlpha(-0.2)
        self._stepper.SetMaxiters(100)
        self._stepper.SetAbsTolerances(1e-5)
        self._stepper.SetMode(chrono.ChTimestepperHHT.POSITION)
        self._stepper.SetScaling(True)

        # TODO from configuarion
        # length of the simulation
        self._life = 5  # seconds
Esempio n. 19
0
robot.SetDriver(driver)

# -------------------------------
# Cast rays into collision models
# -------------------------------

caster = RayCaster(
    my_sys,
    chrono.ChFrameD(chrono.ChVectorD(0, -2, -1),
                    chrono.Q_from_AngX(-chrono.CH_C_PI_2)), [2.5, 2.5], 0.02)

# -------------------------------
# Create the visualization window
# -------------------------------

application = chronoirr.ChIrrApp(my_sys, "RoboSimian - Rigid terrain",
                                 chronoirr.dimension2du(800, 600))
application.AddTypicalLogo(chrono.GetChronoDataPath() +
                           'logo_pychrono_alpha.png')
application.AddTypicalSky()
application.AddTypicalCamera(chronoirr.vector3df(1, -2.75, 0.2),
                             chronoirr.vector3df(1, 0, 0))
application.AddTypicalLights(chronoirr.vector3df(100, 100, 100),
                             chronoirr.vector3df(100, -100, 80))
application.AddLightWithShadow(chronoirr.vector3df(10, -6, 3),
                               chronoirr.vector3df(0, 0, 0), 3, -10, 10, 40,
                               512)

application.AssetBindAll()
application.AssetUpdateAll()

# -----------------------------
Esempio n. 20
0
# Print exported items
for my_item in exported_items:
    print(my_item.GetName())

# Add items to the physical system
for my_item in exported_items:
    my_system.Add(my_item)

# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#
print(chrono.GetChronoDataFile("skybox/"))

myapplication = chronoirr.ChIrrApp(
    my_system, 'Test: using data exported by Chrono::Solidworks',
    chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalSky()
myapplication.AddTypicalLogo(chrono.GetChronoDataPath() +
                             'logo_pychrono_alpha.png')
myapplication.AddTypicalCamera(chronoirr.vector3df(0.3, 0.3, 0.4))
myapplication.AddTypicalLights()

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
# If you need a finer control on which item really needs a visualization proxy in
# Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

myapplication.AssetBindAll()
Esempio n. 21
0
# =============================================================================

import math as m
import pychrono as chrono
import pychrono.fea as fea
import pychrono.mkl as mkl
import pychrono.irrlicht as chronoirr
import numpy as np

print("Copyright (c) 2017 projectchrono.org")

my_system = chrono.ChSystemSMC()

# Create the Irrlicht visualization (open the Irrlicht device,
# bind a simple user interface, etc. etc.)
application = chronoirr.ChIrrApp(my_system, "Brick Elements",
                                 chronoirr.dimension2du(800, 600), False, True)

# Easy shortcuts to add camera, lights, logo and sky in Irrlicht scene:
application.AddTypicalLogo()
application.AddTypicalSky()
application.AddTypicalLights()

application.AddTypicalCamera(
    chronoirr.vector3df(1.2, 0.6, 0.3),  # camera location
    chronoirr.vector3df(0.2, -0.2, 0.))  # "look at" location

print("-----------------------------------------------------------")
print("-----------------------------------------------------------")
print("     Brick Elements demo with implicit integration ")
print("-----------------------------------------------------------")
Esempio n. 22
0
# geometries (which would be inefficient)
#
# =============================================================================

import pychrono as chrono
import pychrono.irrlicht as chronoirr
import math as m

print("Copyright (c) 2017 projectchrono.org")

# Create a Chrono::Engine physical system
mphysicalSystem = chrono.ChSystemNSC()

# Create the Irrlicht visualization (open the Irrlicht device,
# bind a simple user interface, etc, etc.)
application = chronoirr.ChIrrApp(mphysicalSystem, "Gears annd pulleys",
                                 chronoirr.dimension2du(800, 600), False)

# Easy shortcuts to add camera, lights, logo, and sky in Irrlicht scene:
application.AddTypicalLogo()
application.AddTypicalSky()
application.AddTypicalLights()
application.AddTypicalCamera(chronoirr.vector3df(12, 15, -20))

# Contact material shared among all bodies
mat = chrono.ChMaterialSurfaceNSC()

# Create all rigid bodies.

radA = 2
radB = 4
ampl = 4
omg = 2 * chrono.CH_C_PI * freq
mod = chrono.ChFunction_Sine(0, freq, ampl)

# Actuate first slider using a link force
prismatic1.GetForce_Z().SetActive(True)
prismatic1.GetForce_Z().SetF(1)
prismatic1.GetForce_Z().SetModulationF(mod)

# Actuate second slider using a body force
frc2 = chrono.ChForce()
frc2.SetF_x(mod)
slider2.AddForce(frc2)

# Create the Irrlicht application
application = irr.ChIrrApp(system, "Actuated prismatic joint",
                           irr.dimension2du(800, 600), False, True)
application.AddTypicalLogo()
application.AddTypicalSky()
application.AddTypicalLights()
application.AddTypicalCamera(irr.vector3df(-1, 1.5, -6))

application.AssetBindAll()
application.AssetUpdateAll()

application.SetTimestep(1e-3)

x0 = slider1.GetPos().x

while application.GetDevice().run():
    time = system.GetChTime()
Esempio n. 24
0
        0,  # Mohr cohesive limit (Pa)
        30,  # Mohr friction limit (degrees)
        0.01,  # Janosi shear coefficient (m)
        4e7,  # Elastic stiffness (Pa/m), before plastic yield, must be > Kphi
        3e4  # Damping (Pa s/m), proportional to negative vertical speed (optional)
    )

# Set terrain visualization mode
terrain.SetPlotType(veh.SCMDeformableTerrain.PLOT_PRESSURE, 0, 30000.2)

# ------------------------------------------
# Create the Irrlicht run-time visualization
# ------------------------------------------

myapplication = chronoirr.ChIrrApp(mysystem, 'Deformable soil',
                                   chronoirr.dimension2du(1280, 720), False,
                                   True)
myapplication.AddTypicalSky()
myapplication.AddTypicalLogo(
    chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
myapplication.AddTypicalCamera(chronoirr.vector3df(2.0, 1.4, 0.0),
                               chronoirr.vector3df(0, tire_rad, 0))
myapplication.AddTypicalLights()
myapplication.AddLightWithShadow(
    chronoirr.vector3df(1.5, 5.5, -2.5),  # point
    chronoirr.vector3df(0, 0, 0),  # aim point
    3,  # radius (power)
    2.2,
    7.2,  # near, far
    40,  # angle of FOV
    512,  # resoluition
Esempio n. 25
0
   def __init__(self, render):

      self.animate = render
      self.observation_space = np.empty([30,])
      self.action_space = np.zeros([8,])
      self.info =  {}
    # ---------------------------------------------------------------------
    #
    #  Create the simulation system and add items
    #
      self.Xtarg = 1000.0
      self.Ytarg = 0.0
      self.d_old = np.linalg.norm(self.Xtarg + self.Ytarg)
      self.ant_sys = chrono.ChSystemNSC()

    # Set the default outward/inward shape margins for collision detection,
    # this is epecially important for very large or very small objects.
      chrono.ChCollisionModel.SetDefaultSuggestedEnvelope(0.001)
      chrono.ChCollisionModel.SetDefaultSuggestedMargin(0.001)

    #ant_sys.SetSolverType(chrono.ChSolver.Type_BARZILAIBORWEIN) # precise, more slow
      self.ant_sys.SetSolverMaxIterations(70)
      

      self.ant_material = chrono.ChMaterialSurfaceNSC()
      self.ant_material.SetFriction(0.5)
      self.ant_material.SetDampingF(0.2)
      self.ant_material.SetCompliance (0.0005)
      self.ant_material.SetComplianceT(0.0005)

      self.timestep = 0.01
      self.abdomen_x = 0.25
      self.abdomen_y = 0.25
      self.abdomen_z = 0.25

      self.leg_density = 250    # kg/m^3
      self.abdomen_density = 100
      self.abdomen_y0 = 0.4
      self.leg_length = 0.3
      self.leg_radius = 0.04
      self.ankle_angle = 60*(math.pi/180)
      self.ankle_length = 0.4
      self.ankle_radius = 0.04
      self.gain = 30

      self.abdomen_mass = self.abdomen_density * ((4/3)*chrono.CH_C_PI*self.abdomen_x*self.abdomen_y*self.abdomen_z)
      self.abdomen_inertia = chrono.ChVectorD((1/5)*self.abdomen_mass*(pow(self.abdomen_y,2)+pow(self.abdomen_z,2)),(1/5)*self.abdomen_mass*(pow(self.abdomen_x,2)+pow(self.abdomen_z,2)),(1/5)*self.abdomen_mass*(pow(self.abdomen_y,2)+pow(self.abdomen_x,2)))
      self.leg_mass = self.leg_density * self.leg_length * math.pi* pow (self.leg_radius,2)
      self.leg_inertia = chrono.ChVectorD(0.5*self.leg_mass*pow(self.leg_radius,2), (self.leg_mass/12)*(3*pow(self.leg_radius,2)+pow(self.leg_length,2)),(self.leg_mass/12)*(3*pow(self.leg_radius,2)+pow(self.leg_length,2)))
      self.ankle_mass = self.leg_density * self.ankle_length * math.pi* pow (self.ankle_radius,2)
      self.ankle_inertia = chrono.ChVectorD(0.5*self.ankle_mass*pow(self.ankle_radius,2), (self.ankle_mass/12)*(3*pow(self.ankle_radius,2)+pow(self.ankle_length,2)),(self.ankle_mass/12)*(3*pow(self.ankle_radius,2)+pow(self.ankle_length,2)))
      
      self.leg_limit = chrono.ChLinkLimit()
      self.ankle_limit = chrono.ChLinkLimit()
      self.leg_limit.SetRmax(math.pi/9)
      self.leg_limit.SetRmin(-math.pi/9)
      self.ankle_limit.SetRmax(math.pi/9)
      self.ankle_limit.SetRmin(-math.pi/9)
      
      if (self.animate) :
             self.myapplication = chronoirr.ChIrrApp(self.ant_sys)
             self.myapplication.AddShadowAll()
             self.myapplication.SetStepManage(True)
             self.myapplication.SetTimestep(self.timestep)
             self. myapplication.SetTryRealtime(True)  
             self.myapplication.AddTypicalSky()
             self.myapplication.AddTypicalLogo(chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
             self.myapplication.AddTypicalCamera(chronoirr.vector3df(0,1.5,0))
             self.myapplication.AddLightWithShadow(chronoirr.vector3df(4,4,0),    # point
                                            chronoirr.vector3df(0,0,0),    # aimpoint
                                            20,                 # radius (power)
                                            1,9,               # near, far
                                            90)                # angle of FOV
Esempio n. 26
0
def CastNode(nb):

    feaNB = fea.CastToChNodeFEAbase(nb)
    nodeFead = fea.CastToChNodeFEAxyzD(feaNB)
    return nodeFead


chrono.SetChronoDataPath("../../../data/")

time_step = 1e-3

my_system = chrono.ChSystemSMC()
my_system.Set_G_acc(chrono.ChVectorD(0, 0, -9.8))

# Create the Irrlicht visualization (open the Irrlicht device, bind a simple user interface, etc.)
application = chronoirr.ChIrrApp(my_system, "ANCF Shells",
                                 chronoirr.dimension2du(800, 600), False, True)

# Easy shortcuts to add camera, lights, logo and sky in Irrlicht scene:
application.AddTypicalLogo()
application.AddTypicalSky()
application.AddTypicalLights()
application.AddTypicalCamera(
    chronoirr.vector3df(-0.4, -0.3, 0.0),  # camera location
    chronoirr.vector3df(0.0, 0.5, -0.1))  # "look at" location

print("-----------------------------------------------------------\n")
print("------------------------------------------------------------\n")
print("     ANCF Shell Elements demo with implicit integration     \n")
print("-----------------------------------------------------------\n")

# Create a mesh, that is a container for groups of elements and their referenced nodes.
Esempio n. 27
0
    # f.write("grad_min:" + ','.join([f"{g:.6f}" for g in retlist[2]]) + '\n')
    f.write("fopt:" + ','.join([f"{fopt:.6f}" for fopt in fopts]) + '\n')
    f.write("iterations:" + ','.join([f"{ite}" for ite in iterations]) + '\n')
    f.write("message:" + ','.join([f"{m}" for m in messages]) + '\n')
    f.write("success:" + ','.join([f"{s}" for s in successes]) + '\n')

# with open(f"./../data/reconstruction/{filename}_real.txt", 'w') as f:
#     offset = bb_dz / 2.3
#     H = eval('_'.split(filename)[-1]) / math.tan(math.pi / 180.)
#     f.write("nodes_mm:" + ','.join([f"{n:.6f}" for n in nodes_inf_final]) + '\n')

# ---------------------------------------------------------------------
# IRRLICHT
# Create an Irrlicht application to visualize the system
#
myapplication = chronoirr.ChIrrApp(mysystem, 'Reconstruction shape',
                                   chronoirr.dimension2du(720, 540))
myapplication.AddTypicalSky(chrono.GetChronoDataPath() + 'skybox2/')
myapplication.AddTypicalCamera(chronoirr.vector3df(1.3 * bb_dz, 0., 0.))
myapplication.AddTypicalLights()
myapplication.SetShowInfos(False)

# ==IMPORTANT!== for Irrlicht to work
myapplication.AssetBindAll()
myapplication.AssetUpdateAll()
mysystem.SetupInitial()

# ---------------------------------------------------------------------
# SIMULATION
# Run the simulation

# Change the solver form the default SOR to the MKL Pardiso, more precise for fea.
        # by the pov .ini script in POV-Ray (do this at each simulation timestep)
        pov_exporter.ExportData()

        nstep = nstep + 1

    print("\n\nOk, Simulation done!")
    time.sleep(2)

if m_visualization == "irrlicht":

    # ---------------------------------------------------------------------
    #
    #  Create an Irrlicht application to visualize the system
    #

    myapplication = chronoirr.ChIrrApp(my_system, 'Test',
                                       chronoirr.dimension2du(1280, 720))

    myapplication.AddTypicalSky(chrono.GetChronoDataPath() + 'skybox/')
    myapplication.AddTypicalLogo(chrono.GetChronoDataPath() +
                                 'logo_pychrono_alpha.png')
    myapplication.AddTypicalCamera(chronoirr.vector3df(0.5, 0.5, 0.5),
                                   chronoirr.vector3df(0.0, 0.0, 0.0))
    myapplication.AddTypicalLights()
    #myapplication.AddLightWithShadow(chronoirr.vector3df(10,20,10),chronoirr.vector3df(0,2.6,0), 10 ,10,40, 60, 512);

    # ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
    # in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
    # If you need a finer control on which item really needs a visualization proxy in
    # Irrlicht, just use application.AssetBind(myitem); on a per-item basis.

    myapplication.AssetBindAll()
Esempio n. 29
0
# The joint is located at the global origin.  Its kinematic constraints will
# enforce orthogonality of the associated cross.

ujoint = chrono.ChLinkUniversal()
mysystem.AddLink(ujoint)
ujoint.Initialize(shaft_1, shaft_2,
                  chrono.ChFrameD(chrono.ChVectorD(0, 0, 0), rot))

# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#

myapplication = chronoirr.ChIrrApp(mysystem,
                                   'PyChrono example: universal joint',
                                   chronoirr.dimension2du(1024, 768))

myapplication.AddTypicalSky()
myapplication.AddTypicalLogo(
    chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
myapplication.AddTypicalCamera(chronoirr.vector3df(3, 1, -1.5))
myapplication.AddTypicalLights()

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.
# If you need a finer control on which item really needs a visualization proxy in
# Irrlicht, just use application.AssetBind(myitem) on a per-item basis.

myapplication.AssetBindAll()
Esempio n. 30
0
mvisualizebeamC.SetFEMdataType(fea.ChVisualizationFEAmesh.E_PLOT_NONE)
mvisualizebeamC.SetSymbolsThickness(0.006)
mvisualizebeamC.SetSymbolsScale(0.01)
mvisualizebeamC.SetZbufferHide(False)
my_mesh.AddAsset(mvisualizebeamC)


# ---------------------------------------------------------------------
#
#  Create an Irrlicht application to visualize the system
#


# Create the Irrlicht visualization (open the Irrlicht device,
# bind a simple user interface, etc. etc.)
myapplication = chronoirr.ChIrrApp(my_system, 'Test FEA beams', chronoirr.dimension2du(1024,768))

#application.AddTypicalLogo()
myapplication.AddTypicalSky()
myapplication.AddTypicalLogo(chrono.GetChronoDataFile('logo_pychrono_alpha.png'))
myapplication.AddTypicalCamera(chronoirr.vector3df(0.1,0.1,0.2))
myapplication.AddTypicalLights()

# ==IMPORTANT!== Use this function for adding a ChIrrNodeAsset to all items
# in the system. These ChIrrNodeAsset assets are 'proxies' to the Irrlicht meshes.

myapplication.AssetBindAll()

# ==IMPORTANT!== Use this function for 'converting' into Irrlicht meshes the assets
# that you added to the bodies into 3D shapes, they can be visualized by Irrlicht!