Skip to content

Commit

Permalink
Add rendering toggle to eagerx demos
Browse files Browse the repository at this point in the history
  • Loading branch information
jelledouwe committed Mar 4, 2022
1 parent cf6dca4 commit 27d01e0
Showing 5 changed files with 33 additions and 9 deletions.
3 changes: 2 additions & 1 deletion docs/reference/eagerx.md
Original file line number Diff line number Diff line change
@@ -47,4 +47,5 @@ where possible values for [demo_name] are: *demo_full_state.py*, *demo_pid.py*,
Setting `--device cpu` performs training and inference on CPU.
Setting `--name example` sets the name of the environment.
Setting `--eps 200` sets the number of training episodes.
Setting `--eval-eps 10` sets the number of evaluation episodes.
Setting `--eval-eps 10` sets the number of evaluation episodes.
Adding `--render` enables rendering of the environment.
1 change: 1 addition & 0 deletions projects/control/eagerx/README.md
Original file line number Diff line number Diff line change
@@ -32,6 +32,7 @@ Setting `--device cpu` performs training and inference on CPU.
Setting `--name example` sets the name of the environment.
Setting `--eps 200` sets the number of training episodes.
Setting `--eval-eps 10` sets the number of evaluation episodes.
Adding `--render` enables rendering of the environment.

## Citing EAGERx

10 changes: 8 additions & 2 deletions projects/control/eagerx/demos/demo_classifier.py
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@
import stable_baselines3 as sb


def example_classifier(name, eps, eval_eps, device):
def example_classifier(name, eps, eval_eps, device, render=False):
# Start roscore & initialize main thread as node
initialize("eagerx", anonymous=True, log_level=log.INFO)

@@ -55,12 +55,17 @@ def example_classifier(name, eps, eval_eps, device):
# Connect PID
graph.connect(action="yref", target=pid.inputs.yref)
graph.connect(source=pid.outputs.u, target=pendulum.actuators.action)
# Add rendering
if render:
graph.render(source=pendulum.sensors.image, rate=10, display=True)

# Define bridge
bridge = Bridge.make("GymBridge", rate=20)

# Initialize Environment (agnostic graph + bridge)
env = eagerx_gym.EagerGym(name=name, rate=20, graph=graph, bridge=bridge)
if render:
env.render(mode='human')

# Initialize and train stable-baselines model
model = sb.SAC("MlpPolicy", env, verbose=1, device=device)
@@ -82,7 +87,8 @@ def example_classifier(name, eps, eval_eps, device):
parser.add_argument("--name", help="Name of the environment", type=str, default="example")
parser.add_argument("--eps", help="Number of training episodes", type=int, default=200)
parser.add_argument("--eval_eps", help="Number of evaluation episodes", type=int, default=20)
parser.add_argument("--render", help="Toggle rendering", action='store_true')

args = parser.parse_args()

example_classifier(name=args.name, eps=args.eps, eval_eps=args.eval_eps, device=args.device)
example_classifier(name=args.name, eps=args.eps, eval_eps=args.eval_eps, device=args.device, render=args.render)
14 changes: 11 additions & 3 deletions projects/control/eagerx/demos/demo_full_state.py
Original file line number Diff line number Diff line change
@@ -25,25 +25,32 @@
import stable_baselines3 as sb


def example_full_state(name, eps, eval_eps, device):
def example_full_state(name, eps, eval_eps, device, render=False):
# Start roscore & initialize main thread as node
initialize("eagerx", anonymous=True, log_level=log.INFO)

# Define object
pendulum = Object.make("GymObject", "pendulum", gym_env_id="Pendulum-v0", gym_rate=20)
sensors = ["observation", "reward", "done"]
if render:
sensors.append("image")
pendulum = Object.make("GymObject", "pendulum", sensors=sensors, gym_env_id="Pendulum-v0", gym_rate=20)

# Define graph (agnostic) & connect nodes
graph = Graph.create(objects=[pendulum])
graph.connect(source=pendulum.sensors.observation, observation="observation", window=1)
graph.connect(source=pendulum.sensors.reward, observation="reward", window=1)
graph.connect(source=pendulum.sensors.done, observation="done", window=1)
graph.connect(action="action", target=pendulum.actuators.action, window=1)
if render:
graph.render(source=pendulum.sensors.image, rate=10, display=False)

# Define bridge
bridge = Bridge.make("GymBridge", rate=20)

# Initialize Environment (agnostic graph + bridge)
env = eagerx_gym.EagerGym(name=name, rate=20, graph=graph, bridge=bridge)
if render:
env.render(mode='human')

# Initialize and train stable-baselines model
model = sb.SAC("MlpPolicy", env, verbose=1, device=device)
@@ -64,7 +71,8 @@ def example_full_state(name, eps, eval_eps, device):
parser.add_argument("--name", help="Name of the environment", type=str, default="example")
parser.add_argument("--eps", help="Number of training episodes", type=int, default=200)
parser.add_argument("--eval_eps", help="Number of evaluation episodes", type=int, default=20)
parser.add_argument("--render", help="Toggle rendering", action='store_true')

args = parser.parse_args()

example_full_state(name=args.name, eps=args.eps, eval_eps=args.eval_eps, device=args.device)
example_full_state(name=args.name, eps=args.eps, eval_eps=args.eval_eps, device=args.device, render=args.render)
14 changes: 11 additions & 3 deletions projects/control/eagerx/demos/demo_pid.py
Original file line number Diff line number Diff line change
@@ -25,12 +25,15 @@
import stable_baselines3 as sb


def example_pid_only(name, eps, eval_eps, device):
def example_pid_only(name, eps, eval_eps, device, render=False):
# Start roscore & initialize main thread as node
initialize("eagerx", anonymous=True, log_level=log.INFO)

# Define object
pendulum = Object.make("GymObject", "pendulum", gym_env_id="Pendulum-v0", gym_rate=20)
sensors = ["observation", "reward", "done"]
if render:
sensors.append("image")
pendulum = Object.make("GymObject", "pendulum", sensors=sensors, gym_env_id="Pendulum-v0", gym_rate=20)

# Define PID controller & classifier
pid = Node.make("PidController", "pid", rate=20, gains=[8, 1, 0], y_range=[-4, 4])
@@ -44,12 +47,16 @@ def example_pid_only(name, eps, eval_eps, device):
graph.connect(source=pendulum.sensors.observation, target=pid.inputs.y)
graph.connect(action="yref", target=pid.inputs.yref)
graph.connect(source=pid.outputs.u, target=pendulum.actuators.action)
if render:
graph.render(source=pendulum.sensors.image, rate=10, display=False)

# Define bridge
bridge = Bridge.make("GymBridge", rate=20)

# Initialize Environment (agnostic graph + bridge)
env = eagerx_gym.EagerGym(name=name, rate=20, graph=graph, bridge=bridge)
if render:
env.render(mode='human')

# Initialize and train stable-baselines model
model = sb.SAC("MlpPolicy", env, verbose=1, device=device)
@@ -70,7 +77,8 @@ def example_pid_only(name, eps, eval_eps, device):
parser.add_argument("--name", help="Name of the environment", type=str, default="example")
parser.add_argument("--eps", help="Number of training episodes", type=int, default=200)
parser.add_argument("--eval_eps", help="Number of evaluation episodes", type=int, default=20)
parser.add_argument("--render", help="Toggle rendering", action='store_true')

args = parser.parse_args()

example_pid_only(name=args.name, eps=args.eps, eval_eps=args.eval_eps, device=args.device)
example_pid_only(name=args.name, eps=args.eps, eval_eps=args.eval_eps, device=args.device, render=args.render)

0 comments on commit 27d01e0

Please # to comment.