Also zu Java und Android: Auf Android läuft keine JVM, sondern die Dalvik-VM diese unterstützt nicht alle Java Standardbibliotheken. Wenn man sich mit den Gemeinsamkeiten vertraut macht und nur gegen diese Komponenten implementiert (bzw. weitere Abstraktionsschichten einführt), kann man seinen Code sowohl für java, als auch für Android verwenden. Java ist von der Plattformunabhängigkeit natürlich nett, serielle Schnittstelle ist aber ein Problem. Besser ist es, das ganze über Bluetooth zu lösen, dann hat man auch gleich eine einheitliche Anbindung für PC, Smartphone, Mac etc.

Das Visual Studio ist natürlich der heilige Grahl der IDEs, es gibt einfach keine bessere (ja, ich trau mich, das so diktatorisch zu sagen ;D). Zusammen mit der tollen Klassenbibliothek von C# ist das natürlich eine wunderbare Programmierumgebung.
Wenn die Software allerdings ordentlich modelliert worden ist, ist die Sprache nebensächlich, weil du dir dann eh den Großteil des Codes generieren lassen wirst.

OSM, Gmaps etc: Kannst du in jeder Sprache einbinden, musst halt nur die Webservices einbinden. Ich persönlich würde zu OSM raten. Die Kartendaten sind frei verfügbar und es gibt Server, von denen du fertige MapTiles runterladen kannst (falls du nicht selber rendern möchtest). Gmaps ist problematisch: du darfst die Karten nur verwenden, wenn du sie auf einer frei zugänglichen Website anzeigst. Ich glaube nicht, dass du deinen Roboter über ein öffentliches Webinterface steuern möchtest. ;D

Je nachdem, wie viel du selber machen möchtest, wäre das Paparazzi Projekt vielleicht für dich interessant.