- 19 Aug, 2021 15 commits
-
-
Julia Sanchez authored
-
Julia Sanchez authored
* For now we just had a front end and a main thread. If we want to add a backend, a new external pose info must be received with pose covariance and time. * A new SensorState structure is added in SensorConstraint.h file * The State structure is transformed to LidarState and is derived from SensorState
-
Julia Sanchez authored
* Before this commit, external sensor info could only be used in post processing, loading a csv file containing this info * External sensor data can now be used in front end directly * These data would be received by the main thread and added to the sensor managers * Sensor managers now contain deque of measures (instead of vectors) * The constraints computation are mutex protected against measures external modifications (Adding) * Documentation is updated and completed * WARNING : only an interpolation is performed between external sensor measurements to find the mesure corresponding to Lidar Frame timestamp (no extrapolation). It supposes external sensors have a frequency higher than the Lidar. Other measures in between two Lidar timestamps are not used.
-
Julia Sanchez authored
* C++11 does not support correctly the hash maps with enum types * The corresponding hash type is added to the definition * It seems weird that it works for Keypoint enum though...
-
Julia Sanchez authored
-
Julia Sanchez authored
* Outputs were always computed whether they were published or not by the wrappings * A map member is added to SLAM lib to internally not compute useless features * In PV, the map is set to correspond to filter output and the advance settings features * In ROS it is directly parameterizable through config file. Warning : it is still computed even if no one is listening to the topic, the user has to deal with the config file
-
Julia Sanchez authored
* A new member TimeDependentProcessesEnabled to enable/disable motion model based ego-motion + undistortion + velocity/acceleration estimation * This new boolean value is filled in CheckFrames() * This value is stored in the state to be used after to estimate velocity * The velocity is estimated only if the times in the window are valid
-
Julia Sanchez authored
* In Lidarview, all processes (frame processing and publishing) need to be done in RequestDatafunction. * With this new multiprocessing, the local SLAM loop can return nothing (lack of keypoints, time problems...). If the publiser thread is the main thread, it will be locked indefinitly, waiting for results. * This commit allows to publish a result from the localSLAM thread even when the SLAM computation has not been performed and so, to let the request data keep going.
-
* Adapt RequestData function : * Add a new frame in waiting list, * wait for result, * pop and publish it. * All Slam getters and members are replaced with the publishable object data
-
* Adapt functions using transform objects * Add publisher thread which is launched in node constructor. This thread : * waits for a new data in publishable list, * pops it and publishes it * Add destructor to stop Slam process and join publisher thread * All Slam getters and members are replaced with the publishable object data * Adapt Logging parameter
-
* A local Slam thread is launched in Slam constructor to pop and process frames. This thread calls the new function GetAndProcessFrames(). * A destructor is added to free all list waiting threads and to wait for the front end thread to finish frame processing and to join. * A stop function can do the same in order to join a potential external publisher thread before removing slam object. * AddFrame and AddFrames functions are renamed ProcessFrame and ProcessFrames to avoid confusion with the "adding" terminology with new waiting lists. * The new logged data + published data structures are filled in LogCurrentFrameState and stored in shared lists. All other log** objects are removed and dangerous getters/setters are removed or privatized. * The transform object is changed to only process a transform. It will still be useful in ROS. * PreviousTworld is removed and all processes which needs to access previous transforms now copy elements of logged data list. * The wrapping are not updated at this step. * 2 Mutexes are added : 1. Protect the parameters changes from user in main thread while reading them in front end / back end 2. Protect the local variables (Tworld / maps / keypoints / previous states...) from front end / back end computations and some command functions (SetWorldTransformFromGuess, LoadMapsFromPCD)
-
* logged data will be used for undistortion, ego-motion and for a global optimization step. It contains : * a timestamp * an ID * an Isometry (world) * a covariance * the relative frame undistorted keypoints (base) * publishable data will be used to publish info about a current computed pose in wrappings. It contains : * a state * the relative frame undistorted keypoints (world) * the local maps * the input frames registered in the map * debug arrays / info * the latency corrected transform
-
* This new container will be used to store frames and SLAM results waiting to be processed/published AND to store log results * The requirements are : * allow a thread to wait for data and pop the front one * allow an access to the last elements (for undistortion/ego-motion/resetting) * be able to free threads waiting * have a max size and erase oldest data * atomize all external actions on this container (clear/copy...)
-
* These parts will be refactored from the new multithreaded version in a next MR * They will become online processes * They are disabled to allow a clean refactoring step
-
* This transform is not used from outside ego motion part * It is removed to clarify threads access to members * Tworld is directly updated in ego motion function
-
- 17 Aug, 2021 2 commits
-
-
Julia Sanchez authored
Fix build in Debug mode See merge request !148
-
Julia Sanchez authored
-
- 16 Aug, 2021 1 commit
-
-
Jerome Dias authored
This commit allow the paraview_wrapping of the Slam to be built in Debug mode.
-
- 21 Jul, 2021 2 commits
-
-
Julia Sanchez authored
[fix] Fix segfault when applying SLAM See merge request !146
-
Julia Sanchez authored
* By now, SLAM can only be applied on the field Frame which is a polydata and not on Trailingframe which is a multiBlock * TrailingFrame is selected by default when loading a pcap so the first call to the SLAM filter without changing the selected field in Pipeline browser makes LV crash (SegFault). * This commit allows to apply the filter on the Trailingframe input * It checks the input in RequestData and extract the polydata from the multiblock if needed
-
- 29 Jun, 2021 3 commits
-
-
Nicolas Cadart authored
Specify CMake project version See merge request !144
-
Nicolas Cadart authored
-
Julia Sanchez authored
[fix] Fix runtime error in motion limits check See merge request !143
-
- 28 Jun, 2021 2 commits
-
-
Julia Sanchez authored
-
Julia Sanchez authored
* The case when not enough poses are logged to comply with the required window was badly handled. This commit corrects it.
-
- 24 Jun, 2021 4 commits
-
-
Julia Sanchez authored
[fix] Add a temporal window to estimate velocity See merge request !141
-
Julia Sanchez authored
* The Lidar SLAM angular estimation is not smooth enough to estimate accurately local velocity. * The velocity estimation is smoothed, using a temporal window parameterizable in seconds. * In PV, loggingTimeout param follows WindowTime param as it is not settable from UI * In ROS, the user has to choose a loggingTimeout value g.t. WindowTime param manually. If not, a warning is raised and the estimation is based on the current stored poses.
-
Nicolas Cadart authored
Check timestamp before ego motion extrapolation See merge request !142
-
Nicolas Cadart authored
-
- 23 Jun, 2021 2 commits
-
-
Nicolas Cadart authored
-
Nicolas Cadart authored
-
- 22 Jun, 2021 1 commit
-
-
Nicolas Cadart authored
Cleaning and refactoring of keypoints matching See merge request !140
-
- 21 Jun, 2021 6 commits
-
-
Nicolas Cadart authored
-
Nicolas Cadart authored
-
Nicolas Cadart authored
Rename matching parameters for clearer usage. MinNbrMatchedKeypoints -> MinNbMatchedKeypoints MaxDistanceForICPMatching -> MaxNeighborsDistance LineDistanceNbrNeighbors -> EdgeNbNeighbors MinimumLineNeighborRejection -> EdgeMinNbNeighbors LineDistancefactor -> EdgePcaFactor MaxLineDistance -> EdgeMaxModelError PlaneDistanceNbrNeighbors -> PlaneNbNeighbors PlaneDistancefactor1 -> PlanePcaFactor1 PlaneDistancefactor2 -> PlanePcaFactor2 MaxPlaneDistance -> PlaneMaxModelError BlobDistanceNbrNeighbors -> BlobNbNeighbors Delete unused KeypointsMatcher::Params::MinNbrMatchedKeypoints
-
Nicolas Cadart authored
-
Nicolas Cadart authored
This allows setting this parameter from ParaView UI.
-
Nicolas Cadart authored
This param value was lowered from 25 yo 10 neighbors.
-
- 18 Jun, 2021 2 commits
-
-
Nicolas Cadart authored
To build a model of the neighborhood, a minimum number of points is needed: - 2 for a line model - 3 for a plane model - 4 for an ellipsoid model A check is added to verify that enough neighbors are requested to build the target model. Otherwise, a MatchStatus::BAD_MODEL_PARAMETRIZATION error code is returned. This also prevents the matching procedure from crashing if no neighbors are requested.
-
Nicolas Cadart authored
Reformat XML proxy See merge request !139
-