I am thinking of using a accelerometer to calculate distance. Ultrasonic sensor to help maneuver around objects and a compass to make sure the lawnmower always follows a correct path even when taken off path by maneuvering around an object. Is this a possible way for a navigation system? Also what compass do you recommend me using?
What you are describing is called a "dead reckoning" system. This won't work for any long periods of running (though can be useful when other, more accurate methods aren't available - such as when you are using DGPS and suddenly find yourself without signal).
You might want to keep such a system as a backup option, though.
There aren't many other options available - that at least are simple. You could always try some form of SLAM, if you are so inclined (perhaps building a map using sonar, IR, and cameras) - note that this takes it out of the Arduino range of microcontrollers (you would probably need to feed the sensor readings back to a PC or something, and integrate from there).
Another option might be to (somehow) place a "random" layout of magnets on the lawn (small rare-earth magnets epoxied to plastic golf tees), and then add a ring of hall-effect sensors to the robot to detect the magnets as they passed over, ultimately building up a map that way (plus using some SLAM techniques to build up a probability distribution of the map so you can roughly tell where you are at).
Alternatively, you could set up closely spaced magnets as a "trail" (kinda a passive form of a buried wire - which I assume you are trying to avoid?)...
If there aren't any obstacles in the way around the robot - you could set up ultrasonic receivers around the yard, then mount a spinning transmitter on the robot - and ping; the angle of the transmitter to the receivers plus some triangulation could give you a rough location estimate.
No single one of these solutions will give you anything perfect or accurate, but a combination can ultimately help.