VRML Preparation for Robot Simulation/de: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
No edit summary
 
(21 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>
<div class="mw-translate-fuzzy">
{{TutorialInfo/de
{{TutorialInfo/de
|Topic=Robot Workbench
|Topic=Roboter Arbeitsbereich
|Level=Intermediate
|Level=Mittelschwer
|Time=
|Time=
|Author=
|Author=
|FCVersion=
|FCVersion=0.11.4252ppa1
|Files=
|Files=
}}
}}
</div>


{{VeryImportantMessage|The FreeCAD Robot Workbench is unmaintained. Please mention on the FreeCAD forum if you have an interest in maintaining this
{{VeryImportantMessage|Der FreeCAD Roboter Arbeitsbereich wird nicht gewartet. Bitte erwähne im FreeCAD Forum, wenn du daran interessiert bist, diesen Arbeitsbereich zu warten.}}
workbench.}}


==Overview==
==Übersicht==


This tutorial explains how to use FreeCAD and the [[Image:Workbench_Robot.svg|24px]] [[Robot Workbench|Robot Simulation Workbench]] to simulate the motions of 6-axis serial robot. '''The tutorial focuses on the creation of the VRML file''' used as visualization. The base of the VRML file is a FreeCAD model. The version of FreeCAD used is 0.11.4252ppa1 on Ubuntu 32bit.
Dieses Tutorium erklärt, wie man FreeCAD und den [[Image:Workbench_Robot.svg|24px]] [[Robot Workbench/de|Arbeitsbereich Roboter Simulation]] um die Bewegungen eines 6-achsigen Serienroboters zu simulieren. '''Das Tutorium konzentriert sich auf die Erstellung der als Visualisierung verwendeten VRML Datei'''. Die Basis der VRML Datei ist ein FreeCAD Modell. Die verwendete Version von FreeCAD ist 0.11.4252ppa1 auf Ubuntu 32bit.


== Open a file or create one with FreeCAD ==
== Öffne eine Datei oder erstelle eine mit FreeCAD ==
The tutorial is based on a STEP-file of a Stäubli TX40 (TX40-HB.stp). You can download the file from [https://secure.staubli.com/Intranet_Applications/Robotics/Group/RobDoc.nsf/ea05b3f4b301f597c1256d5f005665e8/bc3707ec036c9f6bc12576c700327958/$FILE/page.html Stäubli]. However, though I still didn't have time to check this, the method should also apply to a model completely made in FreeCAD.
Das Tutorium basiert auf einer STEP Datei eines Stäubli TX40 (TX40-HB.stp). Du kannst die Datei von [https://secure.staubli.com/Intranet_Applications/Robotics/Group/RobDoc.nsf/ea05b3f4b301f597c1256d5f005665e8/bc3707ec036c9f6bc12576c700327958/$FILE/page.html Stäubli] herunterladen. Obwohl ich immer noch nicht die Zeit hatte, dies zu überprüfen, sollte die Methode auch auf ein vollständig in FreeCAD erstelltes Modell anwendbar sein.
Nachdem du die Datei geöffnet hast, solltest du dies erhalten:
After opening the file, you should obtain this:


[[File:staeubli_step_import.png|1024px]]
[[File:staeubli_step_import.png|1024px]]


Beachte, dass der Roboter beim Import aus 8 Formen besteht, die sich direkt an der Wurzel des Dokumentenbaums befinden. Die Struktur der exportierten VRML Datei kann sich ändern, wenn Gruppen verwendet werden. Die Formen sind von der Basis bis zum Werkzeug geordnet. Die letzte Form enthält die Drehachsen aller Roboterachsen. Die Korrelation Formname - Teilename Teilname wird erteilt durch (vorläufig (März 2011) importiert FreeCAD die in STEP Dateien enthaltenen Namen nicht):
Notice, that on import, the robot is made of 8 shapes, directly on the root of the document tree. The structure of the exported VRML file may change if groups are used. The shapes are ordered from the base to the tool. The last shape contains the axes of rotations of all robot axes. The correlation shape name – part name is given by (as for now (March 2011) FreeCAD doesn't import the names included in STEP files):


{| class="wikitable"
{| class="wikitable"
Line 56: Line 53:
|}
|}


For this import, change the “Display Mode” of each shape, TX40_HB007 excepted, from “Flat Lines” to “Shaded” for the VRML export to look good. I also changed the colors to [245, 196, 0] and [204, 204, 204] to better correspond to Stäubli's yellow. Hide TX40_HB007 because it contains the axes of all joints and cannot be taken apart.
Ändere für diesen Import den " Darstellungsmodus" jeder Form, mit Ausnahme von TX40_HB007, von "Flache Linien" in "Schattiert", damit der VRML Export gut aussieht. Ich änderte auch die Farben in [245, 196, 0] und [204, 204, 204], um dem Gelb von Stäubli besser zu entsprechen. Blende TX40_HB007 aus, weil es die Achsen aller Gelenke enthält und nicht auseinandergenommen werden kann.


== Messen geometrischer Merkmale ==
== Measure geometric characteristics ==
Um die Denavit-Hartenberg Tabelle zu erstellen (siehe [[Robot_6-Axis/de|Roboter 6-Achsen]]) und die vrml Datei vorzubereiten, musst du die Eigenschaften des Roboters ermitteln. Im Moment ist das Messwerkzeug von FreeCAD noch nicht fertig, du kannst die in TX40_HB007 enthaltenen Achsen verwenden (die Koordinaten werden unten links angezeigt, wenn du mit der Maus auf ein Objekt zeigst) oder du musst die Python Konsole verwenden, um einige Informationen über die Geometrie zu erhalten. Beachte, dass die DH-Tabelle nur erforderlich ist, wenn du die inverse Kinematik verwenden musst, d.h. bekomme die kartesischen Koordinaten oder steuere den Roboter mit kartesischen Koordinaten.
In order to build the Denavit-Hartenberg table (see [[Robot_6-Axis|Robot 6-Axis]]) and prepare the vrml file, you need to get characteristics of the robot. For now, the measurement tool of FreeCAD is not ready, you can use the axes included in TX40_HB007 (the co-ordinates are indicated on the bottom left when you point an object with the mouse) or you have to use the Python console to get some information about the geometry. Note that the DH-table is only required if you need to use the inverse kinematics, i.e. get the Cartesian coordinates or drive the robot with Cartesian coordinates.
The DH-table for this robot is the following (mm, deg and deg/s):
Die DH-Tabelle für diesen Roboter ist die folgende (mm, Grad und Grad/s):


{| class="wikitable"
{| class="wikitable"
Line 71: Line 68:
! θmin
! θmin
! θmax
! θmax
! Achsgeschwindikeit
! Axis velocity
|-
|-
| 1
| 1
Line 128: Line 125:
|}
|}


The csv file is then:
Die csv Datei ist dann:


a , alpha, d , theta, rotDir, maxAngle, minAngle, AxisVelocity
a , alpha, d , theta, rotDir, maxWinkel, minWinkel, AchsGeschwindigkeit
0 , -90, 320, 0, 1, 180, -180, 555
0 , -90, 320, 0, 1, 180, -180, 555
225, 0, 35, -90, 1, 125, -125, 475
225, 0, 35, -90, 1, 125, -125, 475
Line 138: Line 135:
0 , 0, 65, 0, 1, 270, -270, 1575
0 , 0, 65, 0, 1, 270, -270, 1575


== Export to VRML ==
== Export nach VRML ==
Export the document to a VRML file. The structure of the VRML file is the following:
Exportiere das Dokument in eine VRML Datei. Die Struktur der VRML Datei ist wie folgt:
<code>
<code>


Line 194: Line 191:
</code>
</code>


Du kannst feststellen, dass wir 8 unabhängige Gruppen haben, die den 8 Formen entsprechen.
You can notice that we have 8 independent groups corresponding to the 8 shapes.


== Preparation of the vrml file ==
== Vorbereitung der vrml Datei ==
Alle Formen in der VRML Datei werden unabhängig voneinander im Grundrahmen ausgedrückt. Für den [[Robot Workbench/de|Arbeitsbereich Roboter Simulation]] müssen wir eine Struktur erstellen, bei der eine Bewegung einer Form eine Bewegung aller danach in der Struktur befindlichen Formen auslöst. Die Platzierung der Formen erfolgt relativ zu der vorhergehenden Form, so dass wir einige Übersetzungen vom absoluten Bezugssystem in das relative System einbeziehen müssen. Die Übersetzungen sind in der folgenden Abbildung beschrieben:
All shapes in the VRML file are expressed in the base frame, independently from each other. For the [[Robot Workbench|Robot Simulation Workbench]], we need to create a structure where a movement of a shape induces a movement of all shapes situated afterwards in the structure. The placement of the shapes will be relative to the preceding shape, so we need to include some translations from the absolute reference system to the relative one. The translations are described in the following picture:


[[Image:staeubli_important_points.png]]
[[Image:staeubli_important_points.png]]


Mit
With
: A=(0, 0, 168)
: A=(0, 0, 168)
: B=(0, 107.8, 320)
: B=(0, 107.8, 320)
Line 209: Line 206:
: F=(0, 35, 835).
: F=(0, 35, 835).


Let's take the example of axis 4 between ELBOW and FOREARM, situated at D=(xd, yd, zd). The anchor for the FreeCAD axis is
Nehmen wir das Beispiel der Achse 4 zwischen ELLBOGEN und UNTERARM, die sich bei D=(xd, yd, zd) befindet. Der Anker für die FreeCAD Achse ist
<code>
<code>
"DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["
"DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["
</code>
</code>
This corresponds to a rotation about the y-axis. In the CAD model, the rotation is about the z-axis. Thus, we need to a rotation about the x-axis of <math>\pi</math> before the FreeCAD axis definition and of <math>-\pi</math> after it. Also, a translation of (-xd, -yd, -zd) is needed just before the Group corresponding to the definition of FOREARM to express it in the relative reference frame centered at D. This means that a translation of (xd, yd, zd) must be inserted before the first rotation.
Dies entspricht einer Drehung um die y-Achse. Im CAD Modell erfolgt die Drehung um die z-Achse. Wir benötigen also eine Drehung um die x-Achse von <math>\pi</math> vor der FreeCAD Achsdefinition und von <math>-\pi</math> danach. Ausserdem ist eine Translation von (-xd, -yd, -zd) unmittelbar vor der Gruppe erforderlich, die der Definition von UNTERARM entspricht, um sie im relativen Bezugssystem auszudrücken, das bei D zentriert ist. Dies bedeutet, dass eine Translation von (xd, yd, zd) vor der ersten Drehung eingefügt werden muss.
At the end, the VRML file from the definition of ELBOW to the definition of FOREARM looks like this:
Am Ende sieht die VRML Datei von der Definition von ELLBOGEN bis zur Definition von UNTERARM wie folgt aus:
<code>
<code>
# ELBOW
# ELBOW
Line 240: Line 237:
</code>
</code>
At the end of the document, the appropriate closing brackets must be inserted: <code> ]}}}},</code>
Am Ende des Dokuments müssen die entsprechenden schließenden Klammern eingefügt werden: <code> ]}}}},</code>
Am Ende des Dokuments müssen die entsprechenden schließenden Klammern eingefügt werden:für jede der 6 Achsen. Letztendlich sieht das Dokument so aus (ich weiß nicht, ob ich die Datei wegen der Urheberrechte hier verlinken kann):
for each of the 6 axes. Eventually, the document looks like this (I don't know if I can link the file here because of copyrights):
<code>
<code>
#VRML V2.0 utf8
#VRML V2.0 utf8
Line 372: Line 369:
}
}
</code>
</code>
Hier ist eine Korrektur, um die für die Robotersimulation geeignete VRML Datei zu erhalten:
Here is a patch to obtain the VRML file suitable for robot simulation:
<code>
<code>
7a8
7a8

Latest revision as of 09:45, 16 July 2021

Tutorium
Thema
Roboter Arbeitsbereich
Niveau
Mittelschwer
Zeit zum Abschluss
Autoren
FreeCAD-Version
0.11.4252ppa1
Beispieldateien
Siehe auch
None

Der FreeCAD Roboter Arbeitsbereich wird nicht gewartet. Bitte erwähne im FreeCAD Forum, wenn du daran interessiert bist, diesen Arbeitsbereich zu warten.

Übersicht

Dieses Tutorium erklärt, wie man FreeCAD und den Arbeitsbereich Roboter Simulation um die Bewegungen eines 6-achsigen Serienroboters zu simulieren. Das Tutorium konzentriert sich auf die Erstellung der als Visualisierung verwendeten VRML Datei. Die Basis der VRML Datei ist ein FreeCAD Modell. Die verwendete Version von FreeCAD ist 0.11.4252ppa1 auf Ubuntu 32bit.

Öffne eine Datei oder erstelle eine mit FreeCAD

Das Tutorium basiert auf einer STEP Datei eines Stäubli TX40 (TX40-HB.stp). Du kannst die Datei von Stäubli herunterladen. Obwohl ich immer noch nicht die Zeit hatte, dies zu überprüfen, sollte die Methode auch auf ein vollständig in FreeCAD erstelltes Modell anwendbar sein. Nachdem du die Datei geöffnet hast, solltest du dies erhalten:

Beachte, dass der Roboter beim Import aus 8 Formen besteht, die sich direkt an der Wurzel des Dokumentenbaums befinden. Die Struktur der exportierten VRML Datei kann sich ändern, wenn Gruppen verwendet werden. Die Formen sind von der Basis bis zum Werkzeug geordnet. Die letzte Form enthält die Drehachsen aller Roboterachsen. Die Korrelation Formname - Teilename Teilname wird erteilt durch (vorläufig (März 2011) importiert FreeCAD die in STEP Dateien enthaltenen Namen nicht):

FreeCAD name STEP name
TX40_HB HORIZONTAL BASE CABLE OUTLET
TX40_HB001 SHOULDER
TX40_HB002 ARM
TX40_HB003 ELBOW
TX40_HB004 FOREARM
TX40_HB005 WRIST
TX40_HB006 TOOL FLANGE
TX40_HB007 ?

Ändere für diesen Import den " Darstellungsmodus" jeder Form, mit Ausnahme von TX40_HB007, von "Flache Linien" in "Schattiert", damit der VRML Export gut aussieht. Ich änderte auch die Farben in [245, 196, 0] und [204, 204, 204], um dem Gelb von Stäubli besser zu entsprechen. Blende TX40_HB007 aus, weil es die Achsen aller Gelenke enthält und nicht auseinandergenommen werden kann.

Messen geometrischer Merkmale

Um die Denavit-Hartenberg Tabelle zu erstellen (siehe Roboter 6-Achsen) und die vrml Datei vorzubereiten, musst du die Eigenschaften des Roboters ermitteln. Im Moment ist das Messwerkzeug von FreeCAD noch nicht fertig, du kannst die in TX40_HB007 enthaltenen Achsen verwenden (die Koordinaten werden unten links angezeigt, wenn du mit der Maus auf ein Objekt zeigst) oder du musst die Python Konsole verwenden, um einige Informationen über die Geometrie zu erhalten. Beachte, dass die DH-Tabelle nur erforderlich ist, wenn du die inverse Kinematik verwenden musst, d.h. bekomme die kartesischen Koordinaten oder steuere den Roboter mit kartesischen Koordinaten. Die DH-Tabelle für diesen Roboter ist die folgende (mm, Grad und Grad/s):

i d θ r α θmin θmax Achsgeschwindikeit
1 320 q1 0 -90 -180 180 555
2 35 q2 - 90 225 0 -125 125 475
3 0 q3 + 90 0 90 -138 138 585
4 225 q4 0 -90 -270 270 1035
5 0 q5 0 90 -120 133.5 1135
6 65 q6 0 0 -270 270 1575

Die csv Datei ist dann:

a  , alpha, d  , theta, rotDir, maxWinkel, minWinkel, AchsGeschwindigkeit
0  ,   -90, 320,     0,      1,      180,     -180, 555
225,     0,  35,   -90,      1,      125,     -125, 475
0  ,    90,   0,    90,      1,      138,     -138, 585
0  ,   -90, 225,     0,      1,      270,     -270, 1035
0  ,    90,   0,     0,      1,    133.5,     -120, 1135
0  ,     0,  65,     0,      1,      270,     -270, 1575

Export nach VRML

Exportiere das Dokument in eine VRML Datei. Die Struktur der VRML Datei ist wie folgt:

#VRML V2.0 utf8


Group {
  children 
    Group {
      children [ 
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        } ]

    }

}

Du kannst feststellen, dass wir 8 unabhängige Gruppen haben, die den 8 Formen entsprechen.

Vorbereitung der vrml Datei

Alle Formen in der VRML Datei werden unabhängig voneinander im Grundrahmen ausgedrückt. Für den Arbeitsbereich Roboter Simulation müssen wir eine Struktur erstellen, bei der eine Bewegung einer Form eine Bewegung aller danach in der Struktur befindlichen Formen auslöst. Die Platzierung der Formen erfolgt relativ zu der vorhergehenden Form, so dass wir einige Übersetzungen vom absoluten Bezugssystem in das relative System einbeziehen müssen. Die Übersetzungen sind in der folgenden Abbildung beschrieben:

Mit

A=(0, 0, 168)
B=(0, 107.8, 320)
C=(0, 104.15, 545)
D=(0, 35, 601)
E=(0, 35, 770)
F=(0, 35, 835).

Nehmen wir das Beispiel der Achse 4 zwischen ELLBOGEN und UNTERARM, die sich bei D=(xd, yd, zd) befindet. Der Anker für die FreeCAD Achse ist

"DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["

Dies entspricht einer Drehung um die y-Achse. Im CAD Modell erfolgt die Drehung um die z-Achse. Wir benötigen also eine Drehung um die x-Achse von vor der FreeCAD Achsdefinition und von danach. Ausserdem ist eine Translation von (-xd, -yd, -zd) unmittelbar vor der Gruppe erforderlich, die der Definition von UNTERARM entspricht, um sie im relativen Bezugssystem auszudrücken, das bei D zentriert ist. Dies bedeutet, dass eine Translation von (xd, yd, zd) vor der ersten Drehung eingefügt werden muss. Am Ende sieht die VRML Datei von der Definition von ELLBOGEN bis zur Definition von UNTERARM wie folgt aus:

      # ELBOW
      Group {
        … here comes the unmodified definition of ELBOW
  
      },
        
      Transform {
        translation 0 35 601
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -601
                  children [
      # FOREARM  
      Group {
        ... here comes the unmodified definition of FOREARM
  
      },

Am Ende des Dokuments müssen die entsprechenden schließenden Klammern eingefügt werden: ]}}}}, Am Ende des Dokuments müssen die entsprechenden schließenden Klammern eingefügt werden:für jede der 6 Achsen. Letztendlich sieht das Dokument so aus (ich weiß nicht, ob ich die Datei wegen der Urheberrechte hier verlinken kann):

#VRML V2.0 utf8
  
  
Group {
  children
  Group {
    children [ 
      # HORIZONTAL BASE CABLE OUTLET 
      Group {
          ... here comes the unmodified definition of HORIZONTAL BASE CABLE OUTLET
   
      },
        
      Transform {
        translation 0 0 168
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS1 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 0 -168
                  children [
      # SHOULDER
      Group {
          ... here comes the unmodified definition of SHOULDER 
  
      },
        
      Transform {
        translation 0 107.8 320
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS2 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -107.8 -320
                  children [
      # ARM  
      Group {
          ... here comes the unmodified definition of ARM 
  
      },
        
      Transform {
        translation 0 104.15 545
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS3 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -104.15 -545
                  children [
      # ELBOW
      Group {
          ... here comes the unmodified definition of ELBOW
  
      },
        
      Transform {
        translation 0 35 601
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -601
                  children [
      # FOREARM  
      Group {
          ... here comes the unmodified definition of FOREARM
  
      },
        
      Transform {
        translation 0 35 770
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS5 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -35 -770
                  children [
      # WRIST
      Group {
          ... here comes the unmodified definition of WRIST
  
      },
        
      Transform {
        translation 0 35 835
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS6 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -835
                  children [
      # TOOL FLANGE
      Group {
          ... here comes the unmodified definition of TOOL FRAME
  
      },
        
      Group {
          ... here comes the unmodified definition of TX40_HB007
  
      } # "]" was deleted from this line
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ] # this is the "]" deleted from the line above
  }
}

Hier ist eine Korrektur, um die für die Robotersimulation geeignete VRML Datei zu erhalten:

7a8
>         # HORIZONTAL BASE CABLE OUTLET 
95968a95970,95981
>         Transform {
>           translation 0 0 168
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS1 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 0 -168
>                     children [
>         # SHOULDER
128428a128442,128453
>         Transform {
>           translation 0 107.8 320
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS2 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -107.8 -320
>                     children [
>         # ARM  
206503a206529,206540
>         Transform {
>           translation 0 104.15 545
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS3 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -104.15 -545
>                     children [
>         # ELBOW
267111a267149,267160
>         Transform {
>           translation 0 35 601
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 -35 -601
>                     children [
>         # FOREARM  
417854a417904,417915
>         Transform {
>           translation 0 35 770
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS5 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -35 -770
>                     children [
>         # WRIST
422053a422115,422126
>         Transform {
>           translation 0 35 835
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS6 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 -35 -835
>                     children [
>         # TOOL FLANGE
435627c435700,435707
<         } ]
---
>         } 
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]