3D Roboter Modelle in Microsoft RDS importieren

Die Erstellung von 3D Roboter Modellen  wurde bereits im Google SketchUp Tutorial beschrieben. Heute geht es nun darum, wie man diese Modelle von SketchUp aus exportiert und in das Microsoft Robotics Developer Studio (MRDS) importiert, damit sie korrekt im MRDS Simulator (VSE) dargestellt werden.

RobotNo1 im VSE (visual mode)

Was wird benötigt?

Export aus Google SketchUp

Erste Fehlschläge

Es gabe einige Fehlschläge bereits beim Export von Google SketchUp. Die kostenlose  Google SU Version bietet als Export Format nur das .kmz Format für Google Earth Version 3 bzw. 4 an. Für die meisten Versuche wurde zudem noch Blender benötigt, da von SU aus über ein drittes Format exportiert wurde, das dann zunächst in Blender importiert und anschließend im .obj Format exportiert wurde.

1.Versuch mit dem obj_export SketchUp Plugin. Das Modell ist viel zu groß und muß erst mühsam in Blender skaliert werden. Außerdem fehlen alle Farben und Texturen, da kein .mtl File erzeugt wird. 🙁

  1. Versuch mit dem Collada V1.4 Import von Blender. Das Google Earth V4 Format ist nichts anderes als ein gezipptes Collada File. Also einfach .kmz File in .zip File umbenennen und das Archiv extrahieren. Dann von Blender aus Import (als Collada V1.4) das .dae File auswählen. Auch hier stimmen die Dimensionen nicht und das Modell muß etliche Male herunterskaliert werden.
  2. Versuch. Für das Google Earth 3 Format gibt es das kmz/kml Python Blender Plugin. Der Import funktioniert zwar inklusive Texturen und korrekten Dimensionen des Modells. Aber beim Export von Blender, gehen dann bei komplexen Modellen viele Flächen verloren.

Der Durchbruch

Der Durchbruch gelang erst mit dem Object Export Skript von Marten van der Honing . Damit klappt es endlich. Sowohl die Dimensionen des Modells und auch die Materialien werden korrekt exportiert. Vor allem aber wird kein Blender Programm mehr als Zwischenstufe benötigt. Das spart Zeit und Nerven. Einzig die korrekte Ausrichtung der Modelle vor dem Export muß man beachten, dann klappt der Import ins MRDS ohne Probleme. 🙂

Chassis und Räder getrennt exportieren

Da sich in der Simulationsumgebung von MRDS die Räder des Modells auch drehen sollen, müssen die Räder getrennt vom Chassis exportiert werden. Dabei genügt es, ein einzelnes  Rad zu exportieren. Das MRDS fügt dann 2 Räder bei einem 2-Rad Roboter ein. Das Chassis wird dann ohne Räder exportiert. Vor dem Export müssen die Modelle in SU korrekt  auf den 3 Achsen ausgerichtet werden. Das Chassis muß dazu folgendermaßen ausgerichtet werden:

  • durch den Mittelpunkt des Chassis geht die blaue Achse.
  • die  Front des Modells zeigt nach vorne
  • Das Stützrad berührt die grüne Achse.

So sollte das dann aussehen:

RobotNo1 Chassis in Google SketchUp

Für die Antriebsräder gelten folgende Vorgaben:

  • Der 0-Punkt liegt auf der Innenseite des Rades
  • Die rote Achse geht durch die Mitte des Rades
  • Die grüne und blaue Achse berühren die Innenseite des Rades.

Ein Bild sagt mehr als 1000 Worte:

RobotNo1 Rad in Google SketchUp

Hinweis: Es klappt nicht, wenn man die Achsen selbst an das Modell anpaßt (mit dem achse1 Symbol). Man muß schon das Modell selbst verschieben.

Export Einstellungen

Nachdem man das Object Export Skriptin das Google SU plugins Verzeichnis kopiert hat, findet man nach einem SU Neustart im Menü unter Plugins den Eintrag Obj Exporter… Klickt man auf diesen Menüpunkt erscheint der folgende Dialog:

objexporterdialog

Dort klickt man lediglich noch die beiden Optionen ‚Export front faces‘ und Export back faces‘ an und anschließend den Export .obj File Button.  Bei komplexen Modellen dauert es schon ein Minütchen, bis das .obj File und .mtl File erzeugt werden.

Import ins Microsoft Robotics Studio

Der Import des 3D Modells geschieht über das Kommandozeilen Tool obj2bos.exe. MRDS kann zwar auch das .obj Format direkt importieren, aus Performance Gründen wird aber das hauseigene .bos Format empfohlen. Die zu importierenden Dateien, das .obj File und das .mtl File werden zunächst in den MRDS Unterordner store/media kopiert. Den obj2bos Konverter starte man vom DSS-Comand Prompt aus mit der folgenden Befehlszeile:

obj2bos.exe /infile:.\store\media\RobotNo1Chassis.obj

Das selbe wiederholt man für das Rad:

obj2bos.exe /infile:.\store\media\RobotNo1Wheel.obj

Anpassungen im Projekt

Als Vorlage für das Simulations Projekt wird das MRDS Simulator Tutorial von Sara Morgan aus dem MSDN Magazin verwendet. Ursprünglich wurde das Tutorial  für den Boe-Bot von Parallax geschrieben. Ich habe es nur für meinen RobotNo1 Roboter entsprechend dem Tutorial angepaßt und neu aufgebaut. Auf das Tutorial werde ich hier nur kurz eingehen. 2 Dinge sind mir beim Nachbau aufgefallen:

  1. Sobald man ein neues Projekt (Vorlage ‚DSS Service 2.0‘) erstellt hat, sollte man als erstes unter Einstellungen den Referenz Pfad zum MRDS bin Ordner hinzufügen und alle eigenen Projekte in einem neu erstellten Verzeichnis im MRDS Root Ordner ablegen. Bei Visual Studio Express kann man dan Pfad erst angeben, wenn man das Projekt speichert.

projectpath_

  1. Man muß noch einige Referenzen (rechter Mausklick auf ‚References‘ im Solution Explorer) von Hand dem Projekt hinzufügen, damit es sich korrekt übersetzen läßt. Das folgende Bild zeigt dies:

references

Am Programmcode selbst wurden nur einige kleinere Änderungen gemacht, damit das 3D-Modell des RobotNo1 den Boe-Bot ersetzt. Da der Simulator eine Physik Engine (Ageia PhysX) besitzt, müssen im Programm zudem die physikalischen Größen (Gewicht, Abmessungen, Postition der Antriebsräder und des Stützrades) an das eigene Modell angepasst werden.

MASS = 0.454f; //in kilograms  (around 1 pound)
// the default settings approximate the BoeBot chassis
CHASSIS_DIMENSIONS = new Vector3(0.10f, //meters wide
0.05f,  //meters high
0.16f); //meters long
FRONT_WHEEL_MASS = 0.01f;
CHASSIS_CLEARANCE = 0.020f;
FRONT_WHEEL_RADIUS = 0.034f;
CASTER_WHEEL_RADIUS = 0.010f;
FRONT_WHEEL_WIDTH = 0.007f;
CASTER_WHEEL_WIDTH = 0.008f; //not currently used, but dim is accurate
FRONT_AXLE_DEPTH_OFFSET = -0.02f; // distance of the axle from the center of robot

base.State.Name = "RobotNo1";
base.State.MassDensity.Mass = MASS;
base.State.Pose.Position = initialPos;
base.State.Assets.Mesh = "RobotNo1Chassis.bos";
base.WheelMesh = "RobotNo1Wheel.bos";

Visual Studio und VSE

Danach kann man das Programm im VisualStudio neu übersetzt und falls keine Fehler entdeckt wurden, gestartet werden. Nach einer kleinen Weile erscheinen dann zunächst die DSS Host Console, dann das Simple Dashboard und schließlich die Simulation (VSE Visual Simulation Environment) selbst. Dort sollte dann unser Modell und ein Würfel erscheinen. Mit der Maus und den Cursor Tasten der Tastatur kann man die Position der Kamera verändern. Die Darstellung des Modells kann man im Menüpunkt ‚Render‘ umschalten zwischen:

  • ‚Visual‘ di für uns Menschen normale Sichtweise mit Textturen Licht und Schatten
  • ‚WireFrame‘, die Darstellung der Modelle als Drahtgitter
  • ‚Physics‘, so, wie es der Computer sieht. Simple Körper mit Masse und Schwerpunkt
  • ‚Combined. Die Kombination zwischen Visual und Physics. Damit kann man kontrollieren, wie genau das gezeichnete Modell mit den Einstellungen im Programm übereinstimmt.

RobotNo1 im VSE

Dashboard

Steuern läßt sich unser Modell über das Dashboard. Dazu muß man:

  • Verbindung zum VSE aufnehmen durch Eingabe von ‚50001‘ im Port Editierfeld.
  • Doppelklick auf den Service ‚[SimulatedRobotNo1]…‘
  • Klick auf ‚Drive‘
  • jetzt sollte sich der Roboter durch klicken und Ziehen an der Kugel in alle Richtungen bewegen lassen

Alle Dashboard Einstellungen nochmal im Bild:

MRDS Dashboard

auch ein virtueller Asuro tummelt sich bereits im MRDS Simulator.

Asuro im VSE

das vollständige Projekt gibt es hier zum download. Das .zip Archiv wird einfach in den MRDS Ordner entpackt. Im Unterordner RobotFreak gibt es die beiden Projekte SimulatedAsuro und SimulatedRobotNo1. Bevor man selbst versucht, die Projekte zu übersetzen, muß das ’setup.cmd‘ Script vom DSS Command Prompt gestartet werden. Damit werden die absoluten Pfadangaben in den Projekten an die lokalen Einstellungen angepasst.

Wie geht es weiter?

Zunächst werde ich mich näher mit der visuellen Programmiersprache VPL befassen. Das verspricht doch schnellere Erfolge, anstelle den virtuellen Roboter in C# zu coden.  Mit VPL lassen sich recht einfach Roboter Verhaltensprogramme realisieren.

Derzeit sind die Modelle noch blind wie die Maulwürfe, d.h. sie verfügen noch nicht über irgendwelche Sensoren. Die müssen ebenso simuliert werden, damit der Roboter nicht ständig gegen irgendwelche virtuellen Hindernisse stösst. 😉

Das Endziel wird ein selbst gebauter Roboter sein, der sich über MRDS steuern läßt. Dazu muß auf dem Roboter selbst kein Windows laufen. Allerdings funktioniert so ein Roboter nur dann, wenn ein Windows PC mitläuft. Denn nur auf dem Windows PC läuft das eigentliche Steuerprogramm.

Weblinks

3 Antworten auf „3D Roboter Modelle in Microsoft RDS importieren“

  1. Danke für die Info.

    Interessantes Programm. Damit könnte man auch die physikalischen Eigenschaften der 3D-Objekte bestimmen. Ich werd es mir mal installieren und evtl. auch darüber berichten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert