Software Architectures for Mobile Robots