Okay, dann legen wir mal los:

Ihr habt nun die Wahl zwischen einem nativ programmierten µC und einem eingebetteten Linux System. Beides hat vor und Nachteile. Der größte Nachteil eines Linux Systems ist das fehlen jeglicher Hart-Echtzeitfähigkeit bedingt durch das OS. Ich nehme mal an, dass ihr wisst, wie ein Os parallele Prozesse ablaufen lässt: Es nutzt Prozessmultiplexing. Das bedeutet, es lässt einen Prozess laufen und nach einer bestimmten Zeit, legt es ihn still und geht über zum nächsten, und so weiter und so fort. In einem Echtzeitsystem ist allerdings eine sofortige Ausgabe vonnöten. Wie "echtzeitfähig" so ein System denn nun wirklich ist, müsst ihr für euch definieren und auch, ob ihr so etwas braucht.Wenn euch ein paar ms Verzögerung nichts ausmachen, dann braucht ihr auch nicht wirklich ein Echtzeitsystem. Aber wenn der Roboter relativ schnell fährt, wäre es vielleicht vonnöten, sofort Aktionen zu triggern.

Ihr wollt einen autonomen Roboter bauen und fragt euch nun, was ihr nutzen wollt: Ein modulares System oder einen kleinen Rechner. Mit dem modularen System seid ihr sehr sehr nahe an der Hardware, was euch als Informatikern vermutlich gar nicht gefällt. Natürlich bieten diese Bricks auch Java oder Python als Programmiersprache an, doch da drängt sich mir die Frage auf wie leistungsfähig ein solcher SAM Prozessor mir einer JRE ist. Meine Vermuntung: Entweder ist er schnell oder er hat eine vollständige JRE. Echtzeitfähigkeit kann man da auch vergessen.

Auf dem RBpi läuft auch ein kleines OS, was euch ebenfalls eine glatte Oberfläche bietet, um eine JRE darauf zu setzen. Hier müsstet ihr wohl noch ein bis zwei Kernelmodule kompillieren und einbinden. Das wird ein wenig frickelig, aber im Endeffekt ist das kein großer Act. Was ihr zum RBpi noch braucht ist eine eigene Elektronik, die an die entsprechenden Schnittstellen angeschlossen wird. Hier könnt ihr euch an die Community wenden. Wenn's denn halbwegs echtzeitfähig sein soll, müsst ihr auch den Kernel, etc selbst mit RTOS Einstellungen und Modulen bauen, eben wie ein Linux From Scratch.

Da ich persönlich nichts von Java halte, möchte ich noch einen kleinen Hinweis geben: Java ist eine Hochsprache, die sehr viel höher angesetzt ist als C oder C++. Die JRE ist wie die Meeresoberfläche: Sie versteckt die Felsen, bietet euch eine glatte Basis zum programmieren an. Der Preis dafür ist ihre Geschwindigkeit. Informatiker machen heutzutage alles in Java (was ich sehr schade finde), weil es dort nur um die Algorithmen und Datenstrukturen geht, die man mit Java sehr gut implementieren und testen kann. Läuft vor allem auf jedem System, denn Java ist plattformunabhängig. Doch in der Robotik durch die Geschwindigkeit leider eher weniger zu gebrauchen. Generell ist bei einem Roboter, der eine JRE implementiert die Rechenleistung oberstes Gebot. Dennoch ist eine JRE immer ineffizienter als ein C Programm, dass das gleiche tut (bis auf wenige Ausnahmen natürlich). Daher würde ich euch persönlich dazu raten, Java von Robotern für Steuerungsaufgaben und Co fernzuhalten und lieber C zu nehmen. Das ist schneller, braucht weniger Ressourcen und in dem Fall wohl auch flexibler. Wenn es doch Java sein muss, dann würde ich definitiv den RBpi empfehlen. Für sehr schnelle Erfolge (aber imho weniger Lernerfolg, da ihr keine neuen Gewässer beschifft) könnt ihr die Bricks nehmen, doch lernen werdet ihr dabei eher weniger.

Die Anbindung der Sensoren und Aktoren erfolgt über SPI, I2C und was sonst noch alles an Bord des RaspberryPI rumliegt. Unter Linux werden die Devices dann als Blockdevices durch udev oder einem anderen Device Manager dann unter /dev abgelegt. Das bedeutet, ihr könnt mit C dann per fopen() fread() und fwrite() ohne Probleme drauf zugreifen. Vielleicht wäre auch eine Kombination Atmega/PIC <> RBpi vernünftig, denn der RBpi hat SPI I2C und alles was man sich an schnellen Schnittstellen so wünschen kann schon drauf und der AtMega/PIC kann dann als Multi-GPIO und Schnittstellenerweiterung dienen.

Vom Lerneffekt würde ich auf jeden Fall den RaspberryPI nehmen. Da könnt ihr euch in Linuxnutzung üben (müsst ihr später sowieso), mehr über µC und embedded Systems lernen, Treiberentwicklung/Nutzung lernen, lernen, mit der Konsole umzugehen, usw, etc.


PS: In C kann man auch mit sockets arbeiten. TCP UDP und viele weitere.