简体   繁体   中英

XMLSchemaChildrenValidationError in Carla simulator (Python 3.7)

I have been trying to use scenario runner with an openscenario file in Carla 0.9.5 (using Python 3.7):

python scenario_runner.py --openscenario openscenario_file.xosc

And I keep getting the following error:

    Traceback (most recent call last):
  File "scenario_runner.py", line 413, in <module>
    SCENARIORUNNER.run(ARGUMENTS)
  File "scenario_runner.py", line 224, in run
    self.run_openscenario(args)
  File "scenario_runner.py", line 311, in run_openscenario
    config = OpenScenarioConfiguration(args.openscenario)
  File "C:\scenario_runner-0.9.5.1\srunner\tools\openscenario_parser.py", line 37, in __init__
    self._validate_openscenario_configuration()
  File "C:\scenario_runner-0.9.5.1\srunner\tools\openscenario_parser.py", line 58, in _validate_openscenario_configuration
    xsd.validate(self.xml_tree)
  File "C:\Python\Python37\site-packages\xmlschema\validators\schema.py", line 1269, in validate
    raise error
xmlschema.validators.exceptions.XMLSchemaChildrenValidationError: failed validating <Element 'Event' at 0x000002621BDF6458> with XsdGroup(model='sequence', occurs=[1, 1]):

Reason: Unexpected child with tag 'Conditions' at position 2. Tag 'StartConditions' expected.

Schema:

  <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:sequence>
          <xsd:element maxOccurs="unbounded" name="Action">
              <xsd:complexType>
                  <xsd:choice>
                      <xsd:element name="Global" type="OSCGlobalAction" />
                      <xsd:element name="UserDefined" type="OSCUserDefinedAction" />
                      <xsd:element name="Private" type="OSCPrivateAction" />
                  </xsd:choice>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
              </xsd:complexType>
          </xsd:element>
          <xsd:element name="StartConditions">
              <xsd:complexType>
                  <xsd:sequence>
                      <xsd:element maxOccurs="unbounded" name="ConditionGroup" type="OSCConditionGroup" />
                  </xsd:sequence>
              </xsd:complexType>
          </xsd:element>
      </xsd:sequence>
      ...
      ...
  </xsd:complexType>

Instance:

  <Event name="MyLaneChangeLeftEvent" priority="overwrite">
      <Action name="MyLaneChangeLeftAction">
          <Private>
              <Lateral>
                  <LaneChange>
                      <Dynamics shape="sinusoidal" time="5" />
                      <Target>
                          <Relative object="$owner" value="1" />
                      </Target>
                  </LaneChange>
              </Lateral>
          </Private>
      </Action>
      <Conditions>
          <Start>
              <ConditionGroup>
                  <Condition delay="0" edge="rising" name="MyStartCondition1">
                      <ByEntity>
                          <TriggeringEntities rule="any">
                              <Entity name="$owner" />
      ...
      ...
  </Event>

Path: /OpenSCENARIO/Storyboard/Story/Act/Sequence/Maneuver/Event

I am quite new in python and carla. I looked up this type of error, however I couldn't find any useful information, any ideas? From what I understand it looks like the child "Conditions" is and invalid child element, but I am not sure why.

The error is quite clear

Unexpected child with tag 'Conditions' at position 2. Tag 'StartConditions' expected.

The validator sees a <Conditions> element where there would be a <StartConditions> expected.

Your schema says "after 1..N occurrences of <Action> there must be a <StartConditions> " :

<xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="Action">
            <xsd:complexType>
                <xsd:choice>
                    <xsd:element name="Global" type="OSCGlobalAction" />
                    <xsd:element name="UserDefined" type="OSCUserDefinedAction" />
                    <xsd:element name="Private" type="OSCPrivateAction" />
                </xsd:choice>
                <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="StartConditions">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element maxOccurs="unbounded" name="ConditionGroup" type="OSCConditionGroup" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

And this is what your XML does:

<Event name="MyLaneChangeLeftEvent" priority="overwrite">
    <Action name="MyLaneChangeLeftAction">  <!-- position 1 -->
        <!-- ... -->
    </Action>
    <Conditions>                            <!-- position 2 -->
        <!-- ... -->
    </Conditions>
</Event>

The solution is to either update your XML to match the schema, or to update your schema to match the XML.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM