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
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)