10 #ifndef CVelodyneScanner_H
11 #define CVelodyneScanner_H
405 #if MRPT_WORD_SIZE == 64
419 const size_t expected_packet_size,
446 using namespace
mrpt::hwdrivers;
#define DEFINE_GENERIC_SENSOR(class_name)
This declaration must be inserted in all CGenericSensor classes definition, within the class declarat...
MRPT_FILL_ENUM_MEMBER(CVelodyneScanner, VLP16)
#define MRPT_ENUM_TYPE_END()
#define MRPT_ENUM_TYPE_BEGIN(_ENUM_TYPE_WITH_NS)
This class allows loading and storing values and vectors of different types from a configuration text...
A generic interface for a wide-variety of sensors designed to be used in the application RawLogGrabbe...
A C++ interface to Velodyne laser scanners (HDL-64, HDL-32, VLP-16), working on Linux and Windows.
bool getPCAPInputFileReadOnce() const
static mrpt::system::TTimeStamp internal_receive_UDP_packet(platform_socket_t hSocket, uint8_t *out_buffer, const size_t expected_packet_size, const std::string &filter_only_from_IP)
mrpt::obs::VelodyneCalibration m_velodyne_calib
Device calibration file (supplied by vendor in an XML file)
static short int VELODYNE_DATA_UDP_PORT
Default: 2368.
void setDeviceIP(const std::string &ip)
UDP packets from other IPs will be ignored.
bool setLidarOnOff(bool on)
Switches the LASER on/off (saves energy when not measuring) (via HTTP post interface).
void * m_pcap_dumper
opaque ptr: "pcap_dumper_t *"
void setPCAPVerbosity(const bool verbose)
Enables/disables PCAP info messages to console (default: true)
void setPCAPInputFile(const std::string &pcap_file)
Enables reading from a PCAP file instead of live UDP packet listening.
uint32_t platform_socket_t
Handles for the UDP sockets, or INVALID_SOCKET (-1)
mrpt::poses::CPose3D m_sensorPose
bool receivePackets(mrpt::system::TTimeStamp &data_pkt_timestamp, mrpt::obs::CObservationVelodyneScan::TVelodyneRawPacket &out_data_pkt, mrpt::system::TTimeStamp &pos_pkt_timestamp, mrpt::obs::CObservationVelodyneScan::TVelodynePositionPacket &out_pos_pkt)
Users normally would prefer calling getNextObservation() instead.
double getPosPacketsMinPeriod() const
void setPosPacketsTimingTimeout(double timeout)
Set how long to wait, after loss of GPS signal, to report timestamps as "not based on satellite time"...
virtual void initialize()
Tries to initialize the sensor driver, after setting all the parameters with a call to loadConfig.
const mrpt::obs::VelodyneCalibration & getCalibration() const
bool getNextObservation(mrpt::obs::CObservationVelodyneScan::Ptr &outScan, mrpt::obs::CObservationGPS::Ptr &outGPS)
Polls the UDP port for incoming data packets.
std::string m_pcap_output_file
Default: "" (do not dump to an offline file)
std::string m_device_ip
Default: "" (no IP-based filtering)
unsigned int m_pcap_read_count
number of pkts read from the file so far (for debugging)
platform_socket_t m_hPositionSock
return_type_t
LIDAR return type.
void doProcess()
This method will be invoked at a minimum rate of "process_rate" (Hz)
std::map< model_t, TModelProperties > model_properties_list_t
void * m_pcap_out
opaque ptr: "pcap_t*"
void * m_pcap
opaque ptr: "pcap_t*"
void setPCAPOutputFile(const std::string &out_pcap_file)
Enables dumping to a PCAP file in parallel to returning regular MRPT objects.
bool setLidarReturnType(return_type_t ret_type)
Changes among STRONGEST, LAST, DUAL return types (via HTTP post interface).
void loadConfig_sensorSpecific(const mrpt::config::CConfigFileBase &configSource, const std::string §ion)
See the class documentation at the top for expected parameters.
bool m_pcap_verbose
Default: true Output PCAP Info msgs.
double m_pcap_read_full_scan_delay_ms
(Default:100 ms) delay after each full scan read from a PCAP log
mrpt::obs::CObservationVelodyneScan::Ptr m_rx_scan
In progress RX scan.
const std::string & getPCAPOutputFile() const
virtual ~CVelodyneScanner()
void setFramePublishing(bool on)
Switches whole frame (points in a single revolution) on/off publication to data packet publication.
mrpt::system::TTimeStamp m_last_gps_rmc_age
model_t
LIDAR model types.
const std::string & getDeviceIP() const
bool setLidarRPM(int rpm)
Changes Lidar RPM (valid range: 300-600) (via HTTP post interface).
const std::string & getPCAPInputFile() const
double m_pcap_repeat_delay
Default: 0 (in seconds)
double m_pos_packets_min_period
Default: 0.5 seconds.
platform_socket_t m_hDataSock
double m_pos_packets_timing_timeout
Default: 30 seconds.
bool m_pcap_read_once
Default: false.
void close()
Close the UDP sockets set-up in initialize().
static short int VELODYNE_POSITION_UDP_PORT
Default: 8308.
mrpt::system::TTimeStamp m_last_pos_packet_timestamp
model_t getModelName() const
bool internal_send_http_post(const std::string &post_data)
bool m_return_frames
Default: true Output whole frames and not data packets
double getPosPacketsTimingTimeout() const
bool internal_read_PCAP_packet(mrpt::system::TTimeStamp &data_pkt_time, uint8_t *out_data_buffer, mrpt::system::TTimeStamp &pos_pkt_time, uint8_t *out_pos_buffer)
bool m_pcap_read_fast
(Default: false) If false, will use m_pcap_read_full_scan_delay_ms
void setModelName(const model_t model)
See supported model names in the general discussion docs for mrpt::hwdrivers::CVelodyneScanner.
void setPosPacketsMinPeriod(double period_seconds)
Set the minimum period between the generation of mrpt::obs::CObservationGPS observations from Velodyn...
std::string m_pcap_input_file
Default: "" (do not operate from an offline file)
bool loadCalibrationFile(const std::string &velodyne_xml_calib_file_path)
Returns false on error.
return_type_t m_lidar_return
mrpt::obs::gnss::Message_NMEA_RMC m_last_gps_rmc
void setPCAPInputFileReadOnce(bool read_once)
void * m_pcap_bpf_program
opaque ptr: bpf_program*
model_t m_model
Default: "VLP16".
void setCalibration(const mrpt::obs::VelodyneCalibration &calib)
std::shared_ptr< CObservationGPS > Ptr
std::shared_ptr< CObservationVelodyneScan > Ptr
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
GLsizei const GLchar ** string
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1,...
Contains classes for various device interfaces.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned __int32 uint32_t
unsigned __int64 uint64_t
Access to default sets of parameters for Velodyne LIDARs.
static const model_properties_list_t & get()
Singleton access.
static std::string getListKnownModels()
Return human-readable string: "`VLP16`,`XXX`,...".
Hard-wired properties of LIDARs depending on the model.
Payload of one POSITION packet.
One unit of data from the scanner (the payload of one UDP DATA packet)
Velodyne calibration data, for usage in mrpt::obs::CObservationVelodyneScan.