robot_localization Map, Odom, and drift.
So we have a robot that uses the Odom frame to navigate using an IMU and 4 encoders. We have a Map frame that also receives gps input on top of the filtered output from the first localization node. As expected the position of the robot relative to 0,0 drifts over time in the Odom frame makeing it eventually useless if I wanted to drive back to say 0,0 and be in the same real world location that the robot started. As I understand it the purpose of the Map frame is to provide location data that can be used to correct for this drift however beacuse of its noisy nature for very short movements its unsuitable for navigation thus the existence of Odom.
My problem is I don't know how to correct the robots location in Odom using date from the Map frame. My expectation based on what knowledge I do have is that there would be a method to input date from Map whenever the positions varies by more than a certain amount thus preventing the drift from growing larger without bound but also allowing for the continuous nature of Odom. This wouldn't prevent drift just bound it by the noise level of your Maps accuracy. Thus also allowing the fine small movement that Odom is used for such as driving forward 1 meter without jumping all round the point as you try to do so.
Can someone tell me how to do this or if I am completely off base how this problem should be approached.
EDIT: To get clarification the amcl package can use a map generated by robot_localization and an odom_frame generated by robot localization devoid of any laser based data whatsoever? I ask beacuse the code and wiki info on amcl make it sound like it only works if the map was generated using laser data rather then just being a map_frame that is nothing more than the robots current location in either frame and needing a transform between the two frames positions.