Commit Graph

838 Commits (d7b4656741bbf99f922c5ea7dddf15a1a74aec0f)

Author SHA1 Message Date
Alexander Belyaev 7b68844937
Add a gRPC version of SetLandmarkPose(). (#1068) 2018-04-16 15:49:08 +02:00
Alexander Belyaev 75f899117a Move to testing/. (#1067) 2018-04-16 12:47:11 +02:00
gaschler 663e135426 add check (#1063) 2018-04-16 12:01:09 +02:00
Alexander Belyaev 74f74c4b61 Deserialize landmark poses. (#1064) 2018-04-13 16:38:45 +02:00
Kevin Daun 46d3a9443a Introduce Grid2D as base class for 2D grids (#1046)
This is a first step towards generalizing submaps (see [ongoing RFC discussion](https://github.com/googlecartographer/rfcs/pull/30)).
Although this PR already introduces a correspondence cost grid, the grid is still used as probability grid.
2018-04-13 13:43:09 +02:00
Christoph Schütte b4c4ae6ea9 Update unfinished submap list on SLAM thread (#1061)
Fixes #1052
2018-04-13 12:15:26 +02:00
Michael Grupp d2f29d04b9 Improve pose terminology of 2D optimization problem. (#1053)
Removes the confusing term `initial_pose` from global 2D optimization.
It makes sense in other areas like scan matching, but has a completely
different meaning there. Also matches the 3D equivalents better.

- `local_pose_2d` replaces `initial_pose` as the name for the
   non-gravity-aligned, local 2D pose in the submap
- `global_pose_2d` replaces `pose` as the name for the
   non-gravity-aligned, global 2D pose that is optimized

See the comment in the PR for how this improves readability.
2018-04-12 16:00:56 +02:00
Christoph Schütte 14465aa23e Refactor MapBuilderContext to reduce code duplication. (#1059) 2018-04-12 15:27:24 +02:00
Alexander Belyaev a4346337bc
Address the comments for the overlapping submaps trimmer. (#1060) 2018-04-12 14:28:33 +02:00
Christoph Schütte f83d0a6ed6 Implement IsTrajectory{Finished,Frozen} in cloud mapping (#1057) 2018-04-12 12:37:04 +02:00
Alexander Belyaev 771336b3c9
Add overlapping submaps trimmer. (#1027)
Trims submaps that have less than 'min_covered_cells_count' cells not overlapped by at least 'fresh_submaps_count` submaps.
2018-04-12 11:53:56 +02:00
Alexander Belyaev 7286415e27 Remove unused variable. (#1049) 2018-04-11 13:15:09 +02:00
jie d1161b5f8e Internal cleanup (#1051)
Fix lint errors.
2018-04-11 09:56:22 +02:00
Alexander Belyaev 7b0963216f
Move FakeTrimmable implementation to internal/testing. (#1050)
* Move FakeTrimmable implementation to internal/testing.

* Address the comments.
2018-04-10 18:05:03 +02:00
Michael Grupp 4351bdb3c8 Separate global optimization constraints for local SLAM and odometry (#1029)
Implements [RFC-0018](https://github.com/googlecartographer/rfcs/blob/master/text/0018-odometry-use-in-optimization-problem.md)
2018-04-10 14:44:43 +02:00
jie cf358e7640 Internal cleanup (#1045)
Clean up the lint errors.
2018-04-10 09:43:36 +02:00
jie 74b35caf6e Internal clean up. (#1042)
Add necessary headers to convenient the import to google.
Require holding mutex for some function that access the variables that guard by mutex.
2018-04-09 19:18:58 +02:00
gaschler e89625d36a Correctly use PrecomputationGridStack for 2D and 3D (#1040)
FIXES=#1038
2018-04-09 14:29:45 +02:00
Alexander Belyaev b1dcb0cc5e Remove unused 'freeze_landmarks_' field. (#1039) 2018-04-05 18:40:48 +02:00
gaschler e26e9f172b RangeDataCollator handles empty range data. (#1036)
FIXES=#1019
2018-04-04 15:20:10 +02:00
Alexander Belyaev abb2661b76
Allow trimmer to get nodes/constraints. (#1034)
* Allow trimmer to get nodes/constraints.

* Mark the methods const.
2018-04-04 12:50:12 +02:00
Alexander Belyaev 41fc7e38cc Rename the setters according to style-guide. (#1032)
just a nit
2018-04-03 18:56:44 +02:00
Alexander Belyaev 8c6c584524
Allow trimmers fetch submap data. (#1024) 2018-03-28 12:07:28 +02:00
Alexander Belyaev 962393074a New fixes for Jets. (#1023)
Issue #1015
2018-03-27 14:26:21 +02:00
gaschler 94f564d871
Test trimming within trajectory (#1020) 2018-03-27 12:50:35 +02:00
Alexander Belyaev e0e1c081e7
Do not use operator*= with Jets. (#1018) 2018-03-26 15:55:50 +02:00
Christoph Schütte 915ebb19a6
Use async_grpc (#1013)
Use async_grpc
2018-03-23 10:52:48 +01:00
Alexander Belyaev e48e21849a
Acquire mutex before copying landmark poses. (#1007) 2018-03-19 16:16:46 +01:00
Alexander Belyaev 4cc758e830
Serialize landmark observations. (#1006) 2018-03-19 15:12:47 +01:00
gaschler 7a7908ebb9 Test PureLocalizationTrimmer with actual pose graph (#1004) 2018-03-19 11:43:19 +01:00
gaschler b23ec8ce4e
Fix PureLocalizationTrimmer (#1002)
Remove the wrong assumption that submap index is sequential from 0.
2018-03-19 10:35:35 +01:00
Juraj Oršulić ee530d2423 Purge some additional jets (#1000) 2018-03-16 19:12:56 +01:00
Alexander Belyaev 1f9c78a82b
Remove float-to-jet casts where possible. (#998) 2018-03-16 14:53:10 +01:00
Alexander Belyaev 06a9d3544d
Interpolate trajectory node to compute starting point for landmarks. (#997)
[Landmarks RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-03-16 12:01:55 +01:00
gaschler 37a68cd7f4 LocalTrajectoryBuilder uses RangeDataCollator (#996)
Local SLAM accepts and unwarps time-overlapping range data from multiple sensors.

[RFC=0017](https://github.com/googlecartographer/rfcs/blob/master/text/0017-synchronize-points.md)
FIXES=#910
2018-03-15 16:34:51 +01:00
gaschler 55065a2108 Mockable optimization (#994) 2018-03-15 14:13:59 +01:00
gaschler bd7d7202bf Filter RangeMeasurement (#995)
[RFC=0017](https://github.com/googlecartographer/rfcs/blob/master/text/0017-synchronize-points.md)
2018-03-15 12:31:08 +01:00
gaschler 067d01a364 Test PoseGraph3D (#990) 2018-03-15 11:44:47 +01:00
gaschler ed47f9d8f8 OptimizationProblemInterface (#991)
Derive optimization problems from a new OptimizationProblemInterface.
Move fix_z into OptimizationProblemOptions.
Move trivial getters to header files.
This will allow mocking the optimization problems.
2018-03-15 11:12:26 +01:00
Alexander Belyaev e6c4ee4b8b Move interpolation of poses to 'cost_helpers'. (#992) 2018-03-15 10:33:02 +01:00
Alexander Belyaev 1e4d558ac4
Add landmarks to the state and deserialize them. (#988) 2018-03-14 21:36:15 +01:00
gaschler 36df3eec19
Instrument metrics in GlobalTrajectoryBuilder. (#945)
RFC=[0014](https://github.com/googlecartographer/rfcs/blob/master/text/0014-monitoring.md)
2018-03-14 14:51:40 +01:00
Alexander Belyaev 0190e7cd99 Clean-up dependencies of map_builder and put getters to the header. (#989) 2018-03-14 13:33:44 +01:00
Alexander Belyaev c060a15670
Remove dead code: fast_global_localizer. (#987) 2018-03-13 16:23:27 +01:00
Alexander Belyaev 4d52c46629
Clean-up dependencies and move real_time_correlative_scan_matcher. (#986)
[Internal headers RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2018-03-13 15:18:05 +01:00
Wolfgang Hess c09b643d8d Synchronize correctly in FinishTrajectory(). (#980)
PoseGraph{2D,3D}::FinishTrajectory() calls AddWorkItem() which
requires the mutex to be held. This adds code to do this.
2018-03-13 14:10:51 +01:00
Alexander Belyaev 525f7afe7e
Move sensor-related stuff to internal/. (#985)
[Internal headers RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2018-03-13 13:36:45 +01:00
gaschler 1187480fe6 Introduce RangeDataCollator (#975)
Synchronizes and merge-sorts TimedPointCloudData by per-point timestamps from
multiple sensors.

[RFC=0017](https://github.com/googlecartographer/rfcs/blob/master/text/0017-synchronize-points.md)
2018-03-13 11:08:01 +01:00
Alexander Belyaev 976736051c
Move scan matchers to internal/. (#983) 2018-03-13 10:21:27 +01:00
Alexander Belyaev 70c7660348
Move even more stuff to internal/. (#982)
[Internal headers RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2018-03-12 17:46:31 +01:00
Alexander Belyaev bfbf29dcd6
Move mapping/pose_graph/ to internal/. (#979)
[Internal headers RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2018-03-12 14:00:18 +01:00
Alexander Belyaev 418e0964bf
Move pose_graph_*d related files to internal/. (#976)
[Internal headers RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0003-internal-headers.md)
2018-03-12 12:42:52 +01:00
Juraj Oršulić 091a4f852d Update descriptions in pose_graph.h (#977)
Remove "frozen", since deserialized trajectories can be unfrozen since #891.
2018-03-10 23:50:31 +01:00
Alexander Belyaev 2fe1867221
Fix writing the pbstream via gRPC. (#973) 2018-03-09 16:26:03 +01:00
Alexander Belyaev daa35d3bc8
Move in_memory_proto_stream.* to internal. (#969)
Internal Headers RFC
2018-03-09 15:24:07 +01:00
Alexander Belyaev bb4ba8b319
Split local_slam_result_data.h into base and 2d/3d parts. (#967) 2018-03-08 15:17:31 +01:00
Alexander Belyaev b29986f297
Remove the pointers to the derived PoseGraph*D classes from map_builder. (#966) 2018-03-08 14:49:41 +01:00
Alexander Belyaev 20a980aade
Remove 'pose_graph_*d.h' from local_slam_result_data.h. (#965) 2018-03-08 13:09:43 +01:00
Alexander Belyaev 256b5a6ff0
Remove '2d/probability_grid.h' include from 'submaps.h'. (#964) 2018-03-08 11:56:42 +01:00
Kevin Daun 82a491181d Add IsTrajectoryFrozen to PoseGraph (#962)
Adds IsTrajectoryFrozen to the PoseGraph interface
2018-03-08 11:18:08 +01:00
Alexander Belyaev f34df22a24
Update header guards. (#959) 2018-03-05 14:55:51 +01:00
Alexander Belyaev cf180a0b19
Move mapping:: related mocks to cartographer/internal/testing. (#960) 2018-03-05 14:09:04 +01:00
Alexander Belyaev f76d8a8a0d
Move cartographer_grpc/ to cartographer/cloud. (#958)
[Code structure RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0016-code-structure.md)
2018-03-05 12:41:38 +01:00
gaschler a2219cb2fc
Correct comment (#948) 2018-03-02 10:25:23 +01:00
gaschler 0156e6b8ce Instrument metrics in local trajectory builders. (#946)
RFC=[0014](https://github.com/googlecartographer/rfcs/blob/master/text/0014-monitoring.md)
2018-02-28 16:32:40 +01:00
gaschler df1ee4bb29 Fix metric label. (#944)
This makes metrics_test in debug mode happy.
2018-02-28 14:46:26 +01:00
gaschler 363a337e67 Re-implement VoxelFilter with unordered_set (#938)
Use hashing to filter voxels.
Handles arbitrary grid coordinates up to sizeof(int).

FIXES=#937
2018-02-28 11:12:18 +01:00
Juraj Oršulić 32b8bd3581 Enable loading unfrozen state (#891)
Enable loading unfrozen state
2018-02-27 20:38:57 +01:00
Alexander Belyaev 29875117b3
Move internal/mapping to mapping/internal. (#941) 2018-02-27 16:25:53 +01:00
gaschler 63fd497e0f Document HybridGrid limits. (#939)
Adds documentation to avoid issue #937.
2018-02-27 15:28:35 +01:00
gaschler f606d4b91c Gracefully handle time-overlapping point clouds. (#936)
Per-point relative times are usually computed by multiplying
a per-point time increment by the number of points.
So it is not uncommon for consecutive point clouds of a single
sensor to overlap in time.
When this happens, we act as if no backward jump in time happened
and warn once per input point cloud.

FIXES=#912
2018-02-26 18:38:00 +01:00
Alexander Belyaev 3ebfa757ef
Move mapping_*d to mapping/*d. (#935)
[Code structure RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0016-code-structure.md)
2018-02-26 17:40:29 +01:00
Alexander Belyaev e75e023ce2
Purge 'mapping_3d::'. (#927) (#928)
[Code structure RFC](https://github.com/googlecartographer/rfcs/blob/master/text/0016-code-structure.md)
2018-02-26 14:26:41 +01:00
danielsievers 258aa715ba Move GetTrajectoryData() down to PoseGraphInterface (#932) 2018-02-26 12:45:53 +01:00
Michael Grupp 90994464a5 Check ifstream::good() in proto_stream.cc (#929)
Check for basic stream errors before doing more involved read actions.
The log message in this case is also more descriptive than
`Check failed: reader->ReadProto(&pose_graph)`.
2018-02-22 16:21:15 +01:00
Alexander Belyaev 94fce13f62
Purge 'mapping_2d::'. (#927)
[Code structure RFC](e11bca586f/text/0000-code-structure.md)
2018-02-21 19:44:53 +01:00
gaschler 30114e364a Instrument metrics in constraint builders. (#921)
RFC=[0014](https://github.com/googlecartographer/rfcs/blob/master/text/0014-monitoring.md)
2018-02-21 17:31:11 +01:00
gaschler 2711f4492f Test PoseExtrapolator (#926) 2018-02-21 16:43:58 +01:00
Alexander Belyaev 7d13383dec
Remove 'mapping_3d' namespace. (#922) (#925)
Remove 'mapping_3d' namespace. (#922)

It is removed from everywhere but 'scan_matching', 'pose_graph'
subfolders of 'mapping_3d'.

[Code structure RFC](e11bca586f/text/0000-code-structure.md)
2018-02-21 14:24:12 +01:00
Alexander Belyaev f8dc89d8ff
Remove 'mapping_2d' namespace. (#922)
It is removed from everywhere but 'scan_matching', 'pose_graph'
subfolders of 'mapping_2d'.

[Code structure RFC](e11bca586f/text/0000-code-structure.md)
2018-02-21 12:41:14 +01:00
Alexander Belyaev 96d5e2819c
Move implementation of ProbabilityGrid to .cc file. (#924) 2018-02-21 09:55:40 +01:00
gaschler ab05459f1c Move GlobalTrajectoryBuilder to cc file (#923)
* Move GlobalTrajectoryBuilder to cc file.

This allows to instrument file-level static metrics.
Also, it is a cleaner interface.

* two create functions

* drop superfluous typename
2018-02-21 08:53:09 +01:00
Alexander Belyaev a58866cb38
Rename mapping_3d::PoseGraph to mapping::PoseGraph3D. (#918)
[Code structure RFC](e11bca586f/text/0000-code-structure.md)
2018-02-20 15:28:21 +01:00
Alexander Belyaev 43544f0fbc
Rename mapping_2d::PoseGraph to mapping::PoseGraph2D. (#917)
[rCode structure RFC](e11bca586f/text/0000-code-structure.md)
2018-02-19 20:01:29 +01:00
danielsievers c38bb60407 (De)serialize trajectory data from the optimization problem (#915)
* Write/Read the trajectory data (gravity, imu calibration, and fixed frame origin) into the serialized state proto
2018-02-19 16:30:32 +01:00
gaschler 64bc194609 Introduce interfaces for metrics (#907)
Adds interfaces for metrics and metrics families.
Adds creation of null (noop) metrics.
Declares global register function.

RFC=[0014](https://github.com/googlecartographer/rfcs/blob/master/text/0014-monitoring.md)
2018-02-19 14:02:54 +01:00
Juraj Oršulić fb631ac9e6 Landmark improvements (#901) 2018-02-14 15:39:43 +01:00
gaschler cf01184114 Fix leak in LandmarkCostFunctionTest. (#902) 2018-02-14 12:38:01 +01:00
gaschler 9793542957 Add 3D global SLAM grpc test. (#904) 2018-02-14 12:04:52 +01:00
gaschler 244cf615f5 Make clang compile without warnings. (#903)
Rule out accidental usage of integer-only ::abs.
Correct static, override and protected annotations.
2018-02-14 11:06:46 +01:00
gaschler b2581b0d58 Make comparison operator const. (#898) 2018-02-13 13:03:26 +01:00
gaschler 7448f93b50 Avoid auto for Eigen expressions. (#899)
While harmless in most cases, auto can delay evaluation
of expressions in unexpected ways.
So it is better to avoid auto for Eigen expressions.
https://eigen.tuxfamily.org/dox/TopicPitfalls.html
2018-02-13 12:34:43 +01:00
Alexander Belyaev ac79f0c034
Save landmark poses after optimization run. (#896)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-12 13:15:16 +01:00
Alexander Belyaev b72bbb20c3
Fix the size of residuals, add test for jacobians. (#895)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-09 13:13:17 +01:00
Alexander Belyaev 95dbcfdf9e Serialize landmarks. (#889)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-07 10:47:39 +01:00
Alexander Belyaev 58bc1ced68
Implement GetLandmarkPoses method. (#888)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-06 18:13:31 +01:00
Alexander Belyaev 28993a8963
Use landmarks in optimization (both 2D & 3D). (#884)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-05 13:23:00 +01:00
Juraj Oršulić 9bebeea742 Serialize and deserialize trajectory builder options (#859) 2018-02-05 09:45:43 +01:00
Holger Rapp c212bbb698 Hand through intensities into the generated PLY - if they exist. (#885) 2018-02-02 18:29:18 +01:00
gaschler 9eaf960936 Configure remaining tests in bazel (#879) 2018-02-01 21:58:59 +01:00
Alexander Belyaev eed51b8bb6 Cleaning up dependencies for constraint builder & optimization problem. (#877) 2018-02-01 20:59:22 +01:00
Alexander Belyaev 8ea46857ac
Move cerec_pose.* to mapping/pose_graph. (#874) 2018-02-01 15:16:50 +01:00
Alexander Belyaev d195c77ebc
Add a 2D landmark cost function. (#868)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-01 13:39:24 +01:00
Christoph Schütte 60e9fa59fe
Implement AddImuDataHandlerTest (#872)
This PR introduces first gRPC handler test that takes advantage of new RpcHandlerTestServer.
2018-02-01 13:05:08 +01:00
Alexander Belyaev e735203a05
Extend MapById::lower_bound() to support structs with 'time' field. (#871)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-02-01 11:58:13 +01:00
Alexander Belyaev ab890a8e15
Move 3D landmark cost function to mapping_3d/. (#870)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-01-31 18:40:10 +01:00
Alexander Belyaev 0440761474
Move slerp and scaling of error to 'cost_helpers'. (#864)
[RFC=0011](https://github.com/googlecartographer/rfcs/blob/master/text/0011-landmarks.md)
2018-01-31 17:06:49 +01:00
Rodrigo Queiro ad4dc3c4d3 Bazel: build with -Wno-sign-compare (#863)
This avoids warnings for code like:

```
  CHECK_EQ(local_to_cloud_trajectory_id_map_.count(local_trajectory_id), 0);
```
2018-01-31 15:19:36 +01:00
Alexander Belyaev 708e7fc57d
Add a 'cost_helpers' library. (#862)
* Add a 'cost_helpers' library.

* Change naming and add comments.
2018-01-30 22:12:25 +01:00
Alexander Belyaev 93568641f9
Implement LandmarkCostFunction 3D. (#860) 2018-01-30 15:18:13 +01:00
Alexander Belyaev 8316444319
Store landmark observations as LandmarkNodes in PoseGraph. (#850) 2018-01-29 10:17:05 +01:00
gaschler dab69e0ca0 Struct SensorId (#839)
* WIP, started unordered_set<SensorId>

* struct SensorId. Works for cartographer without grpc.

* correct test

* SensorId in cartographer_grpc/

* clean up

* try to fix for trusty

* SensorId::operator==

* Ran clang-format.
2018-01-26 15:07:49 +01:00
Christoph Schütte edb18231b6 Add ProtoStreamWriterInterface and implement forwarding writer. (#849) 2018-01-25 15:27:50 +01:00
Alexander Belyaev 894bad397d
Rename Landmark->LandmarkObservation. (#847) 2018-01-25 12:10:30 +01:00
Alexander Belyaev aee1bc46dc
Introduce InMemoryProtoStreamReader. (#844)
* Introduce InMemoryProtoStreamReader.

* Move inmemory*.* to in_memory*.*.
2018-01-24 13:58:15 +01:00
Alexander Belyaev 43008d391d
Introduce a ProtoStreamReaderInterface. (#837)
* Introduce a ProtoStreamReaderInterface.

* Remove the comments from interface def.
2018-01-23 09:09:37 +01:00
Alexander Belyaev 986ac28ff8
Rename 'tranform' to 'landmark_to_tracking_transform'. (#836) 2018-01-22 18:30:14 +01:00
Alexander Belyaev 6d4649857a
Move implementation of ReadProto/WriteProto to .cc (#835) 2018-01-22 17:53:31 +01:00
Rodrigo Queiro 0c227097e7 Add a Bazel build for cartographer (#834)
This does not include cartographer_grpc, nor any of the binaries
(*_main.cc). It has been tested with Bazel 0.9.0 on Ubuntu 14.04 with
the latest (at time of writing) dazel/dazel container, by running:

```
bazel build //...
bazel test //...
```

While this is a large CL, the files under third_party are not new - they have been through internal review, and this is their open-source release. The other files come to 212 lines of code.
2018-01-22 16:47:07 +01:00
Alexander Belyaev 67850d25a0 Replace templates in io/proto_stream.h with upcasting. (#833) 2018-01-22 14:12:14 +01:00
Alexander Belyaev 746c9c83c8
Propagate LandmarksData to the PoseGraph. (#830)
Propagate LandmarkData to the PoseGraph.
2018-01-19 09:41:24 +01:00
gaschler de5937856d Collate_by_trajectory option (#828)
Adds an option to create a MapBuilder using TrajectoryCollator
(instead of Collator).

[RFC=0008](https://github.com/googlecartographer/rfcs/blob/master/text/0008-collator-interface.md)
2018-01-17 21:15:15 +01:00
gaschler d92040d0e6 Test Collator for multiple trajectories (#829) 2018-01-17 20:43:20 +01:00
gaschler 70e378b7c5 TrajectoryCollator (#827)
Introduces TrajectorCollator, which collates sensor data ignoring
other trajectories.
Tests the same.

[RFC=0008](https://github.com/googlecartographer/rfcs/blob/master/text/0008-collator-interface.md)
2018-01-17 17:48:20 +01:00
Wolfgang Hess ffdbf1c161 Fix debug output for 3D loop closure error. (#826)
PAIR=spielawa
2018-01-17 13:09:48 +01:00
gaschler f64eef876a Optional GetBlockingTrajectoryId (#820)
[RFC=0008](https://github.com/googlecartographer/rfcs/blob/master/text/0008-collator-interface.md)
2018-01-16 16:21:22 +01:00
Alexander Belyaev 53c2a6b58f
Move 'finished' getter to the base class. (#803)
* Move 'finished' getter to the base class.

* Ran clang-format.

* Ran clang-format.
2018-01-16 14:20:33 +01:00
Christoph Schütte 31ec89614c Add parameter to Submap::ToProto() to determine whether to include loop (#821) 2018-01-16 11:23:29 +01:00
Christoph Schütte 3660408ae6 Forward declare unique_ptr<LocalSlamResultData> (#824) 2018-01-16 10:20:51 +01:00
gaschler 057bd8ce6a Public SpaCostFunction::Compute* (#814) 2018-01-12 21:46:47 +01:00
Wolfgang Hess 19ff047a79 Allow FixedRatioSampler to drop all data. (#817)
This is useful to disable loop closure by setting
constraint_builder.sampling_ratio = 0.
2018-01-12 18:54:41 +01:00
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