Get Started in 2 Minutes
================================
Let's get the `Half Cheetah `_ from OpenAI Gym running in Nimble.
We'll start a new Python script by importing Nimble and PyTorch::
import nimblephysics as nimble
import torch
Download the :download:`half_cheetah.skel <./_static/robots/half_cheetah.skel>` file, and place it in the same directory as your Python script.
We'll load :code:`half_cheetah.skel`, and that'll define a world containing a half-cheetah robot and a floor::
# Load the world
world = nimble.loadWorld("./half_cheetah.skel")
Next we'll set up some PyTorch tensors to hold the state of our physics engine, and the current action command we're sending to the engine.
These are PyTorch tensors, and not numpy arrays, because we can backprop into them! (We'll do that in :ref:`Backprop`)
.. code-block:: python
# Set up initial state
initialState = torch.zeros((world.getStateSize()))
action = torch.zeros((world.getActionSize()))
Now we're done with setup, and we're ready to run a physics simulation. A simulation is just a sequence of calls to the :code:`nimble.timestep()` function::
# Run a simulation for 300 timesteps
state = initialState
states = []
for _ in range(300):
state = nimble.timestep(world, state, action)
states.append(state)
The above code block runs 300 timesteps of simulation, and saves each state to the List :code:`states`.
Once we've saved a list of states from a simulation, we can use Nimble's built-in web-based GUI to see what we just built::
# Display our trajectory in a GUI
gui = nimble.NimbleGUI(world)
gui.serve(8080) # host the GUI on localhost:8080
gui.loopStates(states) # tells the GUI to animate our list of states
gui.blockWhileServing() # block here so we don't exit the program
If you run the above code, and open up your web browser and visit `http://localhost:8080 `_ you should
see a looping rendering of a `Half Cheetah `_ robot collapsing onto the floor. You can use your left mouse button to rotate the
view, and the right mouse button to move the camera around.
Here's the whole file we just created, which loads and simulates the :download:`half_cheetah.skel <./_static/robots/half_cheetah.skel>` world, then displays the results::
import nimblephysics as nimble
import torch
# Load the world
world = nimble.loadWorld("./half_cheetah.skel")
# Set up initial state
initialState = torch.zeros((world.getStateSize()))
action = torch.zeros((world.getActionSize()))
# Run a simulation for 300 timesteps
state = initialState
states = []
for _ in range(300):
state = nimble.timestep(world, state, action)
states.append(state)
# Display our trajectory in a GUI
gui = nimble.NimbleGUI(world)
gui.serve(8080) # host the GUI on localhost:8080
gui.loopStates(states) # tells the GUI to animate our list of states
gui.blockWhileServing() # block here so we don't exit the program
To make robots do something more interesting than just falling on the floor, read the following tutorials for
how to implement different popular control strategies in Nimble. Or you could stop here and just invent your own!