/* * Copyright 2016 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. */ using System.Collections.Generic; using System.Text.Json.Serialization; using CartographerSharp.Models.Sensor; using CartographerSharp.Models.Transform; namespace CartographerSharp.Models.Mapping; /// /// Header of the serialization format. At the moment it only contains the version of the format. /// public struct SerializationHeader { [JsonPropertyName("format_version")] public uint FormatVersion { get; set; } public SerializationHeader(uint formatVersion) { FormatVersion = formatVersion; } } /// /// Protocol buffer representation of a Submap with ID. /// public struct Submap { [JsonPropertyName("submap_id")] public PoseGraph.SubmapId SubmapId { get; set; } [JsonPropertyName("submap_2d")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Submap2D? Submap2D { get; set; } [JsonPropertyName("submap_3d")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Submap3D? Submap3D { get; set; } public Submap(PoseGraph.SubmapId submapId, Submap2D? submap2D = null, Submap3D? submap3D = null) { SubmapId = submapId; Submap2D = submap2D; Submap3D = submap3D; } } /// /// Protocol buffer representation of a Node with ID. /// public struct Node { [JsonPropertyName("node_id")] public PoseGraph.NodeId NodeId { get; set; } [JsonPropertyName("node_data")] public TrajectoryNodeData NodeData { get; set; } public Node(PoseGraph.NodeId nodeId, TrajectoryNodeData nodeData) { NodeId = nodeId; NodeData = nodeData; } } /// /// IMU data with trajectory ID for serialization. /// public struct SerializedImuData { [JsonPropertyName("trajectory_id")] public int TrajectoryId { get; set; } [JsonPropertyName("imu_data")] public Sensor.ImuData ImuDataValue { get; set; } public SerializedImuData(int trajectoryId, Sensor.ImuData imuData) { TrajectoryId = trajectoryId; ImuDataValue = imuData; } } /// /// Odometry data with trajectory ID for serialization. /// public struct SerializedOdometryData { [JsonPropertyName("trajectory_id")] public int TrajectoryId { get; set; } [JsonPropertyName("odometry_data")] public Sensor.OdometryData OdometryDataValue { get; set; } public SerializedOdometryData(int trajectoryId, Sensor.OdometryData odometryData) { TrajectoryId = trajectoryId; OdometryDataValue = odometryData; } } /// /// Fixed frame pose data with trajectory ID for serialization. /// public struct SerializedFixedFramePoseData { [JsonPropertyName("trajectory_id")] public int TrajectoryId { get; set; } [JsonPropertyName("fixed_frame_pose_data")] public Sensor.FixedFramePoseData FixedFramePoseDataValue { get; set; } public SerializedFixedFramePoseData(int trajectoryId, Sensor.FixedFramePoseData fixedFramePoseData) { TrajectoryId = trajectoryId; FixedFramePoseDataValue = fixedFramePoseData; } } /// /// Landmark data with trajectory ID for serialization. /// public struct SerializedLandmarkData { [JsonPropertyName("trajectory_id")] public int TrajectoryId { get; set; } [JsonPropertyName("landmark_data")] public Sensor.LandmarkData LandmarkDataValue { get; set; } public SerializedLandmarkData(int trajectoryId, Sensor.LandmarkData landmarkData) { TrajectoryId = trajectoryId; LandmarkDataValue = landmarkData; } } /// /// Trajectory data for serialization. /// public struct SerializedTrajectoryData { [JsonPropertyName("trajectory_id")] public int TrajectoryId { get; set; } [JsonPropertyName("gravity_constant")] public double GravityConstant { get; set; } [JsonPropertyName("imu_calibration")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Quaterniond? ImuCalibration { get; set; } [JsonPropertyName("fixed_frame_origin_in_map")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Rigid3dProto? FixedFrameOriginInMap { get; set; } public SerializedTrajectoryData(int trajectoryId, double gravityConstant, Quaterniond? imuCalibration = null, Rigid3dProto? fixedFrameOriginInMap = null) { TrajectoryId = trajectoryId; GravityConstant = gravityConstant; ImuCalibration = imuCalibration; FixedFrameOriginInMap = fixedFrameOriginInMap; } } /// /// Stop station data for serialization. /// public struct StopStationData { [JsonPropertyName("id")] public int Id { get; set; } [JsonPropertyName("time")] public long Time { get; set; } [JsonPropertyName("local_pose")] public Rigid3dProto LocalPose { get; set; } public StopStationData(int id, long time, Rigid3dProto localPose) { Id = id; Time = time; LocalPose = localPose; } } /// /// Accurate submap for serialization (different from PoseGraph.AccurateSubmap). /// public struct SerializedAccurateSubmap { [JsonPropertyName("submap")] public Submap Submap { get; set; } [JsonPropertyName("stop_stations")] public List StopStations { get; set; } public SerializedAccurateSubmap(Submap submap, List? stopStations = null) { Submap = submap; StopStations = stopStations ?? new List(); } } /// /// Serialized data container (oneof in proto). /// public struct SerializedData { [JsonPropertyName("serialization_header")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializationHeader? SerializationHeader { get; set; } [JsonPropertyName("pose_graph")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public PoseGraph? PoseGraph { get; set; } [JsonPropertyName("all_trajectory_builder_options")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public AllTrajectoryBuilderOptions? AllTrajectoryBuilderOptions { get; set; } [JsonPropertyName("submap")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Submap? Submap { get; set; } [JsonPropertyName("node")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public Node? Node { get; set; } [JsonPropertyName("trajectory_data")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializedTrajectoryData? SerializedTrajectoryData { get; set; } [JsonPropertyName("imu_data")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializedImuData? ImuData { get; set; } [JsonPropertyName("odometry_data")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializedOdometryData? OdometryData { get; set; } [JsonPropertyName("fixed_frame_pose_data")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializedFixedFramePoseData? FixedFramePoseData { get; set; } [JsonPropertyName("landmark_data")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializedLandmarkData? LandmarkData { get; set; } [JsonPropertyName("accurate_submap")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public SerializedAccurateSubmap? AccurateSubmap { get; set; } }