35 typedef unsigned char uint8_t;
36 typedef unsigned int uint32_t;
37 #if defined(HOKUYOAIST_STATIC)
38 #define HOKUYOAIST_EXPORT
39 #elif defined(hokuyoaist_EXPORTS)
40 #define HOKUYOAIST_EXPORT __declspec(dllexport)
42 #define HOKUYOAIST_EXPORT __declspec(dllimport)
46 #define HOKUYOAIST_EXPORT
134 Sensor(std::ostream& err_output);
138 void open(std::string port_options);
144 bool is_open()
const;
147 void set_power(
bool on);
175 void set_motor_speed(
unsigned int speed);
179 void set_high_sensitivity(
bool on);
185 unsigned long long get_time();
188 unsigned int get_raw_time();
218 long long calibrate_time(
unsigned int skew_sleep_time=0,
219 unsigned int samples=10);
225 void set_time_offset(
long long time_offset)
226 { time_offset_ = time_offset; }
244 void set_drift_rate(
float drift_rate)
245 { time_drift_rate_ = drift_rate; }
285 unsigned int get_ranges(
ScanData& data,
int start_step = -1,
286 int end_step = -1,
unsigned int cluster_count = 1);
302 unsigned int get_ranges_by_angle(
ScanData& data,
double start_angle,
303 double end_angle,
unsigned int cluster_count = 1);
327 unsigned int get_ranges_intensities(
ScanData& data,
328 int start_step = -1,
int end_step = -1,
329 unsigned int cluster_count = 1);
345 unsigned int get_ranges_intensities_by_angle(
ScanData& data,
346 double start_angle,
double end_angle,
347 unsigned int cluster_count = 1);
375 unsigned int get_new_ranges(
ScanData& data,
int start_step = -1,
376 int end_step = -1,
unsigned int cluster_count = 1);
392 unsigned int get_new_ranges_by_angle(
ScanData& data,
393 double start_angle,
double end_angle,
394 unsigned int cluster_count = 1);
421 unsigned int get_new_ranges_intensities(
ScanData& data,
422 int start_step = -1,
int end_step = -1,
423 unsigned int cluster_count = 1);
439 unsigned int get_new_ranges_intensities_by_angle(
ScanData& data,
440 double start_angle,
double end_angle,
441 unsigned int cluster_count = 1);
458 double step_to_angle(
unsigned int step);
461 unsigned int angle_to_step(
double angle);
464 flexiport::Port* port_;
465 std::ostream& err_output_;
467 uint8_t scip_version_;
469 bool verbose_, enable_checksum_workaround_,
472 double min_angle_, max_angle_, resolution_;
473 int first_step_, last_step_, front_step_;
474 unsigned int max_range_;
476 unsigned int time_resolution_;
479 long long time_offset_;
482 unsigned int last_timestamp_;
484 unsigned int wrap_count_;
486 float time_drift_rate_;
488 float time_skew_alpha_;
490 void clear_read_buffer();
491 int read_line(
char* buffer,
int expected_length=-1);
492 int read_line_with_check(
char* buffer,
int expected_length=-1,
493 bool has_semicolon=
false);
494 bool read_data_block(
char* buffer,
int& block_size);
495 void skip_lines(
int count);
496 int send_command(
char const* cmd,
char const* param,
int param_length,
497 char const* extra_ok);
499 void enter_timing_mode();
500 void leave_timing_mode();
502 unsigned int get_timing_mode_time(
unsigned long long* reception_time=0);
504 unsigned long long get_computer_time();
506 unsigned int wrap_timestamp(
unsigned int timestamp);
509 unsigned long long offset_timestamp(
unsigned int timestamp);
512 unsigned int step_to_time_offset(
int start_step);
514 void find_model(
char const* buffer);
515 void get_and_set_scip_version();
517 void process_vv_line(
char const* buffer,
SensorInfo& info);
518 void process_pp_line(
char const* buffer,
SensorInfo& info);
519 void process_ii_line(
char const* buffer,
SensorInfo& info);
521 uint32_t process_echo_buffer(
int const* buffer,
int num_echos);
522 void read_2_byte_range_data(
ScanData& data,
unsigned int num_steps);
523 void read_3_byte_range_data(
ScanData& data,
unsigned int num_steps);
524 void read_3_byte_range_and_intensity_data(
ScanData& data,
525 unsigned int num_steps);
527 int confirm_checksum(
char const* buffer,
int length,