Class nebula::drivers::HesaiDecoder
template <typename SensorT>
ClassList > nebula > drivers > HesaiDecoder
#include <hesai_decoder.hpp>
Inherits the following classes: nebula::drivers::HesaiScanDecoder
Public Functions
Type | Name |
---|---|
HesaiDecoder (const std::shared_ptr< const HesaiSensorConfiguration > & sensor_configuration, const std::shared_ptr< const typename SensorT::angle_corrector_t::correction_data_t > & correction_data) Constructor. |
|
virtual std::tuple< drivers::NebulaPointCloudPtr, double > | get_pointcloud () override Returns the point cloud and timestamp of the last scan. |
virtual bool | has_scanned () override Indicates whether one full scan is ready. |
virtual int | unpack (const std::vector< uint8_t > & packet) override Parses PandarPacket and add its points to the point cloud. |
Public Functions inherited from nebula::drivers::HesaiScanDecoder
See nebula::drivers::HesaiScanDecoder
Type | Name |
---|---|
HesaiScanDecoder (HesaiScanDecoder && c) = delete |
|
HesaiScanDecoder (const HesaiScanDecoder & c) = delete |
|
HesaiScanDecoder () = default |
|
virtual std::tuple< drivers::NebulaPointCloudPtr, double > | get_pointcloud () = 0 Returns the point cloud and timestamp of the last scan. |
virtual bool | has_scanned () = 0 Indicates whether one full scan is ready. |
HesaiScanDecoder & | operator= (HesaiScanDecoder && c) = delete |
HesaiScanDecoder & | operator= (const HesaiScanDecoder & c) = delete |
virtual int | unpack (const std::vector< uint8_t > & packet) = 0 Parses PandarPacket and add its points to the point cloud. |
virtual | ~HesaiScanDecoder () = default |
Protected Attributes
Type | Name |
---|---|
SensorT::angle_corrector_t | angle_corrector_ Decodes azimuth/elevation angles given calibration/correction data. |
std::array< std::array< int, SensorT::packet_t::n_blocks >, SensorT::packet_t::max_returns > | block_firing_offset_ns_ For each return mode, the firing offset of each block relative to its packet in nanoseconds. |
std::array< int, SensorT::packet_t::n_channels > | channel_firing_offset_ns_ For each channel, its firing offset relative to the block in nanoseconds. |
NebulaPointCloudPtr | decode_pc_ The point cloud new points get added to. |
uint64_t | decode_scan_timestamp_ns_ = = 0 The timestamp of the scan currently in progress. |
bool | has_scanned_ = = false Whether a full scan has been processed. |
uint32_t | last_azimuth_ = = 0 |
rclcpp::Logger | logger_ |
NebulaPointCloudPtr | output_pc_ The point cloud that is returned when a scan is complete. |
uint64_t | output_scan_timestamp_ns_ = = 0 The timestamp of the last completed scan in nanoseconds. |
SensorT::packet_t | packet_ The last decoded packet. |
ScanCutAngles | scan_cut_angles_ |
SensorT | sensor_ = {} The sensor definition, used for return mode and time offset handling. |
const std::shared_ptr< const drivers::HesaiSensorConfiguration > | sensor_configuration_ Configuration for this decoder. |
Protected Functions
Type | Name |
---|---|
void | convert_returns (size_t start_block_id, size_t n_blocks) Converts a group of returns (i.e. 1 for single return, 2 for dual return, etc.) to points and appends them to the point cloud. |
float | get_distance (const typename SensorT::packet_t::body_t::block_t::unit_t & unit) Get the distance of the given unit in meters. |
uint32_t | get_point_time_relative (uint64_t scan_timestamp_ns, uint64_t packet_timestamp_ns, size_t block_id, size_t channel_id) Get timestamp of point in nanoseconds, relative to scan timestamp. Includes firing time offset correction for channel and block. |
bool | parse_packet (const std::vector< uint8_t > & packet) Validates and parse PandarPacket. Currently only checks size, not checksums etc. |
Public Functions Documentation
function HesaiDecoder
Constructor.
inline explicit nebula::drivers::HesaiDecoder::HesaiDecoder (
const std::shared_ptr< const HesaiSensorConfiguration > & sensor_configuration,
const std::shared_ptr< const typename SensorT::angle_corrector_t::correction_data_t > & correction_data
)
Parameters:
sensor_configuration
SensorConfiguration for this decodercorrection_data
Calibration data for this decoder
function get_pointcloud
Returns the point cloud and timestamp of the last scan.
inline virtual std::tuple< drivers::NebulaPointCloudPtr, double > nebula::drivers::HesaiDecoder::get_pointcloud () override
Returns:
A tuple of point cloud and timestamp in nanoseconds
Implements nebula::drivers::HesaiScanDecoder::get_pointcloud
function has_scanned
Indicates whether one full scan is ready.
inline virtual bool nebula::drivers::HesaiDecoder::has_scanned () override
Returns:
Whether a scan is ready
Implements nebula::drivers::HesaiScanDecoder::has_scanned
function unpack
Parses PandarPacket and add its points to the point cloud.
inline virtual int nebula::drivers::HesaiDecoder::unpack (
const std::vector< uint8_t > & packet
) override
Parameters:
packet
The incoming PandarPacket
Returns:
The last azimuth processed
Implements nebula::drivers::HesaiScanDecoder::unpack
Protected Attributes Documentation
variable angle_corrector_
Decodes azimuth/elevation angles given calibration/correction data.
SensorT::angle_corrector_t nebula::drivers::HesaiDecoder< SensorT >::angle_corrector_;
variable block_firing_offset_ns_
For each return mode, the firing offset of each block relative to its packet in nanoseconds.
std::array<std::array<int, SensorT::packet_t::n_blocks>, SensorT::packet_t::max_returns> nebula::drivers::HesaiDecoder< SensorT >::block_firing_offset_ns_;
variable channel_firing_offset_ns_
For each channel, its firing offset relative to the block in nanoseconds.
std::array<int, SensorT::packet_t::n_channels> nebula::drivers::HesaiDecoder< SensorT >::channel_firing_offset_ns_;
variable decode_pc_
The point cloud new points get added to.
NebulaPointCloudPtr nebula::drivers::HesaiDecoder< SensorT >::decode_pc_;
variable decode_scan_timestamp_ns_
The timestamp of the scan currently in progress.
uint64_t nebula::drivers::HesaiDecoder< SensorT >::decode_scan_timestamp_ns_;
variable has_scanned_
Whether a full scan has been processed.
bool nebula::drivers::HesaiDecoder< SensorT >::has_scanned_;
variable last_azimuth_
uint32_t nebula::drivers::HesaiDecoder< SensorT >::last_azimuth_;
variable logger_
rclcpp::Logger nebula::drivers::HesaiDecoder< SensorT >::logger_;
variable output_pc_
The point cloud that is returned when a scan is complete.
NebulaPointCloudPtr nebula::drivers::HesaiDecoder< SensorT >::output_pc_;
variable output_scan_timestamp_ns_
The timestamp of the last completed scan in nanoseconds.
uint64_t nebula::drivers::HesaiDecoder< SensorT >::output_scan_timestamp_ns_;
variable packet_
The last decoded packet.
SensorT::packet_t nebula::drivers::HesaiDecoder< SensorT >::packet_;
variable scan_cut_angles_
ScanCutAngles nebula::drivers::HesaiDecoder< SensorT >::scan_cut_angles_;
variable sensor_
The sensor definition, used for return mode and time offset handling.
SensorT nebula::drivers::HesaiDecoder< SensorT >::sensor_;
variable sensor_configuration_
Configuration for this decoder.
const std::shared_ptr<const drivers::HesaiSensorConfiguration> nebula::drivers::HesaiDecoder< SensorT >::sensor_configuration_;
Protected Functions Documentation
function convert_returns
Converts a group of returns (i.e. 1 for single return, 2 for dual return, etc.) to points and appends them to the point cloud.
inline void nebula::drivers::HesaiDecoder::convert_returns (
size_t start_block_id,
size_t n_blocks
)
Parameters:
start_block_id
The first block in the group of returnsn_blocks
The number of returns in the group (has to align with then_returns
field in the packet footer)
function get_distance
Get the distance of the given unit in meters.
inline float nebula::drivers::HesaiDecoder::get_distance (
const typename SensorT::packet_t::body_t::block_t::unit_t & unit
)
function get_point_time_relative
Get timestamp of point in nanoseconds, relative to scan timestamp. Includes firing time offset correction for channel and block.
inline uint32_t nebula::drivers::HesaiDecoder::get_point_time_relative (
uint64_t scan_timestamp_ns,
uint64_t packet_timestamp_ns,
size_t block_id,
size_t channel_id
)
Parameters:
scan_timestamp_ns
Start timestamp of the current scan in nanosecondspacket_timestamp_ns
The timestamp of the current PandarPacket in nanosecondsblock_id
The block index of the pointchannel_id
The channel index of the point
function parse_packet
Validates and parse PandarPacket. Currently only checks size, not checksums etc.
inline bool nebula::drivers::HesaiDecoder::parse_packet (
const std::vector< uint8_t > & packet
)
Parameters:
packet
The incoming PandarPacket
Returns:
Whether the packet was parsed successfully
The documentation for this class was generated from the following file nebula_decoders/include/nebula_decoders/nebula_decoders_hesai/decoders/hesai_decoder.hpp