コード例 #1
0
ファイル: spawning5.py プロジェクト: MissMeriel/BeamNGpy
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()
コード例 #2
0
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()