diff --git a/cartographer/pose_graph/proto/constraint.proto b/cartographer/pose_graph/proto/constraint.proto new file mode 100644 index 0000000..44b6d05 --- /dev/null +++ b/cartographer/pose_graph/proto/constraint.proto @@ -0,0 +1,26 @@ +// Copyright 2018 The Cartographer Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +import "cartographer/pose_graph/proto/loss_function.proto"; +import "cartographer/pose_graph/proto/cost_function.proto"; + +package cartographer.pose_graph.proto; + +message Constraint { + string id = 1; + CostFunction cost_function = 2; + LossFunction loss_function = 3; +} diff --git a/cartographer/pose_graph/proto/cost_function.proto b/cartographer/pose_graph/proto/cost_function.proto new file mode 100644 index 0000000..048e7b7 --- /dev/null +++ b/cartographer/pose_graph/proto/cost_function.proto @@ -0,0 +1,68 @@ +// Copyright 2018 The Cartographer Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +import "cartographer/pose_graph/proto/node.proto"; +import "cartographer/transform/proto/transform.proto"; + +package cartographer.pose_graph.proto; + +message RelativePose2D { + NodeId first = 1; + NodeId second = 2; + + transform.proto.Rigid2d first_T_second = 3; + double translation_weight = 4; + double rotation_weight = 5; +} + +message RelativePose3D { + NodeId first = 1; + NodeId second = 2; + + transform.proto.Rigid3d first_T_second = 3; + double translation_weight = 4; + double rotation_weight = 5; +} + +message Acceleration3D { + NodeId first = 1; + NodeId second = 2; + NodeId third = 3; + NodeId imu_calibration = 4; + + transform.proto.Vector3d delta_velocity_imu_frame = 5; + int64 first_to_second_time_delta = 6; + int64 second_to_third_time_delta = 7; + double scaling_factor = 8; +} + +message Rotation3D { + NodeId first = 1; + NodeId second = 2; + NodeId imu_calibration = 3; + + transform.proto.Quaterniond delta_rotation_imu_frame = 4; + double scaling_factor = 5; +} + +message CostFunction { + oneof Type { + RelativePose2D relative_pose_2d = 1; + RelativePose3D relative_pose_3d = 2; + Acceleration3D acceleration_3d = 3; + Rotation3D rotation_3d = 4; + } +} diff --git a/cartographer/pose_graph/proto/loss_function.proto b/cartographer/pose_graph/proto/loss_function.proto new file mode 100644 index 0000000..a45e557 --- /dev/null +++ b/cartographer/pose_graph/proto/loss_function.proto @@ -0,0 +1,30 @@ +// Copyright 2018 The Cartographer Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package cartographer.pose_graph.proto; + +message QuadraticLoss {} + +message HuberLoss { + double scale = 1; +} + +message LossFunction { + oneof Type { + QuadraticLoss quadratic_loss = 1; + HuberLoss huber_loss = 2; + } +} diff --git a/cartographer/pose_graph/proto/node.proto b/cartographer/pose_graph/proto/node.proto new file mode 100644 index 0000000..47749a6 --- /dev/null +++ b/cartographer/pose_graph/proto/node.proto @@ -0,0 +1,63 @@ +// Copyright 2018 The Cartographer Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package cartographer.pose_graph.proto; + +import "cartographer/transform/proto/transform.proto"; + +enum Parameterization { + NONE = 0; + YAW_ONLY = 1; + YAW_CONSTANT = 2; +} + +message Pose2D { + transform.proto.Vector2d translation = 1; + double rotation = 2; +} + +message Pose3D { + transform.proto.Vector3d translation = 1; + transform.proto.Quaterniond rotation = 2; + Parameterization translation_parameterization = 3; + Parameterization rotation_parameterization = 4; +} + +message ImuCalibration { + double gravity_constant = 1; + transform.proto.Quaterniond imu_calibration = 2; + Parameterization rotation_parameterization = 3; +} + +message NodeId { + string object_id = 1; + int64 timestamp = 2; +} + +message Parameters { + oneof Type { + Pose2D pose_2d = 1; + Pose3D pose_3d = 2; + ImuCalibration imu_calibration = 3; + } +} + +message Node { + NodeId id = 1; + bool constant = 2; + Parameters parameters = 3; +} + diff --git a/cartographer/pose_graph/proto/pose_graph_data.proto b/cartographer/pose_graph/proto/pose_graph_data.proto new file mode 100644 index 0000000..b76966a --- /dev/null +++ b/cartographer/pose_graph/proto/pose_graph_data.proto @@ -0,0 +1,25 @@ +// Copyright 2018 The Cartographer Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +import "cartographer/pose_graph/proto/node.proto"; +import "cartographer/pose_graph/proto/constraint.proto"; + +package cartographer.pose_graph.proto; + +message PoseGraphData { + repeated Node nodes = 1; + repeated Constraint constraints = 2; +}