Commit Graph

757 Commits (926b8540f696c73c33e9bee69d22ee835a478b2f)

Author SHA1 Message Date
Christoph Schütte 1de696d45f Introduce PoseGraphInterface::ToProto() (#813) 2018-01-12 13:55:14 +01:00
Christoph Schütte fee77c8a99 Add LocalSlamResultData retrieval and submap management (#810)
[RFC=0002](https://github.com/googlecartographer/rfcs/blob/master/text/0002-cloud-based-mapping-1.md)
2018-01-12 13:00:25 +01:00
gaschler 51ccee3e74 CollatorInterface (#808)
[RFC=0008](https://github.com/googlecartographer/rfcs/blob/master/text/0008-collator-interface.md)
2018-01-11 16:02:03 +01:00
Christoph Schütte 8fc64fdbb5 Wrap HybridGrid in unique_ptr to make Submap updatable (#809) 2018-01-11 14:34:56 +01:00
Christoph Schütte e1a182d1fa Implement LocalSlamResult data adding to PoseGraph. (#804) 2018-01-11 10:19:37 +01:00
Christoph Schütte d313af8674
Add InsertionResult to LocalSlamResult. (#801) 2018-01-10 17:26:04 +01:00
Susanne Pielawa c7a8c5fda9 Keep fixed frame across optimizations. (#807)
PAIR=wohe
2018-01-10 16:01:27 +01:00
Susanne Pielawa 286d16238e In optimization_problem, use a map instead of vector for trajectory data. (#805)
PAIR=wohe
2018-01-10 14:30:51 +01:00
Susanne Pielawa 67d26747cc Implement assignment operator for common::optional. (#800)
Implement assignment operator for common::optional.
2018-01-09 17:54:53 +01:00
Christoph Schütte 8c7c4e3d2a Make LocalTrajectoryBuilder optional. (#799)
This is to prepare for the cloud-based mapping case where the robot is running cartographer in pure-localization mode and the cloud instance only solves the global problem. In that case a `LocalTrajectoryBuilder` need to be instantiated in for the cloud instance.
2018-01-09 16:54:30 +01:00
Christoph Schütte 8165da873f Add GetConstraints() to gRPC service. (#798) 2018-01-09 14:25:28 +01:00
Christoph Schütte 78d05bf745 Add GetTrajectoryNodePoses() to gRPC service (#796) 2018-01-08 14:19:39 +01:00
Christoph Schütte d57c2441b8 Implement gRPC submap query. (#794) 2018-01-08 13:52:14 +01:00
Susanne Pielawa 91034eaf58 Making pose in FixedFramePoseData optional. (#792)
This is for the case that the GPS signal is not available.
2018-01-08 11:37:07 +01:00
Christoph Schütte 196b4b891c Add PoseGraphInterface::GetTrajectoryNodePoses() (#795) 2018-01-08 09:13:51 +01:00
Christoph Schütte 1a837ef3ab Introduce PoseGraphInterface::GetAllSubmapPoses() (#790) 2018-01-05 14:19:08 +01:00
Susanne Pielawa 63a80c9340 Adding a minimal implementation of std::optional. (#783)
We're using C++11, which doesn't have std::optional. We need a few
features of std::optional for improved GPS support. These are
implemented here.
2018-01-05 11:27:21 +01:00
Juraj Oršulić 58d94aaa68 Refactor calling optimization into DispatchOptimization. (#729)
I noticed that @jihoonl opened the PR #726 which performs a similar thing. As discussed in googlecartographer/cartographer_ros#613 (@cschuet  has already taken a look), I pulled this out of #481 (a really old PR whose merging has been postponed), which is an example where re-running optimization is triggered from elsewhere as well (besides from `ComputeConstraintsForNode`). This refactoring makes libcartographer friendlier for use cases such as that one.

An important detail is that I have changed the condition in `WaitForAllComputations` to also check if the work queue is empty. If there are other things on the worker queue besides `ComputeConstraintsForNode`, currently we will wrongfully conclude that all computations are done. (This detail was merged in #754, so it's no longer in the diff of this PR).

Also missing is the same thing for 3D. I can add that when we settle on this.

Also, I suggest that `run_loop_closure` gets renamed to `run_optimization`.
2018-01-05 10:43:56 +01:00
Jihoon Lee 2ad83662f2 Migrate SubmapTexture and SubmapSlice logics from cartographer_ros (#782)
Towards [RFC06](https://github.com/googlecartographer/rfcs/blob/master/text/0006-serve-ros-map-from-pbstream.md).

Migrates
* `FillSubmapSlice` from `pbstream_to_rosmap_main.cc` 
* `SubmapTexture` logics from cartographer_ros
2018-01-04 10:52:05 +01:00
Juraj Oršulić 9ee65293d2 Pose graph: do not mark all submaps finished when finalizing a trajectory. (#784)
I think this was a mistake in #563 (@jihoonl). Not all submaps should be marked as finished, only those pertaining to the trajectory being finalized.
2018-01-04 10:11:28 +01:00
gaschler dbb3f7cde4 Test TrajectoryBuilderStub (#780) 2018-01-03 14:56:56 +01:00
Christoph Schütte 5b5b290e9f Implement BlockingQueue::WaitUntilEmpty(). (#775)
PAIR=gaschler
2017-12-20 10:22:53 +01:00
Christoph Schütte 02734c296d Implement ReceiveLocalSlamResultsHandler. (#772) 2017-12-19 15:11:29 +01:00
Christoph Schütte 03751b3c9f Implement local SLAM subscriptions in MapBuilderServer (#766) 2017-12-18 16:32:34 +01:00
gaschler c6decd5b7b Test MapBuilderServer (#762)
Test to start and stop the MapBuilderServer.
Moves test helper functions in common with MapBuilderTest
to internal/mapping.
2017-12-18 11:52:17 +01:00
gaschler d49706944f FixedFramePoseData in gRPC server (#761)
Defines the FixedFramePoseData RPC and implements
the handler for the gRPC server.
2017-12-15 15:26:58 +01:00
gaschler 6817d22788 Test global 2D SLAM. (#751) 2017-12-15 14:45:56 +01:00
Juraj Oršulić 29e4395a5a Make WaitForAllComputation wait for work queue in 3D as well (#758)
Repeat the change in #754 by @gaschler for 3D as well.
2017-12-14 10:02:54 +01:00
gaschler f8452821d7 WaitForAllComputation waits for work queue (#754) 2017-12-13 18:49:22 +01:00
gaschler 59d1b968bc Unwarp by point in LocalTrajectoryBuilder. (#636) 2017-12-13 18:29:42 +01:00
Christoph Schütte c5ec086968 Introduce TimedPointCloudData. (#748)
This data structure is needed to forward RangeFinderData over gRPC.

[RFC=0002](https://github.com/googlecartographer/rfcs/blob/master/text/0002-cloud-based-mapping-1.md)
2017-12-08 19:28:47 +01:00
Christoph Schütte 3ae78563c6 Introduce TrajectoryBuilderInterface. (#736)
[RFC=0004](https://github.com/googlecartographer/rfcs/blob/master/text/0004-trajectory-builder-interface.md)
2017-12-08 11:52:29 +01:00
Christoph Schütte 96cdbde5bf Introduce PoseGraphInterface. (#744)
[RFC=0005](https://github.com/googlecartographer/rfcs/blob/master/text/0005-pose-graph-interface.md)
2017-12-08 11:13:48 +01:00
gaschler 549eef0000 Correct namespace (#742) 2017-12-07 21:17:30 +01:00
Michael Grupp 176fc42c3f Remove empty leftover of pose_estimate.h (#740)
Follow-up of #670.
2017-12-07 08:53:04 +01:00
Christoph Schütte 2a7a6ef934
Make sensor::Data dispatchable to TrajectoryBuilder. (#738)
This change allows to dispatch sensor::Data to implementations of mapping::TrajectoryBuilder, i.e. CollatedTrajectoryBuilder. We need this for cartographer_grpc as the incoming sensor data is inserted into a queue by the gRPC threads and dequeued by a SLAM threads that inserts them into a CollatedTrajectoryBuilder.
2017-12-06 16:36:36 +01:00
gaschler 4c999037b4 Integration tests for local slam. (#734) 2017-12-06 15:58:16 +01:00
gaschler 49d55d97c1 Test MapBuilder (#731) 2017-12-05 14:04:10 +01:00
gaschler b77a1f2178
Remove implementation from TrajectoryBuilder. (#728)
To simplify the implementation of a gRPC-based trajectory builder,
this moves the existing implementation to CollatedTrajectoryBuilder
and organizes the interface by sensor type.
2017-12-05 11:05:05 +01:00
gaschler ee9c61a736 Move LocalSlamResultCallback to AddTrajectory (#724) 2017-12-04 22:41:38 +01:00
gaschler 1ff8243802
Test RotationDeltaCostFunctor (#721) 2017-12-01 09:25:15 +01:00
gaschler 63e901d276
Create AutoDiffCostFunction in cost functions. (#718)
Creating a ceres::AutoDiffCostFunction requires specifying numbers
of residuals and variables, so it is safer to implement this within
the cost functions, which know best.
2017-11-30 15:41:57 +01:00
gaschler 85bfb888eb
Interface for MapBuilder (#715)
Defines an interface for MapBuilder that can be used to implement a gRPC stub.
[RFC=0002](https://github.com/googlecartographer/rfcs/blob/master/text/0002-cloud-based-mapping-1.md)
2017-11-30 14:41:48 +01:00
gaschler 24f253a2aa Remove GetBlockingTrajectoryId (#714) 2017-11-30 12:04:14 +01:00
Jihoon Lee 88805a301d Trim all submaps when pure localization trajectory is finished. (#563)
Fixes #560 
based on #562
2017-11-28 10:21:55 +01:00
Juraj Oršulić bebe021b04 Serialize fixed frame pose data. (#689)
Similar to #666 and #548.
2017-11-28 09:44:35 +01:00
gaschler 1c7183d5c4 VoxelFilter for TimedPointCloud, Filter method. (#710)
This makes the VoxelFilter ready for TimedPointCloud and
per-point unwarping.
2017-11-27 15:12:07 +01:00
gaschler c292d76f86 Test ImuTracker (#711)
Adds unit tests for ImuTracker to cover filtering of the gravity
vector and tracking angular velocity.
2017-11-27 14:46:32 +01:00
Wolfgang Hess 7e82ac3bbf Make IMU cost functions internal. (#708)
[RFC=0003](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2017-11-24 15:29:48 +01:00
Wolfgang Hess 79b83b92b2 Make the MotionFilter internal. (#707)
Also moves it from mapping_3d to mapping since it is used
in both 2D and 3D SLAM.

[RFC=0003](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2017-11-24 14:01:07 +01:00
gaschler 0084f14c1c CeresScanMatcher target_translation (#702)
For its translation cost function, CeresScanMatcher now takes
a target translation as an argument instead of a pose, which 
was confusing.
2017-11-24 12:26:14 +01:00
Wolfgang Hess 0819e52a9c Make the LocalTrajectoryBuilders internal. (#704)
[RFC=0003](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2017-11-24 10:39:12 +01:00
Wolfgang Hess 8e6101de5c Make the OccupiedSpaceCostFunction internal. (#703)
[RFC=0003](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2017-11-23 18:04:36 +01:00
Wolfgang Hess 70a0f41364 Remove unused code. (#699) 2017-11-23 16:39:55 +01:00
gaschler 9bfc52d878 Rename arguments of CostFunctors to target_ (#700)
Rename constant targets of cost functors to target_*.
Pass only translation to Translation cost functors.
2017-11-23 16:04:49 +01:00
Wolfgang Hess ec034b13bc Do not install global_trajectory_builder.h. (#698)
This moves the global_trajectory_builder.h header under
cartographer/internal and changes the CMakeLists.txt to
not install internal headers.

[RFC=0003](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2017-11-23 14:47:29 +01:00
Juraj Oršulić 8f9f1cf44e Fix debug build (#697)
Similar to #418.
2017-11-23 14:20:01 +01:00
gaschler 147c8166b6 ImuTracker uses conjugate. (#693)
Normalized quaternions can be inverted with conjugate, which is faster.
The motivation for optimizing ImuTracker::Advance is that
per-point unwarping will call this for every point.
2017-11-23 13:50:44 +01:00
gaschler a8bd98680e ExtrapolatePose uses fewer transforms. (#694)
ExtrapolatePose avoids conversion to Rigid3d and computes translation
and rotation directly, which is faster.
Per-point unwarping will call this function for every point, so we
optimize it.
2017-11-23 12:27:26 +01:00
Juraj Oršulić 31f28b5097 Remove PoseEstimate. (#670)
Replaces #620.

Depends on switching `cartographer_ros` to use the new callback API for handling the last scan and pose estimate (googlecartographer/cartographer_ros#594).
2017-11-17 16:47:06 +01:00
Wolfgang Hess aba4575d93 Rename 'submap_transforms' to follow terminology. (#688)
https://google-cartographer.readthedocs.io/en/latest/terminology.html

Related to #602.
2017-11-17 13:13:45 +01:00
Christoph Schütte b91ff8fe44 Extrapolate poses for ground truth relations. (#687) 2017-11-17 12:27:31 +01:00
Wolfgang Hess 055728af93 Rename options for consistency. (#686)
"scan" is better named "node" if it refers to a node in global SLAM.

"penalty factor" is renamed "weight" for consistency with other similar options.

"scans_per_accumulation" is renamed "num_accumulated_range_data" to match the code and since the accumulated data is not called "scan".
2017-11-17 10:52:22 +01:00
Holger Rapp 5ee830e8cc Cleanup and new features in Image code. (#685)
- Removes stride_, since we know for a fact that it is always width * 4.
- Adds a constructor from a cairo surface.
- Adds a function that rotates the image by 90 degrees.

This is in preparation of adding a tool that can generate an image from a .pbstream.
2017-11-16 17:05:18 +01:00
Holger Rapp 0b4e7a9443 Refactor image related code. (#684)
- Take immutable parameter as const ref instead of pointer.
- make kCairoFormat a global constant, since it is defined in many places in cartographer and cartographer_ros, but we rely on it actually always being the same value.
2017-11-16 15:07:05 +01:00
gaschler b9015f33a7 Filter early in AddRangeData. (#681)
Filter earlier in 3D.
Combine two transforms to one in 2D.
2017-11-16 13:35:44 +01:00
Wolfgang Hess 16d62f45f0 Rename sparse_pose_graph options. (#682)
The default pose graph configuration is now included as "pose_graph.lua"
and available as POSE_GRAPH.

[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-16 11:48:25 +01:00
jie a08a370ef3 Check if filtered point clouds are empty. (#664)
The point cloud will be filtered by MaxRangeFilter before doing scan matching. For some special cases, the filtered point cloud maybe empty, it will cause crash:
real_time_correlative_scan_matcher.cc:159 Check failed: candidate.score > 0.f (nan vs. 0) 
This PR fixed this bug, check the point cloud size before scan matching, return false for empty point cloud.
2017-11-16 09:56:01 +01:00
Wolfgang Hess bdca2095c0 Rename proto::SparsePoseGraph. (#680)
[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-15 14:58:49 +01:00
Wolfgang Hess c25379cd20 Rename mapping_{2,3}d::SparsePoseGraph. (#678)
[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-15 13:50:18 +01:00
Wolfgang Hess 8c114d6eaf Rename mapping::SparsePoseGraph. (#677)
[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-15 12:06:19 +01:00
Wolfgang Hess 36b9cf7f9a Move the mapping_3d/sparse_pose_graph directory. (#676)
[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-15 11:30:35 +01:00
Wolfgang Hess 26db9d6210 Move the mapping_2d/sparse_pose_graph directory. (#675)
[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-15 10:52:06 +01:00
catskul f6192e4735 replace implicit use of cartographer::string with explicit use of std::string (#673)
Fixes #622.
2017-11-15 10:17:59 +01:00
Wolfgang Hess 291c0f581b Move the mapping/sparse_pose_graph directory. (#669)
[RFC=0001](https://github.com/googlecartographer/rfcs/blob/master/text/0001-renaming-sparse-pose-graph.md)
2017-11-15 09:39:45 +01:00
gaschler 7904808d40 Reduce transforms in LocalTrajectoryBuilder. (#668)
This speeds up AddRangeData because we avoid one copy and loop over all points.
2017-11-15 09:15:02 +01:00
Juraj Oršulić 818e5e1a44 Add local SLAM result callback. (#574)
Depends on ~~#619~~ (merged) and ~~#617~~ (merged).
Related to #508.

Also, if cartographer_ros is going to use this, and we wish to serialize the saved range data, that will have to be handled in cartographer_ros, right?
2017-11-14 17:19:14 +01:00
Wolfgang Hess a4c0e4754e Rename scan to node. (#667)
Changes the naming from "scan" to "node" in the pose graph.
AddNode() adds a new node to the graph which might contain
data from multiple range sensors and not necessarily one scan.

Configuration and documentation changes might follow in a
separate PR.

Related to #280.
2017-11-14 16:53:31 +01:00
Juraj Oršulić 4b342eddd0 Miscellaneous: rename odometer->odometry (#665)
Since we're adding `sensor::OdometryData`, I think that the function should be called `AddOdometryData`.
2017-11-14 16:18:07 +01:00
Juraj Oršulić 5496cbdc0c Serialize odometry data (#666)
Replaces #550.
2017-11-14 15:18:39 +01:00
Juraj Oršulić 60c72cb445 Deserialize trajectory connectivity (#552) 2017-11-14 13:26:53 +01:00
Wolfgang Hess 3ec583a327 Change fixed_frame_pose_data_ to MapByTime. (#662) 2017-11-13 17:41:04 +01:00
gaschler fd5003b69b Omit odometry penalty within frozen trajectory. (#661)
In the case of pure localization, this reduces the size of the optimization problem by a large factor.
2017-11-13 14:19:15 +01:00
Wolfgang Hess 4a8607810e Change odometry_data_ to MapByTime. (#655) 2017-11-13 13:21:53 +01:00
damienrg d183ab737a Fix mismatched tag warning for MapByIndex (#658)
- [ X] Keep your PR rebased to master.
- [ X] Keep your PR under 200 lines of code and address a single concern.
- [ X] Add unit test(s) and documentation (these do not count toward your 200 lines).
- [ X] Adhere to the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).
- [ X] Run `clang-format -style=Google` on your code (this alone is not enough to ensure you've followed the style guide).
- [ X] Run `ninja test` or `catkin_make_isolated --install --use-ninja --pkg cartographer --make-args test` as appropriate.
2017-11-13 10:18:58 +01:00
damienrg a9da74496a Fix unused lambda capture warning (#659)
- [ X] Keep your PR rebased to master.
- [ X] Keep your PR under 200 lines of code and address a single concern.
- [ X] Add unit test(s) and documentation (these do not count toward your 200 lines).
- [ X] Adhere to the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).
- [ X] Run `clang-format -style=Google` on your code (this alone is not enough to ensure you've followed the style guide).
- [ X] Run `ninja test` or `catkin_make_isolated --install --use-ninja --pkg cartographer --make-args test` as appropriate.
2017-11-13 09:44:12 +01:00
Christoph Schütte 6e274766f2 Remove unnecessary [packed=true] annotation (#660)
[RFC=0000](https://github.com/googlecartographer/rfcs/blob/master/text/0000-proto3-transition.md)
2017-11-13 09:18:53 +01:00
Christoph Schütte 53471359f8 Convert all .proto files to proto3 syntax. (#653)
[RFC=0000](https://github.com/googlecartographer/rfcs/blob/master/text/0000-proto3-transition.md)
2017-11-13 08:26:35 +01:00
jie ed71914805 Add MutexLocker to ConnectedComponents::GetComponent and SparsePoseGr… (#565)
…aph::TrimmingHandle::MarkSubmapAsTrimmed

To make them compile successfully in google.
2017-11-10 17:21:20 +01:00
Juraj Oršulić eb4415d17d Introduce MatchingResult for LocalTrajectoryBuilder::AddRangeData. (#619)
In preparation for #574. Depends on ~~#618~~ (merged) and ~~#617~~ (merged).
2017-11-10 14:49:41 +01:00
Jihoon Lee 028391357d Add OccupancyGridState and SubmapState in cartographer/io (#638)
replaces #599 
related to googlecartographer/cartographer_ros#510
2017-11-09 17:19:29 +01:00
Wolfgang Hess 418819a9ef Use 'global_pose' terminology for submaps. (#645)
Use 'global_pose' terminology for submaps.

This follows #624.
2017-11-09 16:40:21 +01:00
gaschler 6eaf0f344d FastCorrelativeScanMatcher outputs unique_ptr. (#643) 2017-11-09 16:08:16 +01:00
Juraj Oršulić e21fc9f253 Serialize IMU data. (#548) 2017-11-09 15:32:54 +01:00
Jihoon Lee 3bdee588bd Add FinishTrajectory() in SparsePosegraph. (#562) 2017-11-09 14:29:26 +01:00
Wolfgang Hess 92f81aec8a
Make proto::ProbabilityGrid proto3 compatible. (#641)
Moves the optional 'known_cells_box' into a message field.
This way its existence can still be checked in proto3.
2017-11-09 11:47:33 +01:00
gaschler 386ee328d8
Fix 3D yaw rotation in GenerateDiscreteScans. (#640)
Correctly generates discrete scans rotating around yaw in the gravity-aligned global map frame.
Fixes #639.
PAIR=wohe
2017-11-08 17:37:36 +01:00
Christoph Schütte eb96c91473
Initial pose implementation. (#606) 2017-11-08 14:01:38 +01:00
catskul 55e4338468 Start cleaning up Google specific types by making them cartographer private.
move string and size specific int/uint types into cartographer namespace as minimal change necessary to keep global namespace clean (#637)
2017-11-08 09:07:46 +01:00
Wolfgang Hess 088681f9ec
Add 3D localization support. (#632)
This adds information about which nodes are contained in which
deserialized submaps. This is necessary for the rotational scan
matcher.

Also skips frozen trajectories when tying together nodes of a
trajectory with IMU data which is unavailable in this case.
2017-11-07 11:26:41 +01:00
Juraj Oršulić 8186316d77 Range loop over trajectories for MapByTime (#633) 2017-11-06 17:14:01 +01:00
Alexander Belyaev 0d2bc8b938 Adds a 'LandmarkData' struct and proto. (#628) 2017-11-06 15:35:21 +01:00
Wolfgang Hess 77fb50fd76
Introduce sensor::MapByTime<>. (#631)
This data structure is used for keeping IMU data. This
allows trimming IMU data in the middle which is needed for
life-long mapping.
2017-11-06 13:36:59 +01:00
Wolfgang Hess 049f30d824
Generalize IntegrateImu(). (#627)
This is in preparation of changing the data structure
for IMU data away from a deque. Needed for localization
and life-long mapping.
2017-11-06 11:00:33 +01:00
gaschler 8854aaae9e Extrapolator reuses result using additional IMU trackers. (#623)
This makes the extrapolator stricter that time arguments
must be monotonously increasing when calling the Extrapolate
methods.
2017-11-03 16:19:55 +01:00
Wolfgang Hess 978544eca4
Add submap and gravity-aligned frame terminology. (#624) 2017-11-03 13:44:23 +01:00
gaschler 5a3bb14083 PoseExtrapolator::GetLastExtrapolatedTime (#626)
This prepares the API for #623 and #616.
2017-11-03 11:56:31 +01:00
Juraj Oršulić 7964211fef Deserialize SPG constraints (#544) 2017-11-02 22:01:01 +01:00
Juraj Oršulić 3c5a7aa2d8 Refactoring of LocalTrajectoryBuilder::AddAccumulatedRangeData (#618)
- introduce InsertIntoSubmap for 2D
- clarify some variable names in 3D
- move rotational_scan_matcher_histogram calculation
  to InsertIntoSubmap for 3D
- refactor last version of range data before insertion into
  range_data_in_local (filtered_range_data_in_local for 3D)
2017-11-02 16:01:23 +01:00
Juraj Oršulić c57641f917 Make SPG::AddScan return the inserted node id. (#617) 2017-11-02 10:28:13 +01:00
Christoph Schütte e10650910e
Pull out time-based transformation interpolation. (#615) 2017-10-30 15:41:02 +01:00
Wolfgang Hess c011177bfd
Fix the origin of accumulated range data. (#613)
This changes the origin of accumulated range data from the
zero vector (which could be far off) to the origin of the
first range data in the accumulation.
2017-10-30 11:32:06 +01:00
Wolfgang Hess 82a4b2f171 Follow #591 terminology in 3D optimization. (#612) 2017-10-27 15:48:51 +02:00
Christoph Schütte dacc962399 Adds lower_bound() to MapById. (#610) 2017-10-27 14:50:14 +02:00
gaschler d4db1e79a6 Add TimedPointCloud and TimedRangeData. (#601)
Adds a type TimedPointCloud that holds 4-dimensional vectors where measurement time of individual points are stored in the fourth entry.
Uses TimedRangeData to pass TimedPointCloud of incoming measurements to LocalTrajectoryBuilder.

Fixes #573.
2017-10-24 11:47:35 +02:00
Holger Rapp 638aee7c2a Fix slow point deletion in RemovePoints. (#608)
This speeds up the asset writer significantly:

For the 3D sample bag:

~~~
/usr/bin/time roslaunch cartographer_ros assets_writer_backpack_3d.launch \
   bag_filenames:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag \
   pose_graph_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag.pbstream

master:
2100.96user 26.79system 35:43.60elapsed 99%CPU (0avgtext+0avgdata 3657028maxresident)k
17682632inputs+32080outputs (0major+20021051minor)pagefaults 0swaps

this CL:
1937.46user 11.77system 32:22.49elapsed 100%CPU (0avgtext+0avgdata 3659412maxresident)k
1352inputs+32088outputs (0major+7042032minor)pagefaults 0swaps
~~~

So ~10%. For pipelines that do less this can be even 30% or more.
2017-10-23 10:56:55 +02:00
Juraj Oršulić f179bd942c Support multiple trajectories in LoadMap. (#567) 2017-10-20 16:13:18 +02:00
Wolfgang Hess a96511464e Add map trajectory without a trajectory builder. (#605) 2017-10-19 16:59:04 +02:00
Christoph Schütte 7c03467a78 Change GetTrajectoryNodes() to MapById. (#603) 2017-10-19 14:50:58 +02:00
Holger Rapp 49ead6055c Towards a ROS map writing PointsProcessor. (#598)
- Refactor ProbabilityGridPointsProcessor for code reuse.
- Adds Image::width and height.
- Adds GetFilename for FileWriter.

Related to googlecartographer/cartographer_ros#475.
2017-10-19 12:30:19 +02:00
Holger Rapp 0c9f2c4f65 Remove unused concept of CompressedRangeData. (#604) 2017-10-19 11:19:56 +02:00
Wolfgang Hess e479382ecc Change GetAllSubmapData() to MapById. (#597) 2017-10-17 16:03:16 +02:00
Christoph Schütte 3d4650d675 Remove trimmed() from TrajectoryNode (#596) 2017-10-17 15:36:07 +02:00
Wolfgang Hess e5f9815f67 Change submap_data_ in pose graph to MapById. (#593)
* Change submap_data_ in pose graph to MapById.
2017-10-17 13:13:37 +02:00
Christoph Schütte fdda1dd091 Switch trajectory_nodes in SPG2D to MapById. (#592) 2017-10-17 11:48:23 +02:00
Wolfgang Hess bcd1be92b1 Adds a bit of terminology documentation. (#591)
Changes code to match the new documentation.
2017-10-17 10:07:54 +02:00
Wolfgang Hess 76ed37768f Validate odometry and fixed frame poses. (#588) 2017-10-16 15:59:56 +02:00
Christoph Schütte 6b447c4577 Add FindChecked to MapById. (#586)
* Add FindChecked to MapById.
2017-10-16 14:15:53 +02:00
Wolfgang Hess d91afa4496 Introduces mapping::MapById for nodes in 3D. (#587) 2017-10-16 13:37:28 +02:00
Christoph Schütte 5ed19c15ab Introduce proxy object for iteration over trajectory ids. (#585)
* Introduce proxy object for iteration over trajecotry ids.
2017-10-16 12:52:53 +02:00
Wolfgang Hess 7e0cfc3f22 Introduces mapping::MapById for submaps in 3D. (#584) 2017-10-16 10:48:43 +02:00
Christoph Schütte 006db45910 Introduce proxy object for range based loops over nodes of trajectory. (#583) 2017-10-13 16:44:31 +02:00
Wolfgang Hess 464d770d48 Introduces mapping::MapById for nodes in 2D. (#581)
PAIR=cschuet
2017-10-13 14:41:54 +02:00
Wolfgang Hess 4ab4817104 Add MapById<>::ConstIterator::operator->(). (#580) 2017-10-12 16:15:12 +02:00
Wolfgang Hess cb41777b9e Introduces mapping::MapById in the 2D pose graph for submaps. (#578)
PAIR=cschuet
2017-10-12 11:58:59 +02:00
Wolfgang Hess ea55e837d2 Introduces mapping::MapById in the 2D optimization problem. (#577)
PAIR=cschuet
2017-10-09 17:33:12 +02:00
Wolfgang Hess 2434e7e40e Fix crashing bug in localization. (#575)
Now that we deserialize trajectory nodes, we need to make sure
that the global matcher sampler is added for the map trajectory.
2017-10-06 17:01:04 +02:00
Juraj Oršulić 2f332eca28 Deserialize trajectory nodes. (#569) 2017-10-06 16:16:25 +02:00
Holger Rapp 6708930bbf Adds 'offset_seconds' to PointCloudWithIntensities. (#571)
This is preparing using per-point-unwarping in the `assets_writer` in `cartographer_ros`.

Related to googlecartographer/cartographer_ros#521.

PAIR=@wohe
2017-10-06 13:21:02 +02:00
Christoph Schütte 2862e12506 Add FrameIdFilteringPointsProcessor (#566)
* Add FrameIdFilteringPointsProcessor

Implements a PointProcessor that filters PointBatches (either by
whitelisting or blacklisting) the frame_id.
2017-10-05 17:33:51 +02:00
Wolfgang Hess 0053b30cc8 Add support for odometry to the 3D pose graph optimization. (#570)
Not used yet. Intended to experiment with the 3D pose graph optimization
in 2D SLAM.
2017-10-05 16:56:31 +02:00
Juraj Oršulić bd8a2e6a92 Store node initial pose in constant data. (#568) 2017-10-05 16:10:12 +02:00
Wolfgang Hess cae9c02e05 Follow #547 for 3D. (#564)
And changes to 3D following 2D regarding trimmed data.
2017-10-04 16:47:26 +02:00
Wolfgang Hess 51f5a18462 Fix formatting. (#561) 2017-10-04 15:58:48 +02:00
Juraj Oršulić aaaf5ac546 Rename serialization NodeData proto for consistency. (#540)
node_data should be a member of a node, not the other way around.
2017-10-04 14:13:18 +02:00
Juraj Oršulić b1b0750e5b Check ratios in fixed rate sampler. (#502) 2017-10-04 13:15:35 +02:00
Christoph Schütte 9c81a01608 Add trajectory trimming support to 3d (#559)
* Adds DeleteScanMatcher() to 3D constraint builder
* Add possibility to remove submaps and scans from the 3D optimization
  problem.
* Implements TrimmingHandle in SPA.
2017-10-02 17:01:14 +02:00
Jihoon Lee 3c521eb573 Remove hooray. And prints remaining work items in queue (#547) 2017-09-29 01:04:28 -07:00
jie 3744988fd2 Fix trajectory count check bug for asset writer floor separation. (#542) 2017-09-28 10:43:47 +02:00
Wolfgang Hess 7d0e72dac2 Fix some nits. (#536)
Most importantly makes mapping_2d::SparsePoseGraph::GetLatestScanTime()
private.
2017-09-28 09:21:07 +02:00
Wolfgang Hess 0cbc420b02 Fix odometry in the 2D pose graph optimization. (#533)
Before, the relative change in pose due to odometry in the
2D pose graph optimization problem was incorrectly done in
the tracking frame. Instead, the gravity aligned frame in
which the 2D poses are stored must be used.

Fixes #515.

PAIR=cschuet
2017-09-15 14:11:37 +02:00
Jihoon Lee 259e22a5fc Use oldest and newest instead of last two odometry data. (#530) 2017-09-14 16:10:03 +02:00
Christoph Schütte 5896ead32e Introduce timeout for global constraints. (#517)
This PR introduces a new option that specifies the number of seconds
after which global matcher searches are performed if no recent global
constraints have been found between the submap's and the node's
trajectory.
2017-09-14 12:11:54 +02:00
gaschler 31b5a6f1a9 Allow multiple SubmapTextures. (#519)
This changes submap_visualization.proto that multiple textures can be provided.
As of now, the first texture is generated from the high resolution
grid, which is the same as before.
The second texture is generated from the low resolution grid.
2017-09-13 15:47:02 +02:00
Wolfgang Hess 5ade042520 Fix crash in localization. (#526)
Updating the connectivity needs the data of nodes for which
constraints were added, so we postpone trimming to after the
connectivity update.

Also makes sure the mutex is held as necessary.
2017-09-13 14:08:32 +02:00
Wolfgang Hess 57d53b6d53 Remove unused code. (#522)
Removes FindConnectedComponent() from a proto message.
2017-09-12 18:07:18 +02:00
Christoph Schütte b383f18365 Fix crash in localization. (#523)
This PR fixes a crash when cartographer is run in localization mode due
to the map trajectory not having been properly added to the
ConnectedComponents.
2017-09-12 17:04:13 +02:00
Wolfgang Hess 4437d89dd5 Fix crashing bug during pure localization. (#521)
When loading a serialized state, no nodes are added for each
submap. This leads to crashes when loop closures are found.
2017-09-12 15:36:22 +02:00
Juraj Oršulić 23bf0fc0d4 Fix unsigned comparison warning in 2D SPG test. (#518) 2017-09-12 11:25:51 +02:00
Christoph Schütte 24c2b499dd Introduce TrajectoryConnectivityState. (#513)
* Introduce TrajectoryConnectivityState.

This class will be used to track the connectivity state (including the
last connection time) between pairs of trajectories.
2017-09-11 14:43:55 +02:00
Wolfgang Hess 84da6d75bc Also use vector<map<>> for node data in 3D. (#516)
This reduces the difference between 2D and 3D and moves
3D towards localization and trimming.
2017-09-11 13:46:49 +02:00
Wolfgang Hess 35aa38f73f Also use vector<map<>> submaps in 3D. (#512)
This reduces the difference between 2D and 3D and moves
3D towards localization and trimming.
2017-09-08 15:54:28 +02:00
Christoph Schütte 1a367f0549 Rename TrajectoryConnectivity ConnectedComponents. (#510)
* Rename TrajectoryConnectivity ConnectedComponents.
2017-09-07 17:11:06 +02:00
Christoph Schütte c65f7a97b6 Remove connected_components_ from SPG. (#509)
* Remove connected_components_ from SPG.

This PR removes connected_components_ from the SparsePoseGraph. Since
the connectivity structure is no longer updated by the
ConstraintBuilders it is no longer necessary for SPG to keep a copy of
the connected components for data consistency.
2017-09-07 16:35:49 +02:00
Christoph Schütte fa306d03ec Remove reverse_connected_components. (#507)
Remove reverse_connected_components from SparsePoseGraphs and update
TrajectoryConnectivity to return "connected" for the reflexive case even
if trajectories are unknown.
2017-09-07 15:58:30 +02:00
Wolfgang Hess 476d156f66 Serialize trajectory node data. (#504)
Related to #253.
2017-09-07 15:29:12 +02:00
Christoph Schütte a5dafcfde3 Update trajectory connection in WhenDone callback. (#506)
This modifies the ConstraintBuilder interface so that Maybe*Constraint
is not responsible anymore for updating the TrajectoryConnectivity
member of SparsePoseGraph and moves this responsibility into the
WhenDone callback.
2017-09-07 14:51:19 +02:00
Wolfgang Hess 333516d955 Rename the scan queue. (#505)
This queue does not only contain scans, but also other sensor data,
e.g. from an IMU.
2017-09-07 14:04:00 +02:00
Wolfgang Hess 22f41d8e37 Store rotational histogram as part of the node data. (#503)
The compressed point cloud is no longer stored as part of the
node data to reduce memory consumption.
2017-09-07 11:01:03 +02:00
Christoph Schütte c2d9424342 Add Unittest for transform::RigidX. (#497) 2017-09-06 12:06:33 +02:00
Wolfgang Hess 4829ffee46 Allow rotating histograms in the rotational scan matcher. (#501)
This allows reusing histograms to match for different yaws.
Adds a unit test to test that rotated histograms match as expected.
2017-09-06 10:59:16 +02:00
Jihoon Lee 18d8ea75fa Use vector<map<>> for node_data. (#472) 2017-09-04 18:01:44 +02:00
Wolfgang Hess c8de50bd2b Add 'gravity_alignment' rotation to each node. (#500)
In 2D this replaces the 'tracking_to_tracking_2d' transform.
Also changes the 2D SparsePoseGraph to get the full 3D pose.
2017-09-04 16:24:26 +02:00
Wolfgang Hess 3948943b64 Use EstimateGravityOrientation() in 2D SLAM. (#499) 2017-09-04 11:14:51 +02:00
Wolfgang Hess e3b6f0afc5 Expose complete poses in 2D SLAM. (#498)
This changes the trajectory nodes to contain the complete 'pose'
including 'tracking_to_tracking_2d' applied already. Similar for
the 'zbar_ij' as it is returned by 'constraints()'. This allows
2D and 3D to be handled in the same way.
2017-09-01 15:40:21 +02:00
Wolfgang Hess 5673334f0e Tiny improvement of the gravity estimation. (#494) 2017-09-01 10:22:13 +02:00
Wolfgang Hess d3c49c8585 Pass odometry data to the 3D optimization problem. (#495)
Not yet used.
2017-09-01 09:58:24 +02:00
Wolfgang Hess 72bb24e362 Pass initial pose of nodes to the 3D optimization problem. (#496)
Also drops 'point_cloud' from the name since the pose is also
relevant to other sensor data.
2017-09-01 09:34:48 +02:00
Christoph Schütte 982f2bd2e0 Use TrajectoryNode::Data in FastCorrelativeMatcher. (#493)
* Use TrajectoryNode::Data in FastCorrelativeMatcher.
2017-08-31 15:10:48 +02:00
jie e2c67a7bde Fix Lint and ClangTidy warnings. (#485) 2017-08-31 13:39:47 +02:00
Wolfgang Hess 3215035c1c Add thread annotation to LogResidualHistograms(). (#492) 2017-08-31 12:26:31 +02:00
Mac Mason b54ca0cca6 Fix Rigid2 and Rigid3 to default to an identity transform. (#491) 2017-08-31 11:32:04 +02:00
Christoph Schütte 06e9112bc8 Unify GlobalTrajectoryBuilder across 2D and 3D (#489)
This PR unifies GlobalTrajectoryBuilder across 2D and 3D by templating
it with the LocalTrajectoryBuilder and the SparsePoseGraph. It thus
includes small changes to interfaces in LocalTrajectoryBuilder and
SparsePoseGraph.
2017-08-30 16:34:26 +02:00
Wolfgang Hess 3c22c8253a Refactoring: Do not pass 'constant_data' in pieces. (#488)
Also removes the no longer used range data from trajectory nodes
in 2D.
2017-08-30 14:22:12 +02:00
Wolfgang Hess 094b5a4d93 Template dispatching of sensor data. (#484)
This reduces the amount of code that needs to be written when a
new type of sensor data is introduced by a tiny bit.

Rangefinder data is not yet following this pattern.
2017-08-28 15:43:26 +02:00
Wolfgang Hess a7fe8bd2ab Add filtered point cloud to TrajectoryNode::Data for 2D. (#483) 2017-08-28 11:17:53 +02:00
jie 42d8a8f005 Add filtered point clouds to TrajectoryNode::Data for 3D. (#482) 2017-08-25 16:56:50 +02:00
jie 0837d4b228 Add fixed frame pose constraints to 3D problem. (#480) 2017-08-25 15:26:19 +02:00
jie 449799719f Extract rotation parameterization to a separate file. (#479) 2017-08-25 12:06:22 +02:00
Christoph Schütte 96b71e227f Add histograms for pose residuals (#478)
* WIP Add histograms for pose residuals

* Address reviewers comments

* Address more comments.
2017-08-25 11:39:56 +02:00
jie 2fd2e86351 Add fixed frame pose weight into optimization problem options. (#477) 2017-08-24 15:40:48 +02:00
jie 14977f73f1 Add fixed frame pose data to the 3D optimization problem. (#476) 2017-08-24 15:02:23 +02:00
Wolfgang Hess a239b71a6e Dynamic dispatch of sensor::Data. (#475)
This ensures at compile time that all types of data are handled,
and only keeps the data needed for each individual type.
2017-08-24 14:17:51 +02:00
jie 0671e8835e Add interface to process fixed frame pose, e.g. GPS. (#471) 2017-08-24 12:49:03 +02:00
Wolfgang Hess e78e2cb5ad Extract PoseEstimate into its own file. (#474)
This is to remove the dependency of GlobalTrajectoryBuilderInterface
on the TrajectoryBuilder.
2017-08-24 12:04:39 +02:00
Wolfgang Hess f0e1dab031 Add a histogram of low resolution scores for 3D. (#473) 2017-08-24 09:28:12 +02:00
Wolfgang Hess 4d11a226ff Expose low resolution matching scores. (#470)
This is needed in preparation of adding a low resolution score histogram.
2017-08-23 17:48:49 +02:00
Jihoon Lee 2dd2d6f448 Use vector<map<>> instead of vector<deque> for submap_data. (#422) 2017-08-23 12:16:42 +02:00
zjwoody 2e53586818 Also check low resolution match for 3D loop closure. (#468)
Related to #369.
2017-08-22 17:29:20 +02:00
Wolfgang Hess 297e9cc02d Remove unused argument. (#466) 2017-08-22 12:22:41 +02:00
zjwoody ac693f3e04 Use separate voxel filter options for 3D loop closure. (#465) 2017-08-21 18:01:23 +02:00
Damon Kohler edfd6ac8d7 Also log the IMU correction as a quaternion. (#463) 2017-08-21 17:26:48 +02:00
Moritz Münst 0ef372d584 Use odometry in 2D pose graph optimization. (#456) 2017-08-21 15:12:00 +02:00
Wolfgang Hess bcde3b45b0 Tiny cleanup of TransformInterpolationBuffer. (#462) 2017-08-18 16:19:50 +02:00
Wolfgang Hess c29fec3dd0 Fix colors in the X-ray points processor. (#460)
mean_..._in_column was broken in #423.
2017-08-17 18:07:33 +02:00
Wolfgang Hess 9498cc90ca Estimate angular velocities from odometry. (#458)
If no IMU is available we will now use odometry to estimate
angular velocities if available instead of the last poses.

Fixes #453.
2017-08-16 16:55:39 +02:00
Wolfgang Hess 0c6d6979c4 Fix header. (#457)
RegisterBuiltInPointsProcessors() declaration was broken in #455.
2017-08-16 16:22:42 +02:00
zjwoody ba6f782949 Fix ClangTidy warnings. (#455) 2017-08-16 15:21:04 +02:00
Wolfgang Hess 11dbdf91b9 Remove unused code and option for odometry states. (#451) 2017-08-11 17:38:48 +02:00
Wolfgang Hess e79a918989 Use PoseExtrapolator in the 3D trajectory builder. (#450)
This replaces the Predict() logic in the 3D trajectory builder.
2017-08-11 17:13:28 +02:00
Wolfgang Hess 73b0e5e20a Use PoseExtrapolator in the 2D trajectory builder. (#448)
This replaces the Predict() logic in the 2D trajectory builder.
2017-08-11 12:38:34 +02:00
Wolfgang Hess 6ebfa50291 Use odometry to extrapolate linear motion. (#443) 2017-08-08 16:30:53 +02:00
Wolfgang Hess 8732e43f16 Add sensor::OdometryData. (#442) 2017-08-08 14:52:47 +02:00
Wolfgang Hess f60b2cbb16 Pass IMU data as sensor::ImuData. (#441) 2017-08-08 14:27:08 +02:00
Wolfgang Hess eb53b70fec Towards localization in 3D. (#438)
Adds loading maps to 3D, deserializes submaps and supports trajectories
without any node. Still no trimming support.
2017-08-02 14:17:50 +02:00
Wolfgang Hess 5369c3ced1 Use the ImuTracker in the PoseExtrapolator. (#436) 2017-08-01 10:44:32 +02:00
Wolfgang Hess b28bc3bc9e Extract velocity estimation from poses into a function. (#435) 2017-07-31 12:31:28 +02:00
Wolfgang Hess a6d94c07cf Use IMU data when extrapolating poses if available. (#434) 2017-07-28 17:12:12 +02:00
Andrew Hundt d22402bdfa color.cc constexpr std::sqrt is not ISO C++ (#432) 2017-07-28 12:11:57 +02:00
damienrg 46c7ce886d Change Color to Uint8Color and FloatColor (#423)
As almost all computations for color are done in float, use FloatColor
format by default and convert to Uint8Color only when needed.
2017-07-27 11:03:55 +02:00
Wolfgang Hess 6035f63860 Add a extrapolator for poses. (#430)
This will be used in Cartographer ROS to extrapolate poses for tf.

PAIR=damonkohler
2017-07-26 15:21:05 +02:00
Jihoon Lee 30f7de1a32 fix num submaps in trimmer_test (#424) 2017-07-26 11:14:22 +02:00
Juraj Oršulić 347dc8cec5 Fix debug build (#418)
Add a fake return value after LOG(FATAL) in
HybridGridPointsProcessor::Flush(). This keeps gcc versions lower
than 7 happy when building without optimisation (i.e. debug build).
Fixes #412.
2017-07-25 17:39:49 +02:00
lanyaye 56dbad15e3 Fix proto_stream to support 32-bit platforms. (#427)
In proto_stream.cc, size_t is only correct on 64-bit platforms. Changing it to uint64 adds support for 32-bit platforms. This fixes #426.
2017-07-25 15:59:57 +02:00
Holger Rapp ea7c39b6f0 Draw Trajectories onto X-Rays and ProbabilityGrids. (#421)
This behavior can be turned off with the 'draw_trajectories' setting in Lua.

Fixes #174.
2017-07-25 13:36:50 +02:00
Holger Rapp 8dfd650068 Pull some functionality from cartographer_ros into cartographer. (#420)
- Moved color.h.
- Moved Cairo types.
- Simplifications in XRayPointsProcessor.
2017-07-24 13:22:06 +02:00
Wolfgang Hess 4d087cd159 Towards localization in 3D. (#417)
Adds trimmer handling (but no trimming yet) and frozen trajectories
to 3D. Also freezes nodes, not just submaps.
2017-07-24 11:42:23 +02:00
damienrg 21cc270645 Fix ProbabilityPointsProcessor mirroring output (#419)
Fixes #414.
2017-07-24 10:41:45 +02:00
Wolfgang Hess 1bce14b7b5 Adds accumulation of range data to 2D. (#408)
This mostly follows the implementation as done for 3D.

Towards googlecartographer/cartographer_ros#212.
2017-07-18 12:10:40 +02:00
Mac Mason 3ef680e791 Remove extraneous include (#407) 2017-07-18 09:01:12 +02:00
Wolfgang Hess 10a19d0a3f Add rotational score histograms in 3D. (#403) 2017-07-11 11:59:42 +02:00
Wolfgang Hess 167047173c Tiny improvement of HybridGrid::ToProto(). (#401)
Makes it a member function and adds a check for left over
update markers.
2017-07-11 09:26:07 +02:00
Wolfgang Hess 0da3fad9b0 Improve handling of grid updates. (#400)
Changes the grids to only contain update markers during updates.
Serialized grids will never contain them.
2017-07-10 16:14:50 +02:00
Wolfgang Hess b0b4f30007 Cleanup of cell index conversion in 2D. (#399)
This makes 2D more similar to 3D. GetProbability() only takes
cell indices which are computed using GetCellIndex().
2017-07-10 15:01:13 +02:00
damienrg 39cb8401a5 Implements a ProbabilityGridPointsProcessor (#383) 2017-07-10 11:02:14 +02:00
Wolfgang Hess 78bd37ec26 Unify 2D/3D range data in trajectory nodes. (#396)
Since we only convert compressed range data to protos, we remove the
unused code to serialize (non-compressed) range data which should also
not be used in the future.
2017-07-07 17:07:04 +02:00
Wolfgang Hess 5378ee2adc Serialize range data. (#395)
We compress 2D range data before serialization to reduce
output size.

Related to #253.
2017-07-07 15:39:55 +02:00
Wolfgang Hess 94a848cd46 Rename ScanId to NodeId in the serialization. (#394)
This is consistent with the naming in the C++ structs.
2017-07-07 13:58:23 +02:00
Brandon D. Northcutt f7af7ae238 Add serialization of compressed range data. (#334) 2017-07-07 12:26:36 +02:00
Jihoon Lee 75d5b7a453 Check imu_data array size before access (#392) 2017-07-06 14:32:45 +02:00
Moritz Münst 3f4d795c3e Add pure localization parameter to trajectory builder options. (#389) 2017-07-05 16:55:06 +02:00
Wolfgang Hess 9042450aaf Fix initial pose of loaded submaps. (#391)
PAIR=SirVer
2017-07-05 16:24:02 +02:00
Wolfgang Hess 3819dd3806 Use an Eigen::AlignedBox to track known cells. (#388)
PAIR=SirVer
2017-07-05 15:05:46 +02:00
Holger Rapp 3346474963 Grow the ProbabilityGrid as needed instead of preconfiguring its size. (#387)
This removes the 'half_length' option.

PAIR=wohe
2017-07-05 14:17:04 +02:00
Holger Rapp a313448bf0 Change CastRays to directly take the ProbabilityGrid. (#386)
PAIR=wohe
2017-07-05 13:39:44 +02:00
Holger Rapp 611f244d7a Remove HybridGrid slicing into a ProbabilityGrid. (#385)
This code is currently unused. The feature of slicing a HybridGrid into a Probability grid could be useful to for example collect a map in 3D, then slice the 3D data to create a 2D map. There are simpler ways to implement this, especially in the context of the assets_writer_main.

PAIR=wohe
2017-07-05 13:17:20 +02:00
Jihoon Lee 1e6723e214 Move ImuData to sensor, add ImuData proto. (#381) 2017-07-05 12:28:40 +02:00
Holger Rapp 9b48ba5ff4 Remove unused code. (#384) 2017-07-05 12:16:29 +02:00
Wolfgang Hess 7434e96369 First rough implementation of loading a map. (#382)
This implements loading of serialized maps in 2D:
We insert all submaps at the serialized optimized pose into
the pose graph and remove their poses from the optimization.

Related to #197 and #315.
2017-07-04 17:20:13 +02:00
Wolfgang Hess 31f77a01d2 Serialize submaps. (#380) 2017-07-04 12:11:54 +02:00
Brandon D. Northcutt 5396156968 Submap serialization support. (#376) 2017-07-03 17:59:55 +02:00
Wolfgang Hess 03b9285034 Add support for serializing to a proto stream. (#379)
Also changes the ground truth tools to read from such a file.

This resolves #335. Related to #253.
2017-07-03 15:23:15 +02:00
Wolfgang Hess 54bd81a78b Remove UKF related code and configuration. (#378) 2017-06-30 13:19:13 +02:00
Wolfgang Hess 17a22edebc Change local 3D SLAM to not use a UKF. (#375)
This follows the 2D local SLAM in implementing a simple
constant velocity model and allows integrating odometry and
rotation information from an IMU.
2017-06-30 11:49:22 +02:00
Damon Kohler f765e55ea9 Use multi-res scan matching for loop closures too. (#374)
Improves loop closure scan matcher refinement.
2017-06-30 09:30:09 +02:00
Wolfgang Hess 955e190166 Add IMU orientation correction to the pose graph optimization. (#361)
Orientation of the IMU, most importantly pitch, is crucial to correctly
track changes in altitude. Each trajectory gets optimization variables
to correct for small errors in the IMU orientation.

Also adds separate gravity constants for each trajectory. The idea is
that different trajectories might use different hardware and slightly
disagree about the strength of gravity.

PAIR=damonkohler
2017-06-28 18:12:24 +02:00
Wolfgang Hess ffc939706d Rename the KalmanLocalTrajectoryBuilder. (#372) 2017-06-28 15:32:43 +02:00
Wolfgang Hess e4e22e9f26 Remove the LocalTrajectoryBuilderInterface in 3D. (#371) 2017-06-28 14:57:37 +02:00
Holger Rapp 471bcb6207 Delete SubmapData from trimmed submaps in the OptimizationProblem. (#366)
Related to #283.
2017-06-28 12:51:09 +02:00
Wolfgang Hess f88fcec851 Remove the unused OptimizingLocalTrajectoryBuilder. (#368)
It has not been used for a long time and has to be replaced by
a better implementation.
2017-06-27 15:44:46 +02:00
Wolfgang Hess 010fefc204 Fixes the previous pose in local 3D SLAM. (#367)
This bug was introduced in #294.

PAIR=damonkohler
2017-06-27 11:53:57 +02:00
Holger Rapp d8eb94b4a9 Delete NodeData and ImuData from trimmed submaps in the OptimizationProblem (#364)
Related to #283.
PAIR=wohe
2017-06-26 16:38:08 +02:00
Moritz Münst 4c3059e088 Improve code comments. (#243) 2017-06-26 14:32:44 +02:00
Wolfgang Hess 2df8bcde61 Remove unused 'imu_gravity_variance' option. (#363) 2017-06-26 13:23:58 +02:00
Holger Rapp 9464b38320 Consistency fix: trajectory_index -> trajectory_id. (#360) 2017-06-26 10:02:51 +02:00
Holger Rapp ff37b0bb7d Remove output_debug_images. (#358)
This is now better done by RViz. This also gets rid of the dependency on webp.
2017-06-23 14:53:04 +02:00
Wolfgang Hess 9fbb65084b Exclude trimmed submaps from the pose graph serialization. (#354)
Related to #283.
2017-06-21 17:57:08 +02:00
Wolfgang Hess 432cd5dcd3 Delete data of trimmed submaps. (#353)
This is related to #283.

PAIR=SirVer
2017-06-21 16:36:54 +02:00
Holger Rapp 9646b31145 Move GetSubmapData from GlobalTrajectoryBuilder into SparsePoseGraph. (#352)
- Adds a function to query all SubmapData from the SparsePoseGraph.
- Changes MapBuilder::SubmapToProto to take a SubmapId.
- Remove num_submaps().
2017-06-21 14:21:23 +02:00
Holger Rapp 16636cd4e1 Remove friends declaration in Submap. (#350) 2017-06-21 12:49:44 +02:00
Wolfgang Hess 0fbdf6d0ec Add ground truth proto support for trajectory evaluation. (#349)
This adds support of GroundTruth protos in addition to
text files.

Fixes the ground truth generation code to skip outliers.

Improves the ground truth generation to use expected
relative poses instead of the solution.

Writes constraints including the roll and pitch from the
node for 2D SLAM, so that constraints correctly capture
the expected transform between the 3D poses of scan and
submap in 2D SLAM.

Related to #239.
Related to #310.
2017-06-21 11:33:30 +02:00
Holger Rapp 58bb70f53a Change Submaps to only track the two active Submaps. (#348) 2017-06-20 18:21:42 +02:00
Holger Rapp f242b5242a Use shared_ptr<> for Submap objects. (#347)
Also remove `finished_submap` and `matching_submaps`. These are now
implicit.

Related to #283.

PAIR=wohe
2017-06-19 17:23:48 +02:00
Holger Rapp c8f02264a4 Removes GetSubmapId from SparsePoseGraph. (#346)
PAIR=wohe
2017-06-19 15:46:47 +02:00
Holger Rapp 5c389cdf4a Remove mapping::Submaps. (#345)
PAIR=wohe
2017-06-19 15:24:06 +02:00
Holger Rapp b944b19159 Make use of Submap in 2D similar to 3D. (#343)
Use mapping_2d::Submap instead of mapping::Submap in 2D.
Use `finished()` instead of `finished_probability_grid()` in 2D.

PAIR=wohe
2017-06-19 14:43:10 +02:00
Wolfgang Hess 5fa6abe84b Adds a tool to generate ground truth data. (#340)
Fixes #310. Not yet tested.
2017-06-16 17:38:13 +02:00
Wolfgang Hess 12c3795134 Remove direct access to Submaps from the outside. (#339)
PAIR=SirVer
2017-06-16 10:47:11 +02:00
Wolfgang Hess c1e1d03636 Support extrapolating a single submap transform. (#338) 2017-06-14 15:10:36 +02:00
Wolfgang Hess 79eeb7d77a Improve code structure for extrapolation of poses. (#337)
This is in preparation of extrapolating single submap poses
as needed.
2017-06-14 12:49:17 +02:00
jordansmithgoogle 7ce73858ef Adds a HybridGridPoints processor (#323) 2017-06-14 11:34:59 +02:00
Holger Rapp cff0c73857 Converted Submap from struct to class. (#333) 2017-06-12 17:28:38 +02:00
Holger Rapp 2d75f4ef56 Move SubmapToProto from Submaps -> Submap. (#332)
PAIR=wohe
2017-06-12 16:27:51 +02:00
Holger Rapp 521666ce55 Trim node data. (#331)
Also, remove trimmed nodes from proto serialization.

PAIR=wohe
2017-06-12 15:20:49 +02:00
Holger Rapp f68da37c6e Drop trajectory_id from TrajectoryNode. (#330)
PAIR=wohe
2017-06-12 14:28:16 +02:00
Wolfgang Hess 1a376c07b2 Change submap state handling in 3D. (#327)
This follows the new code in 2D. Also adds a check that
new constraints are only attempted for finished submaps.
2017-06-09 17:40:22 +02:00
Wolfgang Hess f07f888dab Remove the deque for constant node data. (#326)
This is needed in preparation of deleting nodes.
Related to #283.
2017-06-09 16:53:49 +02:00
Holger Rapp b427259214 Mark trimmed Submaps and remove from scan matching. (#319)
Related to #283.

PAIR=wohe
2017-06-07 15:52:24 +02:00
Holger Rapp c1d4d08a1d Move AddProbabilityGridToResponse to the Submap object. (#318)
Working towards a thread-safe Submap object. Related to #283.

PAIR=wohe
2017-06-07 15:13:56 +02:00
Wolfgang Hess b3b9735a4b Remove trimmed constraints. (#317)
Still missing marking submaps and nodes as trimmed.

PAIR=SirVer
2017-06-07 14:23:58 +02:00
Wolfgang Hess a66147f131 Adds a PureLocalizationTrimmer. (#316)
Related to #315.
2017-06-07 12:39:04 +02:00
Wolfgang Hess c90b887bfb Adds API to add trimmers. (#314)
This is related to #283. First to be implemented for
pure localization and 2D SLAM.

PAIR=SirVer
2017-06-06 17:07:30 +02:00
Wolfgang Hess 56529e5968 Tiny cleanup of the MapBuilder. (#313)
GetTrajectoryConnectivity() was a convenience function.
Instead, sparse_pose_graph() should be used to get access to
GetConnectedTrajectories().
2017-06-06 15:20:10 +02:00
Wolfgang Hess ba4f8ca9ee Tiny cleanup. (#312) 2017-06-02 16:44:27 +02:00
Wolfgang Hess 565e9c3eff Simplify the handling of weights in the optimization problem. (#309)
This replaces the 3x3 (2D) or 6x6 (3D) matrix by the weights
for the translational and rotational component. The matrices
only contain these values now anyway, so this simplifies
the code and increases performance.

Also removes 2D from the UKF implementation which has not been
used for quite some time now.
2017-06-01 17:03:49 +02:00
Wolfgang Hess 92f154f561 Also use fixed covariances in 3D SLAM. (#308)
This follows #307.
2017-06-01 15:04:07 +02:00
Wolfgang Hess a2e52f81cf Remove 2D scan matcher covariances. (#307)
This replaces the scaled covariances derived from the Ceres
scan matcher by directly configurable weights. Using covariances
did not provide the expected benefit, and replacing the scaling
matrix by two values will allow a faster evaluation of the cost
function in the future.
2017-05-31 11:56:32 +02:00
Wolfgang Hess 4bb02c7240 Add XRayPointsProcessor::bounding_box(). (#306)
Changes XRayPointsProcessor to use one bounding box for all floors.
Makes the bounding box accessible via a public member function.
2017-05-24 14:46:17 +02:00
Wolfgang Hess 3d0d1e46b5 Remove unused code. (#304) 2017-05-23 14:17:20 +02:00
Wolfgang Hess 515db3b4a9 Minor fixes. (#303)
Extract mapping_2d::CreateLocalTrajectoryBuilderOptions() into its own file.
Loop initialization fix in the trajectory_connectivity_test.
Thread safety fixes in sparse_pose_graph.
2017-05-22 14:55:05 +02:00
Wolfgang Hess 2d416589a7 Adds a NestedVectorsById<> class template. (#300) 2017-05-19 16:58:21 +02:00
Wolfgang Hess 0bba56428f Remove flat indices. (#299)
This cleans up scan_index_to_node_id_, num_nodes_in_trajectory_,
scan_index. Related to #256.
2017-05-19 14:01:59 +02:00
Wolfgang Hess 56fc2a9a92 Fix 3D SLAM loop closure issues. (#296)
3D submaps are now oriented approximately gravity aligned.
This is so that accumulating error in the local SLAM frame is
no longer a problem for finding loop closures. It also ensures
that the z search window size is approximately in the gravity
direction.

We now also pass an estimate of gravity orientation when doing
multi-trajectory matches. Otherwise trajectories starting with
different orientation relative to gravity could not be connected.

The gravity alignment is currently derived from the ImuTracker.
It might be possible to further improve on this by using the
latest gravity direction from the optimized poses.
2017-05-18 16:55:11 +02:00
Wolfgang Hess 9033fad1ab Always use the origin as the origin for grids. (#294)
Also removes convenience functions from mapping_3d::Submap.

PAIR=SirVer
2017-05-18 12:00:45 +02:00
Wolfgang Hess 33ce5dee37 Improve debug output and tiny bug fix. (#293)
The full submap search window in 3D SLAM was
not calculated correctly.
2017-05-17 15:21:39 +02:00
Wolfgang Hess 6c9e24d7c5 Keep 'trajectory_nodes_' per trajectory. (#291)
Fixes #256.

PAIR=SirVer
2017-05-17 11:15:34 +02:00
Holger Rapp 5aa968748e Sparse pose graph no longer uses Submaps* for trajectory identification. (#290)
Related to #256.

PAIR=wohe
2017-05-16 14:24:49 +02:00
Holger Rapp 8612f5e6e5 ConstantData now has a trajectory_id. (#289)
Related to #256.

PAIR=wohe
2017-05-16 11:42:18 +02:00
Wolfgang Hess 5effc4dac7 Remove flat indices from SparsePoseGraph::GetTrajectoryNodes(). (#288)
Related to #256.

Also removes ComputeMapLimits with is moved to Cartographer ROS.

PAIR=SirVer
2017-05-16 10:51:08 +02:00
Wolfgang Hess 690d1893a7 Remove unused code. (#287) 2017-05-15 16:57:02 +02:00
Holger Rapp 8392a7e62c Change SubmapState.scan_indices -> node_ids (#286)
Related to #256.

PAIR=wohe
2017-05-15 16:31:59 +02:00
Jihoon Lee f26e4366c9 Make SparsePoseGraph::constraints() public. (#284) 2017-05-15 16:06:20 +02:00
Wolfgang Hess 7d43eaa08c Keep node data per trajectory in the optimization problem. (#282)
Related to #256.

PAIR=SirVer
2017-05-15 14:09:45 +02:00
Holger Rapp c084624958 Turn submap state into a per trajectory list. (#281)
Related to #256.
2017-05-15 12:12:30 +02:00
Wolfgang Hess fde9272533 Adds mapping:NodeId for Constraint. (#279)
Also extracted mapping::SubmapId into an id.h file.

Related to #256.

PAIR=SirVer
2017-05-11 17:17:12 +02:00
Wolfgang Hess 32583e0c5d Use trajectory IDs for global samplers. (#278)
Related to #256.

PAIR=SirVer
2017-05-11 15:08:27 +02:00
Holger Rapp 1a9b18db69 Change num_submaps_in_trajectory to using trajectory IDs. (#277)
Related to #256.
2017-05-11 14:32:55 +02:00
Holger Rapp 7b1915b906 Fix bug in ToProto introduced in #275. 2017-05-11 14:02:04 +02:00
Holger Rapp e6a6bab351 Make TrajectoryConnectivity use trajectory IDs. (#275)
Related to #256.
2017-05-11 13:36:12 +02:00
Holger Rapp 95f0d013c6 Rename Constraint::i -> submap_id. (#274)
Related to #256.
2017-05-11 11:43:47 +02:00
Holger Rapp 660eb341ff Optimization problem only deals with trajectory IDs now. (#273)
Related to #256.

PAIR=wohe
2017-05-10 17:12:38 +02:00
Wolfgang Hess 926b0320cb Use per-trajectory SubmapData in OptimizationProblem. (#272) 2017-05-10 16:28:58 +02:00
Holger Rapp 94e8eec41d Use (trajectory_id, submap_index) as submap IDs in places. (#271)
Replace flat submap index through (trajectory_id, submap_index) in Constraints.
Related to #256.

PAIR=wohe
2017-05-10 12:26:58 +02:00
Holger Rapp 45de59b116 Move trajectory id mapping into the SparsePoseGraph. (#270) 2017-05-10 08:23:57 +02:00
Holger Rapp 524b613f2c `submap_pose`s are now owned by the OptimizationProblem. (#269) 2017-05-09 17:24:48 +02:00
Holger Rapp 20e9cde53d Fix race condition in extrapolation of submap poses. (#268)
PAIR=wohe
2017-05-09 15:21:30 +02:00
Holger Rapp 772d02c00e Move ConstantData into the SPG (#263) 2017-05-08 17:10:07 +02:00
Wolfgang Hess 9194c8679b Clean up. (#266)
Move trajectory builder options.
Remove the barely used Interval template.
Inline the remaining CMakeLists.txt subdirectories.
2017-05-08 15:29:13 +02:00
Yutaka Takaoka 522b37979a Enable multiple configuration for multi-trajectory (#248) 2017-05-08 11:58:53 +02:00
Holger Rapp e2de27cded Remove dead code. (#262) 2017-05-08 11:06:33 +02:00
Wolfgang Hess 79dc1f848f Remove 'laser' references from parameter names. (#259)
Related to #250.
2017-05-04 15:38:41 +02:00
Wolfgang Hess 6d2feaa8c7 Build and run all tests found by the glob. (#258) 2017-05-03 16:55:13 +02:00
Wolfgang Hess ff06e37579 Remove the LaserScan proto. (#257) 2017-05-03 16:20:04 +02:00
Holger Rapp cdd366bab4 Remove intensities - they are unused in SLAM. (#247) 2017-05-03 13:44:15 +02:00
Wolfgang Hess 2f3a9f4dcc Add support for files containing multiple protos. (#241)
This adds code for reading and writing files that contain
sequences of compressed protocol buffer messages.
2017-04-28 15:05:42 +02:00
Holger Rapp b4b83405ce Fix divison by zero. (#240)
If mapping_2d::LocalTrajectoryBuilder::AddHorizontalRangeData is called
twice in a row with the same `time`, the `velocity_estimate_` becomes
`inf` which led to `inf`s in the optimization problem, which led to
failures inside Ceres.

Fixes #233.
2017-04-26 14:14:24 +02:00
catskul 245e356449 Const-ify ProbabilityGrid::ToProto (#238) 2017-04-25 09:34:17 +02:00
Wolfgang Hess af22dc6fe1 Simplify submap versions. (#235)
We now only keep track of the number of inserted range data.
2017-04-21 14:12:08 +02:00
Mac Mason 92d360a8f2 Multi-trajectory SparsePoseGraph::ToProto. (#227)
Multi-trajectory SparsePoseGraph::ToProto.
Remove obsolete TrajectoryNode::ToProto.
Add GetSubmapStates.
2017-04-19 17:01:03 +02:00
Mac Mason 4f1914b2b4 Remove extraneous Eigen/Geometry include (#232) 2017-03-31 08:46:48 +02:00
Juraj Oršulić cb0d1a6d5a Remove inclination warning (#231)
Resolves #194.
2017-03-30 16:39:53 +02:00
William Woodall bda68c33d9 Fix warning about struct being redefined as class (#228) 2017-03-28 08:57:13 +02:00
Mac Mason 1e5b49ce62 Minor sparse_pose_graph.proto improvement (#226) 2017-03-24 09:03:36 +01:00
Wolfgang Hess 4fa190d316 Rename LaserFan to RangeData. (#224)
LaserFan is misleading since range data can come from
various sensor types.
2017-03-23 14:56:18 +01:00
Wolfgang Hess a2abe45542 Rename CompressedLaserFan to CompressedRangeData. (#223)
CompressedLaserFan is misleading since data can come from a
different type of sensor, e.g. a depth camera.
2017-03-22 13:06:41 +01:00
William Woodall c78f29fdac Adds #include <array> in files that use std::array (#222) 2017-03-20 08:37:47 +01:00
Mac Mason 76868b7edb Adds HybridGrid proto serialization (#220) 2017-03-14 11:44:19 +01:00
Mac Mason 8bf6f101c5 Adds probability grid serialization to proto (#208) 2017-03-09 09:01:10 +01:00
Mac Mason 30b9fcce34 Claim an old TODO. (#209) 2017-03-01 10:26:48 +01:00
Juraj Oršulić 370e1e52df Enable adding as a CMake subproject (#203)
This is done by replacing CMAKE_*_DIR variables with PROJECT_*_ variables so
that CMake uses correct paths when libcartographer is a subproject

Move AllFiles.cmake into the project binary dir instead of the root CMake binary dir,
use a project-dependent detect_changes target name

This makes overriding it from an upper level CMakeLists.txt possible, which is required
when doing a super-build which doesn't require installing libcartographer.
2017-02-09 15:57:54 +01:00