def compute_action(self, sensor, speed, direction=None):

        capture_time = time.time()

        if capture_time - self._start_time > 400:

            self._target = random.randint(0, len(self.positions))
            self._start_time = time.time()

        if direction == None:
            direction = self.compute_direction((0, 0, 0), (0, 0, 0))

        sensor = sensor[self._image_cut[0]:self._image_cut[1], :, :3]
        sensor = sensor[:, :, ::-1]

        sensor = scipy.misc.imresize(sensor, [
            self._config.network_input_size[0],
            self._config.network_input_size[1]
        ])

        image_input = sensor.astype(np.float32)

        #print future_image

        #print "2"

        image_input = np.multiply(image_input, 1.0 / 255.0)

        steer, acc, brake = self._control_function(image_input, speed,
                                                   direction, self._config,
                                                   self._sess,
                                                   self._train_manager)

        control = Control()
        control.steer = steer

        if control.steer > 0.3:
            control.steer = 1.0
        elif control.steer < -0.3:
            control.steer = -1.0
        else:
            control.steer = 0.0

        control.throttle = 1.0
        control.brake = 0.0
        # print brake

        control.hand_brake = 0
        control.reverse = 0

        return control
    def run_step(self, data, target):

        rewards = data[0]
        sensor = data[2][0]
        speed = rewards.speed
        direction,made_turn,completed = self.planner.get_next_command((rewards.player_x,rewards.player_y,22),(rewards.ori_x,rewards.ori_y,rewards.ori_z),\
          (target[0],target[1],22),(1.0,0.02,-0.001))
        #pos = (rewards.player_x,rewards.player_y,22)
        #ori =(rewards.ori_x,rewards.ori_y,rewards.ori_z)
        #pos,point = self.planner.get_defined_point(pos,ori,(target[0],target[1],22),(1.0,0.02,-0.001),self._select_goal)
        #direction = convert_to_car_coord(point[0],point[1],pos[0],pos[1],ori[0],ori[1])

        capture_time = time.time()

        sensor = sensor[self._image_cut[0]:self._image_cut[1], :, :]

        sensor = scipy.misc.imresize(sensor, [
            self._config.network_input_size[0],
            self._config.network_input_size[1]
        ])

        image_input = sensor.astype(np.float32)

        #print future_image
        #print direction
        #print "2"
        image_input = np.multiply(image_input, 1.0 / 255.0)

        steer, acc, brake = self._control_function(image_input, speed,
                                                   direction, self._config,
                                                   self._sess,
                                                   self._train_manager)

        if brake < 0.1:
            brake = 0.0
        if acc > 2 * brake:
            brake = 0.0

        control = Control()
        control.steer = steer
        control.throttle = acc
        control.brake = brake

        control.hand_brake = 0
        control.reverse = 0

        #### DELETE THIS VERSION NOT COMMITABLE
        made_turn = 0
        completed = 0

        return control, made_turn, completed
예제 #3
0
    def compute_action(self, sensor, speed):
        self._old_speed = speed
        global start_time
        """ Get Steering """
        if not self._autopilot:

            if self.joystick.get_button(buttons.steer_left):  #left
                self.steering_direction = -1
            elif self.joystick.get_button(buttons.steer_right):  #right
                self.steering_direction = 1
            else:
                self.steering_direction = 0  #when left or right button is not pressed, bring the steering to centre

            #acc_axis = self.joystick.get_axis(2)
            #brake_axis = self.joystick.get_axis(3)

            if (self.joystick.get_button(buttons.more_speed)):  #increase speed
                end_time = datetime.datetime.now()
                time_diff = (end_time -
                             start_time).microseconds / 1000  #in milliseconds
                if time_diff > 300:  #to ensure same click isnt counted multiple times
                    self._new_speed = self._old_speed + 0.7  #max speed = 7 kmph, changes in 10 steps
                    self._new_speed = min(
                        7, self._new_speed)  #restrict between 0-7
                    start_time = datetime.datetime.now()
            if (self.joystick.get_button(buttons.less_speed)):  #decrease speed
                end_time = datetime.datetime.now()
                time_diff = (end_time - start_time).microseconds / 1000
                if time_diff > 300:
                    self._new_speed = self._old_speed - 0.7
                    self._new_speed = max(0, self._new_speed)
                    start_time = datetime.datetime.now()

            if (self.joystick.get_button(buttons.rear_on)):
                self._rear = True
            if (self.joystick.get_button(buttons.rear_off)):
                self._rear = False

            control = Control()
            control.steer = self.steering_direction
            #control.throttle = -(acc_axis -1)/2.0
            if (self._new_speed - speed) > 0.05:
                control.throttle = (
                    (self._new_speed - speed) / 2.5
                ) + 0.4  # accl till carla speed nearly equal to actual speed, constant added to overcome friction
            else:
                control.throttle = 0  #if required speed is less than carla speed, do nothing. car will automatically slow down due to friction
            #control.brake = -(brake_axis -1)/2.0
            #if control.brake < 0.001:
            #	control.brake = 0.0
            control.brake = 0
            control.hand_brake = 0
            control.reverse = self._rear

        else:

            control = self._latest_data.ai_control
            if control.steer > 0.3:
                control.steer = 1.0
            elif control.steer < -0.3:
                control.steer = -1.0
            else:
                control.steer = 0.0

        return control
    def on_loop(self):
        self.step += 1
        keys = pygame.key.get_pressed()

        numAxes = self.js.get_numaxes()
        jsInputs = [ float(self.js.get_axis(i)) for i in range(numAxes)]

        print('Js inputs [%s]' % ', '.join(map(str, jsInputs)))
        restart = False

        control = Control()

        pressed_keys = []
        if keys[K_LEFT] or keys[K_a]:
            control.steer = -1.0
            pressed_keys.append('left')
        if keys[K_RIGHT] or keys[K_d]:
            control.steer = 1.0
            pressed_keys.append('right')
        if keys[K_UP] or keys[K_w]:
            control.throttle = 1.0
            pressed_keys.append('reverse' if self.reverse_gear else 'forward')
        if keys[K_DOWN] or keys[K_s]:
            control.brake = 1.0
            pressed_keys.append('brake')
        if keys[K_SPACE]:
            control.hand_brake = True
            pressed_keys.append('hand-brake')
        if keys[K_q]:
            self.reverse_gear = not self.reverse_gear
            pressed_keys.append('toggle reverse')
        if keys[K_r]:
            pressed_keys.append('reset')
            if time.time() - self.prev_restart_time > 2.:
                self.prev_restart_time = time.time()
                restart = True

        if time.time() - self.prev_restart_time < 2.:
            control.throttle = 0.0
            control.steer = 0.0

        control.steer = jsInputs[0]

        brakeCmd = (((jsInputs[1] - (-1)) * (1.0 - 0)) / (1.0 - (-1.0))) + 0
        throttleCmd = (((jsInputs[2] - (-1)) * (1.0 - 0)) / (1.0 - (-1.0))) + 0

        control.brake = brakeCmd
        control.throttle = throttleCmd

        control.reverse = self.reverse_gear
        self.carla.sendCommand(control)

        measurements = self.carla.getMeasurements()
        pack = measurements['PlayerMeasurements']
        self.img_vec = measurements['BGRA']
        self.depth_vec = measurements['Depth']
        self.labels_vec = measurements['Labels']

        if time.time() - self.prev_time > 1.:
            message = 'Step {step} ({fps:.1f} FPS): '
            message += '{speed:.2f} km/h, '
            message += '{other_lane:.0f}% other lane, {offroad:.0f}% off-road'
            message += ': pressed [%s]' % ', '.join(pressed_keys)

            message = message.format(
                step=self.step,
                fps=float(self.step - self.prev_step) / (time.time() - self.prev_time),
                speed=pack.forward_speed,
                other_lane=100 * pack.intersection_otherlane,
                offroad=100 * pack.intersection_offroad)

            empty_space = max(0, get_terminal_width() - len(message))
            sys.stdout.write('\r' + message + empty_space * ' ')
            sys.stdout.flush()

            self.prev_step = self.step
            self.prev_time = time.time()

        if restart:
            print('\n *** RESTART *** \n')
            player_pos = np.random.randint(self.num_pos)
            print('  Player pos %d \n' % (player_pos))
            self.carla.newEpisode(player_pos)