If the ultrasonic cannot echo-locate the objects because they're too small, even with the sensor suspended very close to the floor, I suggest using a very sensitive feeler out front. It can be sticking forward like a jousting lance, and your robot can swivel back & forth while traveling to scan.
The trick to making it very sensitive is to:
(1) make it ...
For moving on defined path you can achieve amazing accuracy with LEGO MINDSTORMS EV3 odometry combined with good gyroscope but this still will result in a collision sooner or later.
Examples of such systems can be found here and here
Both of these systems use MICROINFINITY CruizCore XG1300L gyro/accelerometer but there are other good gyroscopes.
The only ...
You can read the tacho count and rotate a negative amount of degrees. Or you may want to use the Navigation class and create a path while you move, then you just need to follow the path back.
But unless the robot is perfectly calibrated it will fail miserably. I explain it all here http://thetechnicgear.com/2014/06/howto-calibrate-differential-drive-robot/