Skip to content

[#1076] Use intersection of variables when copying state

Igor Bogoslavskyi requested to merge 1076-better-copy-into-state into master

Description

When changing the motion model of the state estimator, I bumped into an issue that the measurements could not be copied if the tracked state would not hold the variables that the measurement measures. This is important as our measurements generally measure in 3D, while we might want to track the state in 2D, so a reduction to a different state would be needed.

This MR introduces a trait to find an intersection of types in a tuple and uses this trait to copy only those elements of the GenericVectors that are present in both sides of the copy operation. See the tests for more details.

Related to #1076 (closed)

Notes for reviewer

I decided to put this all into a single MR, but if you feel it should be split I am happy to do that too.

Pre-review checklist for the author before submitting for review

Every developer is encouraged to be familiar with our contributor guidelines.

  1. MR title and description help a friendly human understand the problem solved
  2. Sensible notes for the reviewer added to the section above to facilitate review
  3. MR fits the criteria of a "small change" listed below
  4. "WIP" or "Draft" removed from the MR title
  5. MR has a link to the original issue in the description, if it exists
  6. If the source branch is on a fork, MR is configured to allow commits from developers with access to push to the target branch
  7. Target branch set correctly. Default: master
  8. MR assigned to a capable reviewer. Default: JWhitleyWork
What is meant by a "small change"?

This is a template with a trimmed-down checklist for small MRs. Use it when no new functions, classes or other things that require testing have been added.

Examples are changes to documentation only, a fix for an off-by-one error, improving the CI, or changing log messages to be more informative. When in doubt, use the regular template.

Checklist for the reviewer

Only the reviewer is allowed to make changes in this section!

Mark all the items that are done, and cross out items not applicable to this MR.

  1. Basic checks
    1. The MR title describes what is being done on the ticket
    2. The MR does not require additional tests or documentation to be written
    3. The first commit has a proper commit message to be used as a basis for the squashed commit created at the very end; e.g. [#928] Fix foo in bar
  2. Code correctness
    1. The problem/feature is solved (reproducibly)
    2. The solution is performant enough for the use case in mind
  3. Open work
    1. Any added source-code comment about future work refers to a follow-up GitLab issue explicitly; e.g., // TODO #551 refactor code below

If the MR provides an improvement, don't hesitate to add a 👍 emoji for a neat line of code or a "Thanks for implementing this" comment. This will reward the MR author and prevent the review from being only about what still needs to be improved.

Post-review checklist for the author

After receiving approval:

  1. All checkboxes in the MR checklist are checked or crossed out. Syntax example: 1. [ ] ~~this item crossed out~~
  2. If there are multiple commits, the MR title has to contain the issue number as it's used for the squashed commit message; e.g. [#928] Fix foo in bar
  3. Assign MR to @merge-bot
Edited by Igor Bogoslavskyi

Merge request reports

Loading