|
@@ -13,17 +13,11 @@ conn = ArduinoSlave()
|
|
|
|
|
|
class AcusticSensor:
|
|
|
def __init__(self,conf,up_queue,down_queue,calibration_state):
|
|
|
- self.sensor_distance = conf["ac_sensor"]["sensor_distance"]
|
|
|
- self.field_heigth = conf["field"]["y"]
|
|
|
- self.field_length = conf["field"]["x"]
|
|
|
- self.sensor_y_offset = conf["ac_sensor"]["y_offset"]
|
|
|
- self.left_sensor_x_offset = conf["ac_sensor"]["left_x_offset"]
|
|
|
- self.rigth_sensor_x_offset = conf["ac_sensor"]["rigth_x_offset"]
|
|
|
- self.sonic_speed = conf["ac_sensor"]["sonicspeed"]
|
|
|
- self.overhead = conf["ac_sensor"]["overhead"]
|
|
|
self.up_queue = up_queue
|
|
|
self.down_queue = down_queue
|
|
|
self.calibration_state = calibration_state
|
|
|
+ self.conf = conf
|
|
|
+ self.ac_conf = conf["ac_sensor"]
|
|
|
|
|
|
def start(self):
|
|
|
self.running = True
|
|
@@ -98,7 +92,7 @@ class AcusticSensor:
|
|
|
self.calibration_state.reset_state()
|
|
|
return
|
|
|
left_time_1 = statistics.mean(self.time_vals[0])
|
|
|
- rigth_time_2 = statistics.mean(self.time_vals[1])
|
|
|
+ right_time_2 = statistics.mean(self.time_vals[1])
|
|
|
self.calibration_state.next_state()
|
|
|
|
|
|
while self.calibration_state.return_state() != 4:
|
|
@@ -119,27 +113,27 @@ class AcusticSensor:
|
|
|
self.calibration_state.reset_state()
|
|
|
return
|
|
|
left_time_2 = statistics.mean(self.time_vals[0])
|
|
|
- rigth_time_1 = statistics.mean(self.time_vals[1])
|
|
|
+ right_time_1 = statistics.mean(self.time_vals[1])
|
|
|
self.calibration_state.next_state()
|
|
|
|
|
|
timedif = left_time_2 - left_time_1
|
|
|
- distance_1 = math.sqrt(self.left_sensor_x_offset**2 + (self.sensor_y_offset + self.field_heigth)**2 )
|
|
|
- distance_2 = math.sqrt((self.left_sensor_x_offset + self.field_length)**2 + (self.sensor_y_offset + self.field_heigth)**2 )
|
|
|
+ distance_1 = math.sqrt(float(self.ac_conf["left_x_offset"])**2 + (float(self.ac_conf["y_offset"]) + float(self.conf["field"]["y"]))**2 )
|
|
|
+ distance_2 = math.sqrt((float(self.ac_conf["left_x_offset"]) + float(self.conf["field"]["x"])**2 + (float(self.ac_conf["y_offset"]) + float(self.conf["field"]["y"])))**2 )
|
|
|
distancedif = distance_2 - distance_1
|
|
|
sonicspeed_1 = distancedif / timedif
|
|
|
overhead_1 = statistics.mean((left_time_1 - distance_1/sonicspeed_1,left_time_2 - distance_2/sonicspeed_1))
|
|
|
print(left_time_1,distance_1,sonicspeed_1,left_time_2,distance_2,sonicspeed_1)
|
|
|
|
|
|
- timedif = rigth_time_2 - rigth_time_1
|
|
|
- distance_1 = math.sqrt(self.rigth_sensor_x_offset**2 + (self.sensor_y_offset + self.field_heigth)**2 )
|
|
|
- distance_2 = math.sqrt((self.rigth_sensor_x_offset + self.field_length)**2 + (self.sensor_y_offset + self.field_heigth)**2 )
|
|
|
+ timedif = right_time_2 - right_time_1
|
|
|
+ distance_1 = math.sqrt(float(self.ac_conf["right_x_offset"])**2 + (float(self.ac_conf["y_offset"]) + float(self.conf["field"]["y"]))**2 )
|
|
|
+ distance_2 = math.sqrt((float(self.ac_conf["right_x_offset"]) + float(self.conf["field"]["x"])**2 + (float(self.ac_conf["y_offset"]) + float(self.conf["field"]["y"])))**2 )
|
|
|
distancedif = distance_2 - distance_1
|
|
|
sonicspeed_2 = distancedif / timedif
|
|
|
- overhead_2 = statistics.mean((rigth_time_1 - distance_1/sonicspeed_2,rigth_time_2 - distance_2/sonicspeed_2))
|
|
|
+ overhead_2 = statistics.mean((right_time_1 - distance_1/sonicspeed_2,right_time_2 - distance_2/sonicspeed_2))
|
|
|
|
|
|
- self.sonic_speed = statistics.mean((sonicspeed_1,sonicspeed_2))
|
|
|
- self.overhead = statistics.mean((overhead_1,overhead_2))
|
|
|
- print("calibration result",self.sonic_speed,self.overhead)
|
|
|
+ self.ac_conf["sonicspeed"] = str(statistics.mean((sonicspeed_1,sonicspeed_2)))
|
|
|
+ self.ac_conf["overhead"] = str(statistics.mean((overhead_1,overhead_2)))
|
|
|
+ print("calibration result",float(self.ac_conf["sonicspeed"]),float(self.ac_conf["overhead"]))
|
|
|
self.calibration_state.next_state()
|
|
|
|
|
|
def read(self):
|
|
@@ -149,12 +143,12 @@ class AcusticSensor:
|
|
|
def calculate_position(self,values):
|
|
|
try:
|
|
|
val1, val2 = values
|
|
|
- val1 -= self.overhead
|
|
|
- val2 -= self.overhead
|
|
|
- distance_left = val1 * self.sonic_speed
|
|
|
- distance_rigth = val2 * self.sonic_speed
|
|
|
- x = (self.sensor_distance**2 - distance_rigth**2 + distance_left**2) / (2*self.sensor_distance) + self.left_sensor_x_offset
|
|
|
- y = math.sqrt(distance_left**2 - x**2) + self.sensor_y_offset
|
|
|
+ val1 -= float(self.ac_conf["overhead"])
|
|
|
+ val2 -= float(self.ac_conf["overhead"])
|
|
|
+ distance_left = val1 * float(self.ac_conf["sonicspeed"])
|
|
|
+ distance_right = val2 * float(self.ac_conf["sonicspeed"])
|
|
|
+ x = (float(self.ac_conf["sensor_distance"])**2 - distance_right**2 + distance_left**2) / (2*float(self.ac_conf["sensor_distance"])) + float(self.ac_conf["left_x_offset"])
|
|
|
+ y = math.sqrt(abs(distance_left**2 - x**2)) + float(self.ac_conf["y_offset"])
|
|
|
return(x,y)
|
|
|
except Exception as e:
|
|
|
print(values)
|