class Uncooperative(Tree): with F('sender failure') as sender: sender << (software_bug() | hw.Bluetooth.sender()) with F('receiver failure') as receiver: receiver << (software_bug() | hw.Bluetooth.receiver()) design = P('protocol design failure (T2T)', failure_rate=0) failure = T('uncooperative behavior\n(explores cells twice, ...)') failure << (sender | receiver | hw.Bluetooth.medium() | design)
class EscortNoLED(Tree): led = P('primary indicator LED failure', failure_rate=1e-5) with F('not aware of escorting') as not_aware: not_aware << (hw.EPuck.memory_fault() | Escort.unintentional) failure = T('escorting, but\nno LED indication') failure << (led | not_aware | software_bug())
class SeeNoLed(Tree): primary = P('primary failure\nof the display-LED', failure_rate=1e-5) software = software_bug() not_turned_on = hw.EPuck.not_turned_on() failure = T('clear line of sight,\nbut no LED indication') failure << (VictimSilent.failure | proto.SOS.receiver | primary | software | not_turned_on)
class SpuriousMovements(Tree): turn = F('does not\nstop turning\nwhile sensing\nangle to victim') turn << (VictimSilent.failure.as_leaf() | hw.ExtBoard.failure) badcolor = S("Tin Bot's physical color\nis not hardcoded color") failure = T('spurious movements\n(e.g., spin around, drive circles, ...)') failure << (proto.LPS.failure.as_leaf() | software_bug() | badcolor | Proximity.failure() | Uncooperative.failure.as_leaf() | turn)
class StandingStill(Tree): with F('no initial position from LPS') as no_initial_lps: user = S('user did not\nenable LPS') no_initial_lps << (proto.LPS.failure | user) with F('wheels do not turn') as wheel_fault: blocked = S('wheels blocked') wheel_fault << (hw.Motor.failure | blocked) bad_setup = S('bad setup') software = software_bug() failure = T('standing still') failure << (no_initial_lps | bad_setup | software | wheel_fault | hw.EPuck.failure | RunIntoWall.failure | Escort.hang)
class IgnoreVictim(Tree): conflict = F('conflicting data\nabout victim') conflict << (hw.EPuck.memory_fault() | S('user moved\nvictim') | Uncooperative.failure.as_leaf()) late = P('too high min-distance\nfor sensing again', failure_rate=1e-4) no_triang = F('triangulation fails') no_triang << (late | software_bug()) overwrite = F('information gets overwritten\nbefore E-Puck picks it up') overwrite << Uncooperative.design() failure = T('not using information\nabout victim') failure << (hw.ExtBoard.failure.as_leaf() | conflict | no_triang | overwrite)
class VictimSilent(Tree): software = software_bug() failure = T('victim\'s LED does not\nsend valid signal') failure << (software | hw.Victim.failure)