|
1 | 1 | #!/usr/bin/env python3
|
| 2 | +""" |
| 3 | +This script loads a robot.yaml file and inserts it into the simulator. |
| 4 | +""" |
| 5 | + |
2 | 6 | import os
|
3 | 7 | import sys
|
4 | 8 | import asyncio
|
5 |
| - |
6 |
| -# Add `..` folder in search path |
7 |
| -current_dir = os.path.dirname(os.path.abspath(__file__)) |
8 |
| -newpath = os.path.join(current_dir, '..', '..') |
9 |
| -sys.path.append(newpath) |
10 |
| - |
11 |
| -from pygazebo.pygazebo import DisconnectError |
12 |
| - |
13 |
| -from pyrevolve import revolve_bot |
14 |
| -from pyrevolve import parser |
15 | 9 | from pyrevolve.SDF.math import Vector3
|
| 10 | +from pyrevolve import revolve_bot, parser |
16 | 11 | from pyrevolve.tol.manage import World
|
| 12 | +from pyrevolve.util.supervisor.supervisor_multi import DynamicSimSupervisor |
| 13 | +from pyrevolve.evolution import fitness |
17 | 14 |
|
18 | 15 |
|
19 | 16 | async def run():
|
20 | 17 | """
|
21 | 18 | The main coroutine, which is started below.
|
22 | 19 | """
|
| 20 | + robot_file_path = "experiments/examples/yaml/spider.yaml" |
| 21 | + |
23 | 22 | # Parse command line / file input arguments
|
24 | 23 | settings = parser.parse_args()
|
25 | 24 |
|
| 25 | + # Start Simulator |
| 26 | + if settings.simulator_cmd != 'debug': |
| 27 | + simulator_supervisor = DynamicSimSupervisor( |
| 28 | + world_file=settings.world, |
| 29 | + simulator_cmd=settings.simulator_cmd, |
| 30 | + simulator_args=["--verbose"], |
| 31 | + plugins_dir_path=os.path.join('.', 'build', 'lib'), |
| 32 | + models_dir_path=os.path.join('.', 'models'), |
| 33 | + simulator_name='gazebo' |
| 34 | + ) |
| 35 | + await simulator_supervisor.launch_simulator(port=settings.port_start) |
| 36 | + await asyncio.sleep(0.1) |
| 37 | + |
26 | 38 | # Load a robot from yaml
|
27 | 39 | robot = revolve_bot.RevolveBot()
|
28 |
| - robot.load_file("experiments/examples/yaml/spider.yaml") |
| 40 | + robot.load_file(robot_file_path) |
29 | 41 | robot.update_substrate()
|
30 | 42 | # robot._brain = BrainRLPowerSplines()
|
31 | 43 |
|
32 | 44 | # Connect to the simulator and pause
|
33 |
| - world = await World.create(settings) |
34 |
| - await world.pause(True) |
| 45 | + connection = await World.create(settings, world_address=('127.0.0.1', settings.port_start)) |
| 46 | + await asyncio.sleep(1) |
35 | 47 |
|
36 |
| - await world.delete_model(robot.id) |
37 |
| - await asyncio.sleep(2.5) |
| 48 | + # Starts the simulation |
| 49 | + await connection.pause(False) |
38 | 50 |
|
39 | 51 | # Insert the robot in the simulator
|
40 |
| - robot_manager = await world.insert_robot(robot, Vector3(0, 0, 0.25)) |
41 |
| - |
42 |
| - # Resume simulation |
43 |
| - await world.pause(False) |
| 52 | + robot_manager = await connection.insert_robot(robot, Vector3(0, 0, settings.z_start)) |
44 | 53 |
|
45 | 54 | # Start a run loop to do some stuff
|
46 | 55 | while True:
|
47 | 56 | # Print robot fitness every second
|
48 |
| - print("Robot fitness is {fitness}".format( |
49 |
| - fitness=robot_manager.fitness())) |
| 57 | + status = 'dead' if robot_manager.dead else 'alive' |
| 58 | + print(f"Robot fitness ({status}) is \n" |
| 59 | + f" OLD: {fitness.online_old_revolve(robot_manager)}\n" |
| 60 | + f" DISPLAC: {fitness.displacement(robot_manager, robot)}\n" |
| 61 | + f" DIS_VEL: {fitness.displacement_velocity(robot_manager, robot)}") |
50 | 62 | await asyncio.sleep(1.0)
|
51 |
| - |
52 |
| - |
53 |
| -def main(): |
54 |
| - def handler(loop, context): |
55 |
| - exc = context['exception'] |
56 |
| - if isinstance(exc, DisconnectError) \ |
57 |
| - or isinstance(exc, ConnectionResetError): |
58 |
| - print("Got disconnect / connection reset - shutting down.") |
59 |
| - sys.exit(0) |
60 |
| - raise context['exception'] |
61 |
| - |
62 |
| - try: |
63 |
| - loop = asyncio.get_event_loop() |
64 |
| - loop.set_exception_handler(handler) |
65 |
| - loop.run_until_complete(run()) |
66 |
| - except KeyboardInterrupt: |
67 |
| - print("Got CtrlC, shutting down.") |
68 |
| - |
69 |
| - |
70 |
| -if __name__ == '__main__': |
71 |
| - print("STARTING") |
72 |
| - main() |
73 |
| - print("FINISHED") |
0 commit comments