Anyway, the drift problem is not ROS related... is an universal issue in navigation. If your localization system does not take into account external references and only uses self-motion related measurements (called propioceptive, such as encoders , gyros or IMU), your localization will always drift, sooner or later. So the observation you say that "the wheel odometry is drifting" is not a problem, it is a fact.
That's why ancient sailors were very interested in knowing the stars. Stars were their external references. In robotics, you need some exteroceptive sensors (for instance cameras or lidars) to establish external references and cancel the odometry drift. In the context of ROS navigation, packages such as amcl or gmapping do this job according to different approaches and try to localize within a map, which is used/built as the required external reference.
A practical way to measure how good/bad is your wheel odometry is to drive the robot on a known square of , for instance, 5m side, while keeping all odom poses in rviz, (rviz set Fixed Frame to odom at Global Options). Once the square travel is finished, please take a screenshot of the rviz window, and share it, so we can evaluate how good or bad is your wheel odometry.
Gyro is part of IMU that read robot angle velocity. So choosing IMU or gyro is even not right question.
thanks for answering i saw somewhere gyro sensor that's why i'm confused , so which IMU sensor is working fine with ros ?