A rail grinding vehicle, comprising: a rail measurement system configured to obtain a profile of a rail by measurement; a first grinding motor having a grinding head; a second grinding motor having a grinding head; an actuation system (18a, 18b, 20) respectively coupled to the first grinding motor and the second grinding motor; and a controller configured to: cause the actuation system (18a, 18b, 20) to position the grinding head of the first grinding motor relative to the rail (12, 500) at an orientation selected based on a comparison of the profile of the rail (12, 500) and a rail template; cause the actuation system (18a, 18b, 20) to position the grinding head of the second grinding motor relative to a rail (12, 500) at an orientation selected based on a comparison of a model of the rail template updated to estimate metal removed by the first grinder and a rail template; determine at least one of a wavelength or an amplitude of corrugation (502, 504) of the rail (12, 500); select one of a grinding for profile mode and a grinding for corrugation mode based on the wavelength or the amplitude of the corrugation (502, 504); in response to the grinding for profile mode being selected, cause the first and second grinding motors to grind the rail (12, 500) for profile; and in response to the grinding for corrugation mode being selected, cause the first and second grinding motors to grind the rail (12, 500) for corrugation; wherein the controller is configured to: (a) compare the wavelength of the corrugation of the rail and a size of a grinding stone of at least one of the first and second grinding motors, and to select the grinding for profile mode based on the comparison; (b) compare the amplitude of the corrugation of the rail and a threshold, and to select the grinding for corrugation mode if the amplitude is above the threshold, or both (a) and (b). a rail measurement system configured to obtain a profile of a rail by measurement; a first grinding motor having a grinding head; a second grinding motor having a grinding head; an actuation system (18a, 18b, 20) respectively coupled to the first grinding motor and the second grinding motor; and a controller configured to: cause the actuation system (18a, 18b, 20) to position the grinding head of the first grinding motor relative to the rail (12, 500) at an orientation selected based on a comparison of the profile of the rail (12, 500) and a rail template; cause the actuation system (18a, 18b, 20) to position the grinding head of the second grinding motor relative to a rail (12, 500) at an orientation selected based on a comparison of a model of the rail template updated to estimate metal removed by the first grinder and a rail template; determine at least one of a wavelength or an amplitude of corrugation (502, 504) of the rail (12, 500); select one of a grinding for profile mode and a grinding for corrugation mode based on the wavelength or the amplitude of the corrugation (502, 504); in response to the grinding for profile mode being selected, cause the first and second grinding motors to grind the rail (12, 500) for profile; and in response to the grinding for corrugation mode being selected, cause the first and second grinding motors to grind the rail (12, 500) for corrugation; cause the actuation system (18a, 18b, 20) to position the grinding head of the first grinding motor relative to the rail (12, 500) at an orientation selected based on a comparison of the profile of the rail (12, 500) and a rail template; cause the actuation system (18a, 18b, 20) to position the grinding head of the second grinding motor relative to a rail (12, 500) at an orientation selected based on a comparison of a model of the rail template updated to estimate metal removed by the first grinder and a rail template; determine at least one of a wavelength or an amplitude of corrugation (502, 504) of the rail (12, 500); select one of a grinding for profile mode and a grinding for corrugation mode based on the wavelength or the amplitude of the corrugation (502, 504); in response to the grinding for profile mode being selected, cause the first and second grinding motors to grind the rail (12, 500) for profile; and in response to the grinding for corrugation mode being selected, cause the first and second grinding motors to grind the rail (12, 500) for corrugation; wherein the controller is configured to: (a) compare the wavelength of the corrugation of the rail and a size of a grinding stone of at least one of the first and second grinding motors, and to select the grinding for profile mode based on the comparison; (b) compare the amplitude of the corrugation of the rail and a threshold, and to select the grinding for corrugation mode if the amplitude is above the threshold, or both (a) and (b). (a) compare the wavelength of the corrugation of the rail and a size of a grinding stone of at least one of the first and second grinding motors, and to select the grinding for profile mode based on the comparison; (b) compare the amplitude of the corrugation of the rail and a threshold, and to select the grinding for corrugation mode if the amplitude is above the threshold, or both (a) and (b).