-
Notifications
You must be signed in to change notification settings - Fork 57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(robosense): add Robosense M1 support #105
base: main
Are you sure you want to change the base?
Conversation
2a069ad
to
07ffa64
Compare
Codecov ReportAttention:
❗ Your organization needs to install the Codecov GitHub app to enable full functionality. Additional details and impacted files@@ Coverage Diff @@
## main #105 +/- ##
========================================
+ Coverage 6.43% 8.00% +1.57%
========================================
Files 136 78 -58
Lines 10895 8308 -2587
Branches 854 844 -10
========================================
- Hits 701 665 -36
+ Misses 9618 7069 -2549
+ Partials 576 574 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
07ffa64
to
052e883
Compare
Currently there is a lot of code duplication happening between sensor models, e.g. for accessing specific fields, determining return types, etc. Furthermore, exotic/non-standard sensors require extra branches or parameters in the decoder. This commit introduces sensor mixins and generic field accessors, which together can be used to compose a wide range of sensor implementations. Currently handled functionalities: * Generic accessors for packet blocks and units * Generic accessors for boost::endian and native struct members * Mixin for getting point azimuth/elevation * Mixin for getting channel IDs * Mixin for getting distance units, distances * Mixin for getting point intensity * Mixin for getting sensor return mode * Mixin for checking scan completion (not limited to angle-based checks) * Mixin for getting packet and point timestamps * Mixin for point pre-validation (e.g. distance !=0 etc.) Sensors implemented using this system must inherit from SensorPase<PacketT>, as well as from all of the used generic/specific mixins they are composed of.
…ntation, rewrite decoder In anticipation of the Robosense M1 PR, the `robosense_decoder.hpp` had to become more generic to support non-angle-based scan cutting along with completely different mechanisms for angle data, dual return and timestamps. Thus, Robosense is the first vendor to be moved to the new composable sensor model, starting with Helios and Bpearl. * Introduce decode groups: multiple packets can be grouped and decoded together, as is necessary for RSM1 * Packet/Block/Unit stride definition for generically handling different return group layouts * Decoder now uses generic sensor member functions to access all point data * Rewrite sensor classes to use SensorBase and mixins * Add SensorInfo classes for the info decoder * Currently, timing and return types are not fully re-implemented * `angle_corrector.hpp` is deleted in favor of sensor mixins * The driver now instantiates sensor objects passed to the decoder
…ocated boost::container::static_vector
206c884
to
0ff52d8
Compare
🟡 gPTP SyncgPTP seems to work with the settings from the M1 datasheet 👍 |
…ix formatting, comments
221ae59
to
aaed2d6
Compare
PR Type
Related Links
This PR depends on:
Description
After #104 is merged, perform
rebase -i HEAD~8 --onto main
on this branch to get rid of the duplicated commits in this PR.This PR adds support for Robosense M1. Similarly to Helios and Bpearl this driver does not support setting return mode from config files (c.f. #77). This has to instead be done through the sensor's web interface.
azimuth
elevation
channel
return_type
distance
intensity
timestamp
performance*
*: Each M1 scan message has exactly 1 packet so decode performance looks much better here than it would be when aggregated for a full scan.
Review Procedure
Test all M1-specific functionality, especially pointcloud output and performance. C.f. the analysis in #77.
Remarks
Pre-Review Checklist for the PR Author
PR Author should check the checkboxes below when creating the PR.
Checklist for the PR Reviewer
Reviewers should check the checkboxes below before approval.
Post-Review Checklist for the PR Author
PR Author should check the checkboxes below before merging.
CI Checks