diff --git a/cartographer/sensor/odometry_data.cc b/cartographer/sensor/odometry_data.cc new file mode 100644 index 0000000..50b5027 --- /dev/null +++ b/cartographer/sensor/odometry_data.cc @@ -0,0 +1,37 @@ +/* + * Copyright 2017 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. + */ + +#include "cartographer/sensor/odometry_data.h" + +#include "cartographer/transform/transform.h" + +namespace cartographer { +namespace sensor { + +proto::OdometryData ToProto(const OdometryData& odometry_data) { + proto::OdometryData proto; + proto.set_timestamp(common::ToUniversal(odometry_data.time)); + *proto.mutable_pose() = transform::ToProto(odometry_data.pose); + return proto; +} + +OdometryData FromProto(const proto::OdometryData& proto) { + return OdometryData{common::FromUniversal(proto.timestamp()), + transform::ToRigid3(proto.pose())}; +} + +} // namespace sensor +} // namespace cartographer diff --git a/cartographer/sensor/odometry_data.h b/cartographer/sensor/odometry_data.h new file mode 100644 index 0000000..c4f0778 --- /dev/null +++ b/cartographer/sensor/odometry_data.h @@ -0,0 +1,41 @@ +/* + * Copyright 2017 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. + */ + +#ifndef CARTOGRAPHER_SENSOR_ODOMETRY_DATA_H_ +#define CARTOGRAPHER_SENSOR_ODOMETRY_DATA_H_ + +#include "cartographer/common/time.h" +#include "cartographer/sensor/proto/sensor.pb.h" +#include "cartographer/transform/rigid_transform.h" + +namespace cartographer { +namespace sensor { + +struct OdometryData { + common::Time time; + transform::Rigid3d pose; +}; + +// Converts 'odometry_data' to a proto::OdometryData. +proto::OdometryData ToProto(const OdometryData& odometry_data); + +// Converts 'proto' to an OdometryData. +OdometryData FromProto(const proto::OdometryData& proto); + +} // namespace sensor +} // namespace cartographer + +#endif // CARTOGRAPHER_SENSOR_ODOMETRY_DATA_H_ diff --git a/cartographer/sensor/proto/sensor.proto b/cartographer/sensor/proto/sensor.proto index 92ea0ba..842d681 100644 --- a/cartographer/sensor/proto/sensor.proto +++ b/cartographer/sensor/proto/sensor.proto @@ -20,22 +20,28 @@ option java_outer_classname = "Sensor"; import "cartographer/transform/proto/transform.proto"; -// Compressed collection of 3D 'points'. +// Compressed collection of a 3D point cloud. message CompressedPointCloud { optional int32 num_points = 1; repeated int32 point_data = 3 [packed = true]; } -// Proto representation of ::cartographer::sensor::ImuData +// Proto representation of ::cartographer::sensor::ImuData. message ImuData { optional int64 timestamp = 1; optional transform.proto.Vector3d linear_acceleration = 2; optional transform.proto.Vector3d angular_velocity = 3; } -// Proto representation of ::cartographer::sensor::CompressedRangeData +// Proto representation of ::cartographer::sensor::CompressedRangeData. message CompressedRangeData { optional transform.proto.Vector3f origin = 1; optional CompressedPointCloud returns = 2; optional CompressedPointCloud misses = 3; } + +// Proto representation of ::cartographer::sensor::OdometryData. +message OdometryData { + optional int64 timestamp = 1; + optional transform.proto.Rigid3d pose = 2; +}