def __init__(self, line_follower, track): """ Creates the simulation. :param line_follower: the line follower robot. :type line_follower: LineFollower. :param track: the line track. :type track: Track. """ self.line_follower = line_follower self.track = track start = self.track.get_initial_point() self.line_follower.reset(Pose(start.x, start.y, 0.0)) self.point_list = [] # To draw the robot's path # Defining the sprite parameters sprite_params = Params() sprite_params.wheel_thickness = 0.01 sprite_params.sensor_thickness = 0.02 sprite_params.wheel_radius = line_follower.wheel_radius sprite_params.wheels_distance = line_follower.wheels_distance sprite_params.sensor_offset = line_follower.sensor_offset sprite_params.array_width = line_follower.line_sensor.array_width # Creating the robot sprite self.sprite = RobotSprite(sprite_params)
controller_params.max_linear_speed_command = 0.7 controller_params.kp = 50.0 controller_params.ki = 0.0 controller_params.kd = 3.0 # Defining robot parameters robot_params = Params() robot_params.sensor_offset = 0.05 robot_params.max_wheel_speed = 45.0 robot_params.wheel_radius = 0.02 robot_params.wheels_distance = 0.05 robot_params.wheel_bandwidth = 10.0 * 2.0 * pi # Defining line sensor parameters sensor_params = Params() sensor_params.sensor_range = 0.015 sensor_params.num_sensors = 7 sensor_params.array_width = 0.06 line_follower = LineFollower(Pose(0.5, 0.5, 45.0 * pi / 180.0), controller_params, robot_params, sensor_params) # Defining PSO hyperparameters hyperparams = Params() hyperparams.num_particles = 40 hyperparams.inertia_weight = 0.5 hyperparams.cognitive_parameter = 0.6 hyperparams.social_parameter = 0.8 lower_bound = np.array([0.0, 10.0, 0.0, 0.0]) upper_bound = np.array([0.9, 200.0, 1300.0, 30.0]) pso = ParticleSwarmOptimization(hyperparams, lower_bound, upper_bound) # Creating track # Switch to simple track if you are having trouble to make the robot learn in the complex track