self-localization algorithm