diff --git a/.github/workflows/linux-files/odr_config.xml b/.github/workflows/linux-files/odr_config.xml
index a06e9901..2a7e4bb8 100644
--- a/.github/workflows/linux-files/odr_config.xml
+++ b/.github/workflows/linux-files/odr_config.xml
@@ -6,12 +6,29 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.github/workflows/linux-files/otx_config.xml b/.github/workflows/linux-files/otx_config.xml
index 250106a7..8d6e252c 100644
--- a/.github/workflows/linux-files/otx_config.xml
+++ b/.github/workflows/linux-files/otx_config.xml
@@ -6,10 +6,26 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.github/workflows/windows-files/odr_config.xml b/.github/workflows/windows-files/odr_config.xml
index 7714aaa4..3454394c 100644
--- a/.github/workflows/windows-files/odr_config.xml
+++ b/.github/workflows/windows-files/odr_config.xml
@@ -6,12 +6,29 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.github/workflows/windows-files/otx_config.xml b/.github/workflows/windows-files/otx_config.xml
index 264887cf..91076370 100644
--- a/.github/workflows/windows-files/otx_config.xml
+++ b/.github/workflows/windows-files/otx_config.xml
@@ -6,10 +6,26 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/INSTALL.md b/INSTALL.md
index dc133f29..f15f3d54 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -164,7 +164,11 @@ Python modules can be installed using `pip`.
pip install asam-qc-runtime@git+https://github.com/asam-ev/qc-framework@develop#subdirectory=runtime
```
-**Note:** The above command will install `asam-qc-runtime` from the `develop` branch. If you want to install `asam-qc-runtime` from another branch or tag, replace `@develop` with the desired branch or tag.
+**Note:** The above command will install `asam-qc-runtime` from the `develop` branch. If you want to install `asam-qc-runtime` from another branch or tag, replace `@develop` with the desired branch or tag. It is also possible to install from a local directory.
+
+```bash
+pip install /home/user/qc-framework/runtime
+```
## Install ASAM Checker Bundles
@@ -176,7 +180,11 @@ Standard ASAM Checker Bundles are implemented in Python and can be installed usi
pip install asam-qc-opendrive@git+https://github.com/asam-ev/qc-opendrive@develop
```
-**Note:** The above command will install `asam-qc-opendrive` from the `develop` branch. If you want to install `asam-qc-opendrive` from another branch or tag, replace `@develop` with the desired branch or tag.
+**Note:** The above command will install `asam-qc-opendrive` from the `develop` branch. If you want to install `asam-qc-opendrive` from another branch or tag, replace `@develop` with the desired branch or tag. It is also possible to install from a local directory.
+
+```bash
+pip install /home/user/qc-opendrive
+```
To test the installation:
@@ -190,7 +198,11 @@ qc_opendrive --help
pip install asam-qc-openscenarioxml@git+https://github.com/asam-ev/qc-openscenarioxml@develop
```
-**Note:** The above command will install `asam-qc-openscenarioxml` from the `develop` branch. If you want to install `asam-qc-openscenarioxml` from another branch or tag, replace `@develop` with the desired branch or tag.
+**Note:** The above command will install `asam-qc-openscenarioxml` from the `develop` branch. If you want to install `asam-qc-openscenarioxml` from another branch or tag, replace `@develop` with the desired branch or tag. It is also possible to install from a local directory.
+
+```bash
+pip install /home/user/qc-openscenarioxml
+```
To test the installation:
@@ -204,7 +216,11 @@ qc_openscenario --help
pip install asam-qc-otx@git+https://github.com/asam-ev/qc-otx@develop
```
-**Note:** The above command will install `asam-qc-otx` from the `develop` branch. If you want to install `asam-qc-otx` from another branch or tag, replace `@develop` with the desired branch or tag.
+**Note:** The above command will install `asam-qc-otx` from the `develop` branch. If you want to install `asam-qc-otx` from another branch or tag, replace `@develop` with the desired branch or tag. It is also possible to install from a local directory.
+
+```bash
+pip install /home/user/qc-otx
+```
To test the installation:
diff --git a/demo_pipeline/templates/otx_template.xml b/demo_pipeline/templates/otx_template.xml
index a3100f27..86718c3a 100644
--- a/demo_pipeline/templates/otx_template.xml
+++ b/demo_pipeline/templates/otx_template.xml
@@ -5,10 +5,26 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo_pipeline/templates/xodr_template.xml b/demo_pipeline/templates/xodr_template.xml
index cb6c6d1a..0e0e85a0 100644
--- a/demo_pipeline/templates/xodr_template.xml
+++ b/demo_pipeline/templates/xodr_template.xml
@@ -5,12 +5,29 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/changelog.txt b/doc/changelog.txt
index e74eda08..bc38c89f 100644
--- a/doc/changelog.txt
+++ b/doc/changelog.txt
@@ -3,6 +3,40 @@ QC4OpenX QChecker for OpenX - Change Log File
This file tracks the changes made within the QC4OpenX project.
+v2.0.0-beta
+==========================================
+- The QC Framework is now standards agnostic
+- Remove unnecessary dependencies
+- Add Python Base Library
+- Update C++ Base Library
+- Add CI/CD
+- Add a demo pipeline
+- Simplify the architecture by splitting runtime module and configuration GUI
+- Add a new runtime module in Python
+- Support the manifest file mechanism to register checker bundles in any programming language with the framework.
+- Update configuration file format and result file format to include necessary information
+- Support the rule UID concept in the framework
+- Add new features to result pooling
+ - Order the results
+ - Support severity level
+ - Support result filtering
+ - Resolve naming conflict
+- Improve ReportGUI
+ - Support arbitrary ASCII-based input files
+ - Remove the 5MB file size limit
+ - Improve usability (drag and drop to open, refresh after loading a new result file)
+ - Support domain specific information
+ - Add Esmini Viewer plugin to visualize issues in OpenDrive files
+- Improve Text Report
+ - Add more information to Text Report
+ - Support domain-specific information
+- Add support for automatic documentation generation in the Python Base Library
+- Improve documentation
+- Add three checker bundles
+ - OpenDrive checker bundle: https://github.com/asam-ev/qc-opendrive
+ - OpenScenario XML checker bundle: https://github.com/asam-ev/qc-openscenarioxml
+ - OTX checker bundle: https://github.com/asam-ev/qc-otx
+
v1.0.0 First open source compliant version
==========================================
- ConfigGUI executable for checker configuration
diff --git a/doc/manual/esmini_viewer_plugin.md b/doc/manual/esmini_viewer_plugin.md
index 45f3cf0f..381bce1b 100644
--- a/doc/manual/esmini_viewer_plugin.md
+++ b/doc/manual/esmini_viewer_plugin.md
@@ -42,6 +42,20 @@ So in order to use the plugin you can either:
cp /home/user/Downloads/esmini-demo/bin/libesminiLib.so ~/qc-build/bin/
```
+
+## Remarks
+
+When the Esmini Viewer is started, it initially points to the inertial location at the coordinate `x=0, y=0, z=0`. Your view may be empty if your map is not at `x=0, y=0, z=0`.
+
+![example_esmini_viewer_map](images/esmini_at_00.png)
+
+The view will update when you click on an issue that contains `Inertial Location`, as in the screenshot below. The new view will point to the corresponding location in the issue.
+
+Note that not all issues contain a location. For example, issues related to XML Schema do not contain locations.
+
+![example_esmini_viewer_map](images/esmini_at_location.png)
+
+
## Additional information
#### Which OpenDRIVE file to render
diff --git a/doc/manual/images/esmini_at_00.png b/doc/manual/images/esmini_at_00.png
new file mode 100644
index 00000000..a7a93223
Binary files /dev/null and b/doc/manual/images/esmini_at_00.png differ
diff --git a/doc/manual/images/esmini_at_location.png b/doc/manual/images/esmini_at_location.png
new file mode 100644
index 00000000..8bb6b643
Binary files /dev/null and b/doc/manual/images/esmini_at_location.png differ
diff --git a/doc/manual/rule_uid_schema.md b/doc/manual/rule_uid_schema.md
index d50eb1a0..c521d7c7 100644
--- a/doc/manual/rule_uid_schema.md
+++ b/doc/manual/rule_uid_schema.md
@@ -92,8 +92,8 @@ concepts defined by ASAM.
Lets start with an example for a rule UID, and lets break down its concepts. The
example references a rule listed in the subsection **Rules** of one of the ASAM
Standards for OpenDRIVE. The Rules subsections were introduced for the first
-time in revision 1.6 of the standard. **Please notice that the full name of the
-rule may change in the future**.
+time in revision 1.6 of the standard. Note that a rule can start being applied
+to earlier versions of the standard.
> [ASAM OpenDRIVE Standard 1.6.0, Chapter 7.2 - Road Reference
> Line](https://releases.asam.net/OpenDRIVE/1.6.0/ASAM_OpenDRIVE_BS_V1-6-0.html#_road_reference_line),
@@ -104,20 +104,19 @@ we can identify the following concepts:
* **emanating entity**: ASAM `asam.net`
* **standard**: OpenDRIVE `xodr`
-* **definition settings**: the rule firstly appeared in `1.6.0`, the first
- revision to introduce the subsections rules
+* **definition settings**: the rule starts being applied to ASAM OpenDrive files from version `1.4.0`
* **Full name**:
- * **rule-set**: Road Planar Geometry definitions `road.planview.geometry`
- * **name**: summarizes the content of the rule, e.g. `ref_line_exists`. It is
+ * **rule-set**: Road Geometry definitions `road.geometry`
+ * **name**: summarizes the content of the rule, e.g. `refline_exists`. It is
always the last group in dot-notation strings.
The complete UID would be something like:
```text
-asam.net:xodr:1.6.0:road.planview.geometry.ref_line_exists
--------- ---- ----- ---------------------- ---------------
- | | | | |
- entity | version | name
+asam.net:xodr:1.4.0:road.geometry.refline_exists
+-------- ---- ----- ------------- --------------
+ | | | | |
+ entity | version | name
standard rule-set
```
@@ -141,10 +140,10 @@ recommended to define all concepts, if this is reasonably possible.
The proposed formalism allow to perform query on rules (or set of rules) using
UNIX style wildcards notation (i.e., python `fnmatch` module).
-Example: Query all the OpenDRIVE geometrical rules that were created in version 1.6.0
-1.6.1, or 1.7.0 of the standard: `asam.net:xodr:1.[67].[01]:*geometry.*` matches
-`asam.net:xodr:1.6.0:road.planview.geometry.ref_line_exists` but does not
-match `asam.net:xodr:1.8.0:road.planview.geometry.ref_line_exists`.
+Example: Query all the OpenDRIVE geometrical rules that were created in version 1.4.0
+1.4.1, or 1.5.0 of the standard: `asam.net:xodr:1.[45].[01]:*geometry.*` matches
+`asam.net:xodr:1.4.0:road.geometry.refline_exists` but does not
+match `asam.net:xodr:1.8.0:road.geometry.refline_exists`.
## Remarks on Rule Full names
diff --git a/doc/manual/runtime_module.md b/doc/manual/runtime_module.md
index 589b2a87..5c1c4f62 100644
--- a/doc/manual/runtime_module.md
+++ b/doc/manual/runtime_module.md
@@ -19,7 +19,11 @@ The runtime module can be installed using pip.
pip install asam-qc-runtime@git+https://github.com/asam-ev/qc-framework@develop#subdirectory=runtime
```
-**Note:** The above command will install `asam-qc-runtime` from the `develop` branch. If you want to install `asam-qc-runtime` from another branch or tag, replace `@develop` with the desired branch or tag.
+**Note:** The above command will install `asam-qc-runtime` from the `develop` branch. If you want to install `asam-qc-runtime` from another branch or tag, replace `@develop` with the desired branch or tag. It is also possible to install from a local directory.
+
+```bash
+pip install /home/user/qc-framework/runtime
+```
Then, it can be executed as follows.
diff --git a/doc/schema/xqar_result_format.xsd b/doc/schema/xqar_result_format.xsd
index f3f29c39..5acb0c90 100644
--- a/doc/schema/xqar_result_format.xsd
+++ b/doc/schema/xqar_result_format.xsd
@@ -15,6 +15,7 @@ with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
diff --git a/src/report_modules/report_module_gui/src/ui/c_checker_widget.cpp b/src/report_modules/report_module_gui/src/ui/c_checker_widget.cpp
index 259d224c..a735ef73 100644
--- a/src/report_modules/report_module_gui/src/ui/c_checker_widget.cpp
+++ b/src/report_modules/report_module_gui/src/ui/c_checker_widget.cpp
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -262,6 +263,25 @@ void cCheckerWidget::LoadIssues(std::list issues) const
ShowIssue(firstIssue, nullptr);
}
+ if (issues.size() == 0)
+ {
+ QTreeWidgetItem *newItem = new QTreeWidgetItem(_issueBox);
+
+ newItem->setToolTip(0, "Identifier");
+ newItem->setText(0, QString("-"));
+ newItem->setText(1, QString("-"));
+ newItem->setText(2, QString("-"));
+ newItem->setText(3, QString("No Issues Found"));
+ _issueBox->setItemSelected(newItem, true);
+ _issueDetailsTextWidget->setText(QString("No issues found in selected xqar file"));
+ _issueBox->addTopLevelItem(newItem);
+ QMessageBox msgBox;
+ msgBox.setWindowTitle("Result file info");
+ msgBox.setStandardButtons(QMessageBox::Ok);
+ msgBox.setText("No issues found in selected xqar file");
+ msgBox.exec();
+ }
+
_issueBox->expandAll();
}
@@ -650,15 +670,6 @@ void cCheckerWidget::ShowIssue(cIssue *const itemToShow, const cLocationsContain
}
}
}
- else
- {
- // This is the implementation of very simple reports. If a issue point to a
- // xodr or xosc file, it should have a FileLocation
-
- // If issue referes to an OpenDRIVE, show it!
- if (hasInputPath)
- ShowInputIssue(itemToShow, -1);
- }
}
}
@@ -790,7 +801,8 @@ void cCheckerWidget::PrintExtendedInformationIntoStream(cExtendedInformation *it
ssStream->setf(std::ios::fixed, std::ios::floatfield);
*ssStream << std::endl
- << " Location: x=" << std::setprecision(2) << initialLoc->GetX() << " y=" << std::setprecision(2)
- << initialLoc->GetY() << " z=" << std::setprecision(2) << initialLoc->GetZ();
+ << " Inertial Location: x=" << std::setprecision(2) << initialLoc->GetX()
+ << " y=" << std::setprecision(2) << initialLoc->GetY() << " z=" << std::setprecision(2)
+ << initialLoc->GetZ();
}
}
diff --git a/src/report_modules/report_module_text/src/report_format_text.cpp b/src/report_modules/report_module_text/src/report_format_text.cpp
index e16b646c..298b9e06 100644
--- a/src/report_modules/report_module_text/src/report_format_text.cpp
+++ b/src/report_modules/report_module_text/src/report_format_text.cpp
@@ -260,7 +260,7 @@ void WriteResults(const char *file, cResultContainer *ptrResultContainer)
std::list issues;
std::list rules;
std::list metadata;
- std::set info_violated_rules;
+ std::set info_rules;
std::set warning_violated_rules;
std::set error_violated_rules;
std::set addressed_rules;
@@ -358,7 +358,7 @@ void WriteResults(const char *file, cResultContainer *ptrResultContainer)
eIssueLevel current_issue_level = (*it_Issue)->GetIssueLevel();
if (current_issue_level == eIssueLevel::INFO_LVL)
{
- info_violated_rules.insert((*it_Issue)->GetRuleUID());
+ info_rules.insert((*it_Issue)->GetRuleUID());
}
if (current_issue_level == eIssueLevel::WARNING_LVL)
{
@@ -420,7 +420,7 @@ void WriteResults(const char *file, cResultContainer *ptrResultContainer)
ss << "\n" << BASIC_SEPARATOR_LINE << "\n";
}
- ss << "Addressed vs Violated rules report \n\n";
+ ss << "Rules report \n\n";
ss << "\nTotal number of addressed rules: " << addressed_rules.size();
for (const auto &str : addressed_rules)
@@ -428,24 +428,24 @@ void WriteResults(const char *file, cResultContainer *ptrResultContainer)
ss << "\n\t-> Addressed RuleUID: " << str << "\n";
}
- int total_number_of_violated_rules =
- info_violated_rules.size() + warning_violated_rules.size() + error_violated_rules.size();
- ss << "\nTotal number of violated rules: " << total_number_of_violated_rules << "\n";
+ int total_number_of_rules_with_issues =
+ info_rules.size() + warning_violated_rules.size() + error_violated_rules.size();
+ ss << "\nTotal number of rules with found issues: " << total_number_of_rules_with_issues << "\n";
- ss << "\nInfo violated rules: " << info_violated_rules.size();
- for (const auto &str : info_violated_rules)
+ ss << "\nRules for information: " << info_rules.size();
+ for (const auto &str : info_rules)
{
- ss << "\n\t-> Info violation RuleUID: " << str;
+ ss << "\n\t-> RuleUID with info: " << str;
}
- ss << "\nWarning violated rules: " << warning_violated_rules.size();
+ ss << "\nRules with warning issues: " << warning_violated_rules.size();
for (const auto &str : warning_violated_rules)
{
- ss << "\n\t-> Warning violation RuleUID: " << str;
+ ss << "\n\t-> RuleUID with warning issue: " << str;
}
- ss << "\nError violated rules: " << error_violated_rules.size();
+ ss << "\nRules with error issues: " << error_violated_rules.size();
for (const auto &str : error_violated_rules)
{
- ss << "\n\t-> Error violation RuleUID: " << str;
+ ss << "\n\t-> RuleUID with error issue: " << str;
}
ss << "\n" << BASIC_SEPARATOR_LINE << "\n";