Feature/osc validation integration#747
Conversation
|
Thanks for this interesting initiative. Potentially it can contribute in harmonizing tools. We'll first look into the ID topic. We understand any ID shall be globally unique, across categories of simulation entities. So far esmini have reused any specified ID in the OpenDRIVE objects, e.g. stationary objects. This traceability from OSI to scenario components is important. We'll now look into whether we can utilize ExternalReference to achieve this instead. |
|
@thomassedlmayer We have an experimental branch which aims to address the issue of overlapping ID's in OSI. Would it be possible for you to verify that branch's functionality against the ASAM OSI Quality Checker? It would be great to get your feedback in case there's still some issues. The branch in question: feature/global_osi_ids |
- track internal scenario ID in OSI source reference
|
We have now made a release 2.57.0 which hopefully complies with ASAM OSI Quality Checker. This is a first step for this PR. |
|
Hi @slundel6 and @eknabevcc, Though, you probably noticed that the validation step still fails. There are four remaining issues of which 3 will be fixed by some updates on the side of osc-validation. I will update this PR once this is solved on our side. But there is one remaining issue which I unfortunately overlooked to mention in my initial request: OSI's rules require the Once this is solved, this should allow more focus on actually validating the OpenSCENARIO part of ESMini (which is the actual goal of osc-validation! Thank you again for your cooperation and your help regarding the OSI output of ESMini! |
|
We added the |
I accidentally stumbled across this MR while I was having issues with not globally unique IDs in the OSI quality checker. I still don't understand this rule at all, but since it is being enforced in esmini now, I found another issue with the IDs. Check out this test scenario: xodr_stationary_objects_example.zip The IDs of traffic signs don't seem to be handled. |
|
Good catch @ClemensLinnhoff , it was indeed missed. Thanks for the included scenario-files, it made it easy to spot. A new commit 81ec9e62 has been pushed to dev that hopefully fixes it. |
7e6a3f4 to
c8d1735
Compare
|
Hi @thomassedlmayer, I've been looking into moving this PR forward. Here's a status summary of where things stand: Resolved on esmini side (all merged to
Resolved on osc-validation side:
Remaining work to get this mergeable:
I'd be happy to help with the rebase and cleanup if you can grant me push access to your fork. Let me know! |
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
c8d1735 to
d3c32f6
Compare
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
3f8c19c to
a25086c
Compare
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
|
I updated the osc-validation reference to the newest state including some new test cases to validate start trigger behavior of some exemplary conditions. Good news: esmini passes all of them so far! (see test (ubuntu-22.04, Release) / I recently noticed that esmini has the Also, I had to fix some CI issues that occurred out of nowhere because the github actions windows runners seem to report cygwin instead of msys now, causing PYTHON to be unset and smoke_test.py to fail. I don't know if this is just happening on my fork? @eknabevcc @slundel6 Do you have a timeline for osc-validation to be integrated? Did you have a look if you could agree on the general setup of the github actions for osc-validation? Let me know, if I need to make any changes to comply with your requirements. Btw, we asked to present the osc-validation project in the OpenSCENARIO CCB, so we get more traction/support also from other scenario engine providers. The discussion will probably take place on May 22. Side note: I temporarily disabled the nightly runs because I keep getting notifications due to a missing dev branch on my fork. Maybe these could be set up more fork-friendly in general but I didn't look more into that for now. |
|
Thanks @thomassedlmayer for pushing this forward. We'll have a look. I can right now confirm I had the same issue with sudden cygwin OSTYPE reported for windows images, but only sometimes. We had to update script (commit d144794) to support both "msys" and "cygwin". To my understanding it's just a matter of how the bash environment is launched, it should be no functional difference. |
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
09963e1 to
d82417d
Compare
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
|
Hi @eknabevcc, We released the first version of osc-validation with a few new test cases. It now supports test profiles ( For example, we added a test case validating the new interpolation requirement introduced in OSC 1.4.0 (constant acceleration interpolation), which is expected to fail for esmini right now (see OSC Issue #723). The test profile lets you ignore test cases you don't want to tackle immediately. By the way, you also get a comprehensive html report with detailed error logs etc.: https://github.com/thomassedlmayer/esmini/actions/runs/29261950752/artifacts/8283893034 The other xfail-marked tests in the report validate parts of the edge cases defined in section 6.9 of the OSC specification. |
Signed-off-by: Thomas Sedlmayer <tsedlmayer@pmsfit.de>
|
Hello @thomassedlmayer ,
Great work so far, feels like a merge is quite close! |
|
Hi @slundel6! Test 3 and 4 fail because esmini's behavior diverges from what section 6.9.3 says in my opinion. I'm not saying that 6.9.3 makes sense but I think the following phrasing to me sounds like the teleport to the corresponding position should happen instantly and not with any delay.
Esmini seems to skip that mentioned point and in the subsequent frame jumps to the next trajectory vertex. So from then on the trajectories are in sync again. I don't want to say that esmini should change any behavior. Instead, our intention was to show that this could be a good process to identify bad definitions in the standard. Similarly, such test cases could be built for new features before publishing them in a new standard version (as we demonstrated for the new acceleration-based interpolation method). I also created another branch in this repo and removed all the workarounds for the experienced fork CI issues: I don't insist on the way I've set up the CI job. Feel free to adapt it as you like! |
|
Thanks for the detailed reply! We're taking the chance to investigate these errors, and I've ran the framework locally (which was smooth following the guide on your repo). I don't know this framework very well so I might be doing things wrong, but I find it a bit tricky to find out exactly what went wrong in a failed test. Here's an example (short version) summary of the failed test 3:
I can see that 0.15 is > 0.1 and that this is a distance, and can guess that in this particular case its probably at timestamp 2.0, but is there a way to be certain? E.g. some verbosity level or similar with extra info on actual vs expected values. |
|
Thank you for the detailed explanation, very much appreciated. |
…再同期 (fixes-partial #37, signal:osi) fork-sync G1-G3: gt_osireporter lineage の実装ドリフト本体を upstream 752dcaa..77028d8 相当へ port。base 8d2ebfb のレビューで「済」扱いだった リワーク(全て 8d2ebfb の祖先)の GT 側実装が実際には書かれていなかった分。 G1 (GT_OSIReporter.cpp): - UpdateOSIStationaryObjectODR を upstream 版へ差し替え: RepeatInstance ベースの per-instance 発行 (GetRepeatInstances(road)、 repeat 1インスタンス=1 OSI object、2個目以降 GetNewGlobalId())、 build_outline_polygon lambda (open outline の中間頂点逆順閉包 + c0a143d の desired_idx>=0 境界ガード)、z式 ri.z+height/2 (旧GT実装は GetZ()+GetZOffset()+h/2 で z 二重計上)、restrictions: ラベル接頭辞。 [upstream cbf22f5 + ed95d1c + 4ab787a + c0a143d] - UpdateOSIRoadMarkingsODR + ODRColor2OSIMarkingColor を新規 port (共有ヘッダ OSIReporter.hpp に宣言だけ存在、GT 定義が無かった)。 CreateOSIStaticGroundTruthFromODR のループへ呼び出しを追加。 GT P8 invalidated-skip は呼び出し側で温存。 G2 (GT_OSIReporter_Traffic.cpp:97): - traffic_sign.id をローカル signal->GetId() から signal->GetGlobalId() へ [upstream 81ec9e6 "esmini#747"]。in-repo 消費者棚卸しで local-id 前提なし。 G3 (GT_OSIReporter_Moving.cpp / GT_OSIReporter.cpp): - moving object と OSC stationary object に outline_2d_->base_polygon、 color_description RGB、GetModel3DFilename->GetModel3DFullPath を追記。 - GT 独自部 (future_trajectory / assigned_lane_id 是正 / has_lightstate_action_ ラッチ / P4 enrichment / sentinel ガード / ApplyAuthoredJunctionBoundaries) は全て不変。 検証: ScenarioPlayer_test 17/17, ScenarioEngineDll_test 120/120, ScenarioEngine_test 99/99 (Release+Debug 両方)。再有効化対象 8 テスト (OSI.TestStationaryObjects 他 7 + OSILaneParing.Signs) 単独緑を実測。 run_gt_tests.ps1 PASS。VD 回帰 3 バッチ (car_following 12 / aeb 5 / anticipation 5) baseline 逸脱 0。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…xes-partial #37, signal:osi) fork_sync_manifest.yaml の gt_osireporter lineage base.commit を 8d2ebfb -> c0a143d ("Add outline polygon idx out of bounds check") へ更新。 evidence に記録: 旧 base 8d2ebfb はレビュー済だったが、その祖先である cbf22f5 / ed95d1c / 4ab787a (stationary/outline/markings リワーク) と 81ec9e6 (sign global id esmini#747) の GT 側実装 port は未実施だった。 本ブランチの G1-G3 で port 完了。c0a143d5 は 8d2ebfb 以降で OSIReporter.cpp/.hpp に触れる唯一の upstream commit であり、新 base は 当該 lineage の upstream/master (77028d8) tip と一致 -> check_fork_sync.py で gt_osireporter pending=0 (OK) を実測。 基準ファイル更新なし: check_fork_sync は upstream git 履歴のみ参照 (凍結 blob 不使用)。check_core_census の pristine OSIReporter.cpp@752dcaa0f3db 基準は在庫 pristine 不変のため据え置き (census OK 0/30、fork-drift OK 98/150 を実測)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This is a draft/proposal to include osc-validation in the CI pipeline of ESMini.
Coming from the European Synergies project, we developed an OpenSCENARIO engine validation tool called
osc-validation(open source). The goal is to detect behavioral differences between scenario engines based on their OSI output but also potential deviations from the OSC standard (for OSC definitions that are unambiguous). Another long-term goal is to identify underspecified or ambiguous parts of the OSC standard.osc-validationis temporarily hosted at https://github.com/PMSFIT/osc-validation. It's soon going to be part of the OpenMSL project.The only integrated test currently verifies that the vehicle trajectories in the OSI output deviate only marginally from the input data, which ESMini is expected to satisfy.
Though, with the current state of the test case, ESMini would fail because of an integrated ASAM OSI Quality Checker (https://github.com/OpenSimulationInterface/qc-osi-trace) which checks the tool output for compliance with OSI 3.7.0 rules which are based on the
/rulessections in the proto definitions. The checker result shows that there are some problems with unique assignment of IDs in ESMini's OSI output (different object types have overlapping ID space).If you are interested in integrating this into ESMini's pipeline, I would ask you to review the CI setup and check out
osc-validation.I had to upgrade from Python 3.8 to 3.10 for compatibility reasons. But this should be fine since Python 3.8 already reached its EOL about a year ago. We could even go higher since 3.10 is already close to its EOL timeline.
Sidenote:
Also, I noticed that there are some issues with the current pipeline setup when running it in a fork (due to missing tags etc.); see the changes in OSMP_FMU/CMakeLists.txt. This should be removed before ever merging this PR. This is just there so that the pipeline runs properly in my fork.
@jdsika