Beispiel #1
0
    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