A component-based layered abstraction model for software portability across autonomous mobile robots