Skip to content
This repository was archived by the owner on Jan 2, 2024. It is now read-only.
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions python/MOCK_sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,15 @@ def publish(self):
data = self.add_noise(data)

brokenWindSensorStatus = rospy.get_param('broken_wind_sensors', default="not_broken")
if brokenWindSensorStatus != "not_broken":
if brokenWindSensorStatus in ["stuck_at_zero", "stuck_at_rand_constant",
"rand_const_error", "stuck_at_last_value"]:
rospy.logwarn_throttle(30, "Broken Wind Sensor Status: " + brokenWindSensorStatus)
self.breakWindSensors(data, brokenWindSensorStatus)

elif brokenWindSensorStatus != "not_broken":
rospy.logwarn_throttle(1.5, "Unknown 'broken_wind_sensors' argument: \"{}\".".format(brokenWindSensorStatus)
+ " Wind sensor data unchanged.")

self.publisher.publish(data)

def breakWindSensors(self, data, brokenWindSensorStatus):
Expand All @@ -143,7 +148,7 @@ def breakWindSensors(self, data, brokenWindSensorStatus):
# Initialization code used by all types of brokenWindSensorStatus
if(self.brokenSensorData is None):
np.random.seed(get_rosparam_or_default_if_invalid('random_seed', default=None, rosparam_type_cast=str))
brokenSensorID = np.random.randint(1, high=4)
brokenSensorID = np.random.randint(1, 4)

if (brokenWindSensorStatus == "stuck_at_zero"):
# This setting chooses a wind sensor which reads an angle of 0 and speed 0
Expand Down Expand Up @@ -185,11 +190,11 @@ def breakWindSensors(self, data, brokenWindSensorStatus):

if(self.brokenSensorData is None):

if np.random.randint(1, high=3) < 2:
# multiplier will be between 1/MAX_WINDSPEED_MULTIPLIER_ERROR and 1
if np.random.randint(0, 2):
# 50% chance multiplier will be between 1/MAX_WINDSPEED_MULTIPLIER_ERROR and 1
multiplier = 1.0 - np.random.ranf() * (1.0 - 1.0 / MAX_WINDSPEED_MULTIPLIER_ERROR)
else:
# multiplier will be between 1 and MAX_WINDSPEED_MULTIPLIER_ERROR
# 50% chance multiplier will be between 1 and MAX_WINDSPEED_MULTIPLIER_ERROR
multiplier = 1.0 + np.random.ranf() * (MAX_WINDSPEED_MULTIPLIER_ERROR - 1.0)

self.brokenSensorData = {'brokenSensorID': brokenSensorID,
Expand Down Expand Up @@ -225,8 +230,7 @@ def breakWindSensors(self, data, brokenWindSensorStatus):

if(self.brokenSensorData is None):
self.brokenSensorData = {'brokenSensorID': brokenSensorID,
'loopsUntilBroken': np.random.randint(MIN_LOOPS_TO_BREAK,
high=MAX_LOOPS_TO_BREAK),
'loopsUntilBroken': np.random.randint(MIN_LOOPS_TO_BREAK, MAX_LOOPS_TO_BREAK),
'loopsSoFar': 0, 'lastAngle': None, 'lastSpeed': None}

if self.brokenSensorData['loopsSoFar'] <= self.brokenSensorData['loopsUntilBroken']:
Expand All @@ -246,10 +250,6 @@ def breakWindSensors(self, data, brokenWindSensorStatus):
+ "angle stuck at {} degrees, ".format(self.brokenSensorData['lastAngle'])
+ "speed stuck at {} knots".format(self.brokenSensorData['lastSpeed']))

else:
rospy.logwarn_throttle(1.5, "Unknown 'broken_wind_sensors' argument: \"{}\".".format(brokenWindSensorStatus)
+ " Wind sensor data unchanged.")

def corrupt_wind_sensor(self, data, brokenSensorNumber, newAngle, newSpeed):
# Helper function for corrupting wind data.
# Overwrites the angle and speed of the wind sensor specified by brokenSensorNumber
Expand Down