# Roboter RotatorProblem



## flo_richi (13. Jan 2006)

Folgendes Prob:

Muss für eine Simulation einen Roboter animieren mit 2 "Gelenke" und 2 "Arme". Nun ha ich die TransformGroups glaub ich mir richtig angeordnet und ein kleines Behavior hinzugefügt.
Ich dachte ich könnte die Arme, auf Grund der hierarchie einfach mir rotX.(°) drehen, jedoch ist dies nur für den vorderen Teil des Armes so. 

Prinzipiell ist es wie ein menschlicher Arm: Schulter-Gelenk verbunden mit Oberarm verbunden mit ellbogen verbunden mit Unterarm.

Wenn ich den Ellbogen "drehe" funktioniert dies mit rotX. Falls ich jedoch den Ganzen Arm bewegen will, rotiert sich alles um den Ellbogen...

Ich muss die "Schulter" wie folgt drehen:


```
angle_u -= 0.1;
        rotation.rotZ(angle_u);
        // Stellungsmatrix des Unterams
        // herausfinden
        tg_temp =(TransformGroup)targetTG.getChild(0);
        tg_temp.getTransform(t3d_punkt);
        t3d_temp.invert(t3d_punkt);
        rotation.mul(t3d_temp);
        t3d_punkt.mul(rotation);
        targetTG.setTransform(t3d_punkt);
```
Da der Code nicht meiner ist, würd ich gern wissen was er hier tut, und warum. Ich denke er berechnet den Punkt und transfomiert den Arm dort hin wo er hin gehört..


----------



## MPW (13. Jan 2006)

Aehm, man sollte vllt. Codekommentare lesen koennen, er findet die Stellungsmatrix des Unterams heraus, d.h. so viel wie hier guckt, welche Drehung, Transoformation er hat.

Vllt. kannst du mal deinen Code posten, da finden wir wahrscheinlich schneller eine Loesung, als wenn wir in Codes von anderen rumstochern.


----------



## Guest (14. Jan 2006)

Nun das mit der Rotation hat sich erledigt... Da das "primitive" Objekt mit den Zylinder jetzt funktioniert, will ich die modelierten Arme und Achsen (Cinema4D) als *.obj oder vrml importieren. Nun wieder ein Rotationsproblem, da in obj-Datein die Objektachsen anscheinend nicht übernommen werden. Das Objekt dreht sich also höchstwhrscheinilch im Mittelpkt. des geladenen obj-Files. 
Gibt es eine anderes Format das die Objektachsen übernimmt oder kann ich die Rotationsachse verschieben?


```
public BranchGroup createSceneGraph()
  {
      BranchGroup bg = new BranchGroup(); 
      Transform3D t3d_dreh = new Transform3D();
      //Objekt dreht sich im Mittelpunkt und nicht wie in Cinema definiert (Objecktachse)
      t3d_dreh.rotY(90);
      TransformGroup tg_unterteil = new TransformGroup();
      TransformGroup tg_dreh = new TransformGroup(t3d_dreh);
      tg_unterteil.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
      tg_unterteil.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
      TransformGroup tg_cube = new TransformGroup();
        
      ObjectFile f = new ObjectFile();
      ObjectFile f_dreh = new ObjectFile();
      Scene s_unterteil = null;
      Scene s_dreh = null;
      Shape3D shape_unterteil = null;
      Shape3D shape_dreh = null;
      
      try 
       {
	 s_unterteil = f.load("Halterung.obj");
         s_dreh = f_dreh.load("Drehvorrichtung.obj");
       }
      catch(Exception e)
       {
          System.out.println("Fehler beim Laden des Objekts: "+e);
       }
      
      BranchGroup bg_unterteil = s_unterteil.getSceneGroup();
      BranchGroup bg_dreh = s_dreh.getSceneGroup();
      shape_unterteil = (Shape3D) bg_unterteil.getChild(0);
      shape_dreh = (Shape3D) bg_dreh.getChild(0);
      //Erzeugen Appearance + Material
      Appearance app = new Appearance();
      Color3f objColor = new Color3f(0.0f, 0.3f, 1.8f);
      Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
      app.setMaterial(new Material(objColor, objColor, objColor, black, 0.0f));
      //Appearance zu Shape hinzu
      shape_unterteil.setAppearance(app);
      shape_dreh.setAppearance(app);
      
      tg_unterteil.addChild( s_unterteil.getSceneGroup());
      tg_dreh.addChild(s_dreh.getSceneGroup());
      bg.addChild(tg_unterteil);
      bg.addChild(tg_dreh);
      
     return bg;   
   }
```


----------

