libcarla/include/carla/sensor/RawData.h

101 lines
2.4 KiB
C
Raw Normal View History

2024-10-18 13:19:59 +08:00
// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
// de Barcelona (UAB).
//
// This work is licensed under the terms of the MIT license.
// For a copy, see <https://opensource.org/licenses/MIT>.
#pragma once
#include "carla/Buffer.h"
#include "carla/sensor/s11n/SensorHeaderSerializer.h"
#include "carla/ros2/ROS2.h"
#include <cstdint>
#include <iterator>
namespace carla {
namespace sensor {
/// Wrapper around the raw data generated by a sensor plus some useful
/// meta-information.
class RawData {
using HeaderSerializer = s11n::SensorHeaderSerializer;
private:
const auto &GetHeader() const {
return HeaderSerializer::Deserialize(_buffer);
}
public:
/// Type-id of the sensor that generated the data.
uint64_t GetSensorTypeId() const {
return GetHeader().sensor_type;
}
/// Frame count when the data was generated.
uint64_t GetFrame() const {
return GetHeader().frame;
}
/// Timestamp when the data was generated.
double GetTimestamp() const {
return GetHeader().timestamp;
}
/// Sensor's transform when the data was generated.
const rpc::Transform &GetSensorTransform() const {
return GetHeader().sensor_transform;
}
/// Begin iterator to the data generated by the sensor.
auto begin() noexcept {
return _buffer.begin() + HeaderSerializer::header_offset;
}
/// @copydoc begin()
auto begin() const noexcept {
return _buffer.begin() + HeaderSerializer::header_offset;
}
/// Past-the-end iterator to the data generated by the sensor.
auto end() noexcept {
return _buffer.end();
}
/// @copydoc end()
auto end() const noexcept {
return _buffer.end();
}
/// Retrieve a pointer to the memory containing the data generated by the
/// sensor.
auto data() noexcept {
return begin();
}
/// @copydoc data()
auto data() const noexcept {
return begin();
}
/// Size in bytes of the data generated by the sensor.
size_t size() const {
DEBUG_ASSERT(std::distance(begin(), end()) >= 0);
return static_cast<size_t>(std::distance(begin(), end()));
}
private:
template <typename... Items>
friend class CompositeSerializer;
friend class carla::ros2::ROS2;
RawData(Buffer &&buffer) : _buffer(std::move(buffer)) {}
Buffer _buffer;
};
} // namespace sensor
} // namespace carla