Sorry für die Frage, aber warum muss es eine Interruptroutine sein?
Ich würde es so machen:
while(true)
Asuro fährt
wenn Kollision
-> Stop und Drehen + Kontrollvariable setzen, eventuell kurz warten.
Danach wieder von vorne, das heisst Asuro fährt wieder los.
Falls es jetzt wieder zu einer Kollision kommt muss Asuro schaun ob die Kontrollvariable noch gesetzt ist. Wenn ja, 180° Drehung.
Wenn nein, 90° Drehung.
Die Kontrollvariable müsstest du nach einem gewissen Durchlauf wieder zurücksetzen. Mit sleeps würde ich nicht arbeiten, da für die "sleep-Zeit" der Programmablauf blockiert ist und somit auf eine eventuelle Kollision nicht reagiert werden kann.