An architecture for an autonomous vehicle uses a top-down approach to enable fully automated driving. The architecture is modular and compatible with hardware from different manufacturers. Each modular component can be tailored for individual cars, which have different vehicle control subsystems and different sensor subsystems.