Modifies EntityStateStore application to include support for dead-reckoning#94
Modifies EntityStateStore application to include support for dead-reckoning#94met4000 wants to merge 8 commits into
EntityStateStore application to include support for dead-reckoning#94Conversation
da6bd02 to
6c74aad
Compare
DeadReckoningStore application for entity dead-reckoning supportDeadReckoningModelStore application for entity dead-reckoning support
|
Thanks Nathan, this all looks good. No philosophical issues, just a few structural questions and code formatting changes requested to keep things consistent. Major themes are:
|
6c74aad to
edfd53c
Compare
michaelrfraser
left a comment
There was a problem hiding this comment.
Hey Nathan, just had a re-read of your latest changes and have a few more comments (again mostly documentation and logging related).
Might be also worth tagging in @timpokorny as this is getting closer to completion.
5cbff51 to
e8dca74
Compare
|
Looks like the order I pushed changes in while rebasing this time did manage to mess up the comparison that github links to. This should be the recent changes: https://github.com/openlvc/disco/compare/edfd53ce7a23ee45adb25f40804b13131e06eab5..e8dca7462fa88abb47bfe80ca31b2e41790fee21 |
|
Just starting to look at this, but unfortunately I have some other afternoon commitments. I'll be back later so I will attempt to re-pick up, but I am formulating some thoughts around the store. I need to actually be able to articulate them better, so let me browse more first, but broadly speaking I'm not sure the functionality belogs at the store level. I also share the questions about the marker interface on Let me look at it more to articulate what I think is needed and I'll come back. Small Naming Stuff I'd take a look at what's there and trim down some of the names. I'll come back with more articulated guidance on the |
|
Right, first things first, as a first step for getting DR into the framework this is excellent. All the hard work done of sorting out the enhancements to pull DR data out, and then do something intelligent with it, including the utility math to do the work is done and in place. To be honest, that's 94.2% of the world. My only major comment would be on infrastructure at the moment. There are a couple of changes I'd suggest that can reduce the infrastructure "touch" and keep it much lighter, while also keeping things feeling more consistent with the existing stuff. Notes
There are a few other small things like that where I think structurally at the moment it's like a hexagonal shape for an octagonal hole - it's close, but not quite smooth. Suggestions To ligten some of the infrastructure, I'd suggest the following (noting there may be reasons why we can't, so this is just opening suggestions):
Benefits
Thoughts solicited! |
|
@timpokorny I like those suggestion on how to structure it. A few discussion points:
Another point, although I'm not sure if we do anything about this; one advantage of having the dead-reckoning store separate from |
|
@met4000 - Personally, I would strive to keep DR at the entity-level. At
least the base implementation. It means that an entity can always resolve
its own DR values without the help of any additional infrastructure.
That’s probably the core theme id push for here. Keep it all inside the
entity.
Thinking about it on the fly (like I do most things), one could argue that
the functionality belongs inside EntityStatePdu itself. I like the idea of
a class that extends EntityStatePdu because it becomes a place to
encapsulate any members for caching or other optimizations that might be
useful without polluting the core EntityStatePdu code, which is just for
serialization/deserialization.
Let’s chat tomorrow with a whiteboard quickly. Notes for me to refer to
then so I don’t forget:
- Maybe not a store, but a “resolver” or some such (part of my issue with
the store is that it’s not really a store). Could just have a utility
“DeadReckoner” with methods that you pass a PDU to, and get a Dead Reckoned
version back. That’s not as neat as just having it all in the entity, but a
possibility
- Maybe DrEntityStatePdu should be the default version. Make it extend
EntityStatePdu, but all the serializers just create the sub-type. Maybe
pollutes the raw pdu layer a bit, but that may just be pedantic of me.
…On Thursday, October 30, 2025, Nathan Townshend ***@***.***> wrote:
*met4000* left a comment (openlvc/disco#94)
<#94 (comment)>
@timpokorny <https://github.com/timpokorny> I like those suggestion on
how to structure it. A few discussion points:
-
There are times where some sim apps will want to ignore the algorithm
that the PDU says it should use, and use one of their choosing
- To support this, I'd add overloads of getDrWorldLocation(
DeadReckoningAlgorithm,long) (and same for all the others) to let
users just be explicit about the values they want returned
DrEntityStatePdu sounds like it's meant to be 'an entity but
incorporating dead-reckoning information'. Keeping a DrEntityStatePdu
associated with only one algorithm makes it more straightforward to do
caching of results. EntityStateStore will likely still be storing
EntityStatePdus internally anyways, so instead of overloads of
DrEntityStatePdu::getDrWorldLocation etc. with an alternate
dead-reckoning algorithm, would it make sense to have DrEntityStatePdu
EntityStateStore::getEntityState(EntityId) and DrEntityStatePdu
EntityStateStore::getEntityStateWithAlgorithm(EntityId,
DeadReckoningAlgorithm), adding an accessor to EntityStateStore that
allows for an algorithm override?
Another point, although I'm not sure if we do anything about this; one
advantage of having the dead-reckoning store separate from
EntityStateStore is we can have different heartbeat timeouts for each (or
even no timeouts for dead-reckoned entities). A dead-reckoned entity will
usually have a slower heartbeat than a 'general' entity, so a timeout best
suited for one is likely not suited for the other. It seems like we don't
currently have mixed heartbeat rate support anyways, so maybe this is an
issue we deal with at a time where that gets added, and we assume that the
current rather long heartbeat timeout should work for both.
—
Reply to this email directly, view it on GitHub
<#94 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAG6WULWOIT6TKT455TRU6L32FWK7AVCNFSM6AAAAACJ3IFHF2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTINRVHAYTQMZWGA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
e8dca74 to
b1bda26
Compare
|
I wasn't expecting more discussion to have happened so soon and did end up switching over to having it based on |
b1bda26 to
fcea34d
Compare
|
WIP/TODO from discussion:
|
|
Not sure where application flags such as the one to disable dead-reckoning should be added - |
24cfa1f to
86e027e
Compare
|
... and we're back open for business. All DR Algorithms are now implemented, with rudimentary tests for RVW and RVB (the ones with 'all' features enabled, using world and body coordinates respectively). To perform dead-reckoning, instead of using Might still need to shuffle some things around (open to suggestions on changing interfaces etc.), but this should at least be most of the functionality. |
|
I'll still wait for Michael to give this a thorough look before merging, but @timpokorny interested to see if this new setup is in line with what you were thinking. |
Adds a number of methods to the Quaternion and Vec3 utility classes. Notably adds support for Quaternion -> EulerAngles conversion, rotating Vec3s by Quaternions, and introduces tests for Quaternion functionality.
DisApplication services and helpers used to be loaded before the config for the DisApplication was loaded. If they relied on config options then they would only be initialised with the defaults, even if the config used to initialise the DisApplication had been modified. This commit reorders the DisApplication constructor to load the config first before starting the services and helpers.
Modifies EntityStateStore to provide dead-reckoning models for entities, providing support for querying the entity's estimated position. See: openlvc#93
eb6ac75 to
020e102
Compare
DeadReckoningModelStore application for entity dead-reckoning supportEntityStateStore application to include support for dead-reckoning
timpokorny
left a comment
There was a problem hiding this comment.
Some minor pieces to look at, but overall this is looking really good.
|
I've updated my IDE to catch more formatting issues. These new changes should (mostly) fix the line width and some other formatting issues I noticed, and also implement those other suggestions. |
da8eeee to
2d54df6
Compare
|
Some minor modifications; the recent commits have been renamed to make their naming consistent and clearer how they will be rebased in the previous commits. The latest commit has new formatting fixes and code tweaks to make Sonarqube happy(er). |
Modifies
EntityStateStoreto use the newDrEntityStatePdus, allowing dead-reckoning to be performed on stored entities.Provides support for all 9 dead-reckoning algorithms in the DIS v7 specification.
Resolves: #93