Class CHokuyoURG

Nested Relationships

Nested Types

Inheritance Relationships

Base Type

Class Documentation

class CHokuyoURG : public mrpt::hwdrivers::C2DRangeFinderAbstract

This software driver implements the protocol SCIP-2.0 for interfacing HOKUYO URG/UTM/UXM/UST laser scanners (USB or Ethernet). Refer to the example code HOKUYO_laser_test and to example rawlog-grabber config files

See also the application “rawlog-grabber” for a ready-to-use application to gather data from the scanner.

 PARAMETERS IN THE ".INI"-LIKE CONFIGURATION STRINGS:
-------------------------------------------------------
  [supplied_section_name]
   HOKUYO_motorSpeed_rpm=600
   #HOKUYO_HS_mode   = false    // Optional (un-comment line if used):
Set/unset the High-sensitivity mode (not on all models/firmwares!)

   # Uncomment serial port or IP address, depending on the Hokuyo model
(serial/USB vs. Ethernet):
   COM_port_WIN = COM3       // Serial port name in Windows
   COM_port_LIN = ttyS0      // Serial port name in GNU/Linux
   #IP_DIR  =   192.168.0.10 // Uncommented this and "PORT_DIR" if the
used HOKUYO is connected by Ethernet instead of USB
   #PORT_DIR = 10940         // Default value: 10940

   pose_x=0.21  // Laser range scaner 3D position in the robot (meters)
   pose_y=0
   pose_z=0.34
   pose_yaw=0   // Angles in degrees
   pose_pitch=0
   pose_roll=0

   #disable_firmware_timestamp = true   // Uncomment to use PC time instead
of laser time

   # Optional: reduced FOV:
   # reduced_fov  = 25 // Deg

   # Sets decimation of scans directly at the Hokuyo scanner.
   # 0=means send all scans, 1=means send 50% of scans, etc.
   # scan_interval = 0

   # Overrides communication timeout [milliseconds]
   # comms_timeout_ms = 100

   #preview = true // Enable GUI visualization of captured data

   # Optional: Exclusion zones to avoid the robot seeing itself:
   #exclusionZone1_x = 0.20 0.30 0.30 0.20
   #exclusionZone1_y = 0.20 0.30 0.30 0.20

   # Optional: Exclusion zones to avoid the robot seeing itself:
   #exclusionAngles1_ini = 20  // Deg
   #exclusionAngles1_end = 25  // Deg

Public Functions

CHokuyoURG()

Constructor

~CHokuyoURG() override

Destructor: turns the laser off

virtual void doProcessSimple(bool &outThereIsObservation, mrpt::obs::CObservation2DRangeScan &outObservation, bool &hardwareError) override

Specific laser scanner “software drivers” must process here new data from the I/O stream, and, if a whole scan has arrived, return it. This method will be typically called in a different thread than other methods, and will be called in a timely fashion.

virtual bool turnOn() override

Enables the scanning mode (which may depend on the specific laser device); this must be called before asking for observations to assure that the protocol has been initializated.

Returns:

If everything works “true”, or “false” if there is any error.

virtual bool turnOff() override

Disables the scanning mode (this can be used to turn the device in low energy mode, if available)

Returns:

If everything works “true”, or “false” if there is any error.

void purgeBuffers()

Empties the RX buffers of the serial port

inline void setSerialPort(const std::string &port_name)

If set to non-empty, the serial port will be attempted to be opened automatically when this class is first used to request data from the laser.

inline void setIPandPort(const std::string &ip, const unsigned int &port)

Set the ip direction and port to connect using Ethernet communication

inline const std::string getSerialPort()

Returns the currently set serial port

See also

setSerialPort

inline void setReducedFOV(const double fov)

If called (before calling “turnOn”), the field of view of the laser is reduced to the given range (in radians), discarding the rest of measures. Call with “0” to disable this reduction again (the default).

bool setHighSensitivityMode(bool enabled)

Changes the high sensitivity mode (HS) (default: false)

Returns:

false on any error

bool setIntensityMode(bool enabled)

If true scans will capture intensity. (default: false) Should not be called while scanning.

Returns:

false on any error

void setScanInterval(unsigned int skipScanCount)

Set the skip scan count (0 means send all scans). Must be set before initialize()

unsigned int getScanInterval() const
void sendCmd(const char *str)

Protected Functions

bool ensureStreamIsOpen()

Returns true if there is a valid stream bound to the laser scanner, otherwise it first try to open the serial port “m_com_port”

void closeStreamConnection()

Called upon dtor, or when trying to recover from a disconnected sensor

virtual void loadConfig_sensorSpecific(const mrpt::config::CConfigFileBase &configSource, const std::string &iniSection) override

See the class documentation at the top for expected parameters

Protected Attributes

std::string m_rcv_data

temp buffer for incoming data packets

char m_rcv_status0 = '\0'
char m_rcv_status1 = '\0'
double m_reduced_fov = {0}

Used to reduce artificially the interval of scan ranges.

std::string m_com_port = {}

If set to non-empty, the serial port will be attempted to be opened automatically when this class is first used to request data from the laser.

std::string m_ip_dir = {}

If set to non-empty and m_port_dir too, the program will try to connect to a Hokuyo using Ethernet communication

unsigned int m_port_dir = {10940}

If set to non-empty and m_ip_dir too, the program will try to connect to a Hokuyo using Ethernet communication

TSensorInfo m_sensor_info

The information gathered when the laser is first open

uint32_t m_timeStartUI = {0}

Time of the first data packet, for synchronization purposes.

int m_timeStartSynchDelay = {0}

Counter to discard to first few packets before setting the correspondence between device and computer timestamps.

mrpt::system::TTimeStamp m_timeStartTT
bool m_disable_firmware_timestamp = {false}
bool m_intensity = {false}

Get intensity from lidar scan (default: false)

unsigned int m_scan_interval = {0}
int m_comms_timeout_ms = 100
int m_comms_between_timeout_ms = 1
struct TSensorInfo

Used in CHokuyoURG::displayVersionInfo

Public Members

std::string model

The sensor model

double d_min = {0}

Min/Max ranges, in meters.

double d_max = {0}
int scans_per_360deg = {0}

Number of measuremens per 360 degrees.

int scan_first = {0}

First, last, and front step of the scanner angular span.

int scan_last = {0}
int scan_front = {0}
int motor_speed_rpm = {0}

Standard motor speed, rpm.