@@ -131,10 +131,15 @@ def publish(self):
131
131
data = self .add_noise (data )
132
132
133
133
brokenWindSensorStatus = rospy .get_param ('broken_wind_sensors' , default = "not_broken" )
134
- if brokenWindSensorStatus != "not_broken" :
134
+ if brokenWindSensorStatus in ["stuck_at_zero" , "stuck_at_rand_constant" ,
135
+ "rand_const_error" , "stuck_at_last_value" ]:
135
136
rospy .logwarn_throttle (30 , "Broken Wind Sensor Status: " + brokenWindSensorStatus )
136
137
self .breakWindSensors (data , brokenWindSensorStatus )
137
138
139
+ elif brokenWindSensorStatus != "not_broken" :
140
+ rospy .logwarn_throttle (1.5 , "Unknown 'broken_wind_sensors' argument: \" {}\" ." .format (brokenWindSensorStatus )
141
+ + " Wind sensor data unchanged." )
142
+
138
143
self .publisher .publish (data )
139
144
140
145
def breakWindSensors (self , data , brokenWindSensorStatus ):
@@ -143,7 +148,7 @@ def breakWindSensors(self, data, brokenWindSensorStatus):
143
148
# Initialization code used by all types of brokenWindSensorStatus
144
149
if (self .brokenSensorData is None ):
145
150
np .random .seed (get_rosparam_or_default_if_invalid ('random_seed' , default = None , rosparam_type_cast = str ))
146
- brokenSensorID = np .random .randint (1 , high = 4 )
151
+ brokenSensorID = np .random .randint (1 , 4 )
147
152
148
153
if (brokenWindSensorStatus == "stuck_at_zero" ):
149
154
# This setting chooses a wind sensor which reads an angle of 0 and speed 0
@@ -185,11 +190,11 @@ def breakWindSensors(self, data, brokenWindSensorStatus):
185
190
186
191
if (self .brokenSensorData is None ):
187
192
188
- if np .random .randint (1 , high = 3 ) < 2 :
189
- # multiplier will be between 1/MAX_WINDSPEED_MULTIPLIER_ERROR and 1
193
+ if np .random .randint (0 , 2 ) :
194
+ # 50% chance multiplier will be between 1/MAX_WINDSPEED_MULTIPLIER_ERROR and 1
190
195
multiplier = 1.0 - np .random .ranf () * (1.0 - 1.0 / MAX_WINDSPEED_MULTIPLIER_ERROR )
191
196
else :
192
- # multiplier will be between 1 and MAX_WINDSPEED_MULTIPLIER_ERROR
197
+ # 50% chance multiplier will be between 1 and MAX_WINDSPEED_MULTIPLIER_ERROR
193
198
multiplier = 1.0 + np .random .ranf () * (MAX_WINDSPEED_MULTIPLIER_ERROR - 1.0 )
194
199
195
200
self .brokenSensorData = {'brokenSensorID' : brokenSensorID ,
@@ -225,8 +230,7 @@ def breakWindSensors(self, data, brokenWindSensorStatus):
225
230
226
231
if (self .brokenSensorData is None ):
227
232
self .brokenSensorData = {'brokenSensorID' : brokenSensorID ,
228
- 'loopsUntilBroken' : np .random .randint (MIN_LOOPS_TO_BREAK ,
229
- high = MAX_LOOPS_TO_BREAK ),
233
+ 'loopsUntilBroken' : np .random .randint (MIN_LOOPS_TO_BREAK , MAX_LOOPS_TO_BREAK ),
230
234
'loopsSoFar' : 0 , 'lastAngle' : None , 'lastSpeed' : None }
231
235
232
236
if self .brokenSensorData ['loopsSoFar' ] <= self .brokenSensorData ['loopsUntilBroken' ]:
@@ -246,10 +250,6 @@ def breakWindSensors(self, data, brokenWindSensorStatus):
246
250
+ "angle stuck at {} degrees, " .format (self .brokenSensorData ['lastAngle' ])
247
251
+ "speed stuck at {} knots" .format (self .brokenSensorData ['lastSpeed' ]))
248
252
249
- else :
250
- rospy .logwarn_throttle (1.5 , "Unknown 'broken_wind_sensors' argument: \" {}\" ." .format (brokenWindSensorStatus )
251
- + " Wind sensor data unchanged." )
252
-
253
253
def corrupt_wind_sensor (self , data , brokenSensorNumber , newAngle , newSpeed ):
254
254
# Helper function for corrupting wind data.
255
255
# Overwrites the angle and speed of the wind sensor specified by brokenSensorNumber
0 commit comments