How can I move an object along a path without it falling through?
Okay, here is what I did.

First I deleted the Rigid Body world and the curve you created and unused Empty's.

Then I selected your ground (and re-named it Ground). in Object Mode I applied Scale and Rotation press CTRL + A. In 'EDIT Mode' I selected the center Edge Loop and De-Selected the few vertices the fell over the edge of the road.

Then I duplicated the the selection 'SHIFT + D' and separated it from the mesh press "P" > Selection.

Then selected just the first vertex of what was the selection and pressed 'SHIFT + S' > Cursor to selection. Tabbed into Object mode and set the Origin to the 3d Cursor. 

Then selected the new mesh that was duplicated earlier applied rotation and scale just out of habit. Tabbed into Edit Mode and Then selected just the first vertex of what was the selection and pressed 'SHIFT + S' > Cursor to selection. Tabbed into Object mode and set the Origin to the 3d Cursor. Next convert the mesh to a curve. I re-named it Curve.Path.

Then pressed SHIFT + C to send the cursor to the center. Next select The Ground mesh and the Curve.Path and press SHIFT + S > Selection to Cursor.

Now select just the Curve.Path and Tab int Edit Mode. select the first vertex and press "W" > Switch Direction to flip the Normals. Also, 'SHIFT + S' > Cursor to selection. Tab into Object Mode and de-Select everything.

Then add an Empty 'SHIFT + A' > Empty. Add an Object Constraint > Follow Path. Choose the Curve.Path as the Target.

Select the Curve.Path and in it's Data you can animate it's Evaluation Time.

EDIT:

Check off 'Follow Path' to have the empty stay perpendicular to the path.


*I'm not sure all the steps here are necessary but I was being conservative and new it would work.

**This .blend contains only the Curve.Path and the Empty to keep it small. You can append them to your file if you choose and of course you'd need to parent R2D2 to the Empty.