def main(): global default_model, default_scenario beamng = BeamNGpy('localhost', 64256, home='C:/Users/merie/Documents/BeamNG.research.v1.7.0.1') #scenario = Scenario('smallgrid', 'spawn_objects_example') scenario = Scenario(default_scenario, 'research_test', description='Random driving for research') vehicle = Vehicle('ego_vehicle', model=default_model, licence='PYTHON') vehicle = setup_sensors(vehicle) spawn = spawn_point(default_scenario) scenario.add_vehicle(vehicle, pos=spawn['pos'], rot=spawn['rot'], rot_quat=spawn['rot_quat']) scenario.make(beamng) bng = beamng.open() bng.load_scenario(scenario) bng.start_scenario() vehicle.update_vehicle() d1 = bng.poll_sensors(vehicle) cum_list = [] bound = 0.0 for i in range(3): for _ in range(45): bound = bound + 0.0 # 0.1 # vehicle.save() vehicle.update_vehicle() d2 = bng.poll_sensors(vehicle) throttle = 1.0 #throttle = random.uniform(0.0, 1.0) steering = random.uniform(-1 * bound, bound) brake = 0.0 #random.choice([0, 0, 0, 1]) vehicle.control(throttle=throttle, steering=steering, brake=brake) pointName = "{}_{}".format(i, _) cum_list.append(pointName) vehicle.saveRecoveryPoint(pointName) bng.step(20) print("SEGMENT #{}: COMPARE DAMAGE".format(i)) damage_diff = compare_damage(d1, d2) d1 = d2 # "Back up" 1 second -- load vehicle at that time in that position. backup_pointName = backup(cum_list, 0.001) print('recovering to {}'.format(pointName)) loadfile = vehicle.loadRecoveryPoint(backup_pointName) print('loadfile is {}'.format(loadfile)) bng.pause() vehicle.update_vehicle() vehicle.load(loadfile) #vehicle.load("vehicles/pickup/vehicle.save.json") bng.resume() #vehicle.startRecovering() #time.sleep(1.5) #vehicle.stopRecovering() vehicle.update_vehicle() bng.pause() time.sleep(2) # vehicle.load("vehicles/pickup/vehicle.save.json") bng.resume() bng.close()
def main(): random.seed(1703) setup_logging() beamng = BeamNGpy('localhost', 64256, home='C:/Users/merie/Documents/BeamNG.research.v1.7.0.1') state_cfg = Config() parts_cfg = Config() # Create a scenario in west_coast_usa scenario = Scenario('west_coast_usa', 'research_test', description='Random driving for research') # Set up first vehicle, with two cameras, gforces sensor, lidar, electrical # sensors, and damage sensors vehicle = Vehicle('ego_vehicle', model='etk800', licence='RED', color='Red') vehicle = setup_sensors(vehicle) scenario.add_vehicle(vehicle, pos=(-717.121, 101, 118.675), rot=None, rot_quat=(0, 0, 0.3826834, 0.9238795)) # Compile the scenario and place it in BeamNG's map folder #scenario.make(beamng) # Start BeamNG and enter the main loop bng = beamng.open(launch=True) try: #bng.hide_hud() bng.set_deterministic() # Set simulator to be deterministic bng.set_steps_per_second(60) # With 60hz temporal resolution # Load and start the scenario bng.load_scenario(scenario) bng.start_scenario() # Put simulator in pause awaiting further inputs bng.pause() pcfg = vehicle.get_part_config() assert vehicle.skt # Send random inputs to vehicle and advance the simulation 20 steps #for _ in range(1024): for _ in range(30): throttle = random.uniform(0.0, 1.0) steering = random.uniform(-1.0, 1.0) brake = random.choice([0, 0, 0, 1]) vehicle.control(throttle=throttle, steering=steering, brake=brake) # bng.step(20) bng.step(20) # Retrieve sensor data and show the camera data. sensors = bng.poll_sensors(vehicle) print('\n{} seconds passed.'.format(sensors['timer']['time'])) print("step in loop {}".format(_)) finally: sensors = bng.poll_sensors(vehicle) for s in sensors.keys(): print("{} : {}".format(s, sensors[s])) damage_dict = sensors['damage'] state_cfg.update(sensors['damage']) state_cfg.update(vehicle.state) state_cfg.save('{}/state_cfg.json'.format(beamng.home)) vehicle.annotate_parts() vehicle.update_vehicle() #part_options = vehicle.get_part_options() parts_cfg_dict = vehicle.get_part_config() parts_cfg.load_values(vehicle.get_part_config()) #parts_cfg.update(vehicle.get_part_config()) parts_cfg.save('{}/parts_cfg.json'.format(beamng.home)) vehicle.save() bng.close() # reload scenario with saved config random.seed(1703) setup_logging() beamng = BeamNGpy('localhost', 64256, home='C:/Users/merie/Documents/BeamNG.research.v1.7.0.1') loaded_config = state_cfg.load("{}/state_cfg.json".format(beamng.home)) scenario = Scenario('west_coast_usa', 'research_test', description='Random driving for research') vehicle = Vehicle('ego_vehicle', model='etk800', licence='RED', color='Red') vehicle = setup_sensors(vehicle) vehicle.set_part_config(parts_cfg) scenario.add_vehicle(vehicle, pos=tuple(state_cfg.pos), rot=None, rot_quat=beamngpy.angle_to_quat(state_cfg.dir)) scenario.make(beamng) bng = beamng.open(launch=True) bng.spawn_vehicle(vehicle, pos=tuple(state_cfg.pos), rot=None, rot_quat=beamngpy.angle_to_quat(state_cfg.dir)) # TODO: debug scenario restart # scenario.restart() try: bng.hide_hud() bng.set_deterministic() # Set simulator to be deterministic bng.set_steps_per_second(60) # With 60hz temporal resolution # Load and start the scenario bng.load_scenario(scenario) bng.start_scenario() # Put simulator in pause awaiting further inputs bng.pause() assert vehicle.skt vehicle.load() # Send random inputs to vehicle and advance the simulation 20 steps #for _ in range(1024): for _ in range(30): throttle = random.uniform(0.0, 1.0) steering = random.uniform(-1.0, 1.0) brake = random.choice([0, 0, 0, 1]) vehicle.control(throttle=throttle, steering=steering, brake=brake) # bng.step(20) bng.step(20) # Retrieve sensor data and show the camera data. sensors = bng.poll_sensors(vehicle) print('\n{} seconds passed.'.format(sensors['timer']['time'])) print("step in loop {}".format(_)) finally: sensors = bng.poll_sensors(vehicle) for s in sensors.keys(): print("{} : {}".format(s, sensors[s])) state_cfg.update(sensors['damage']) state_cfg.update(vehicle.state) state_cfg.save('{}/state_cfg.json'.format(beamng.home)) parts_cfg.update(vehicle.get_part_config()) parts_cfg.save('{}/parts_cfg.json'.format(beamng.home)) bng.close()