/// <summary> /// Crea un objeto de lectura de datos (LMSAPI_DATA) con datos simulados, sin /// necesidad de conexión con el sensor. /// POST: laser_data != null. /// </summary> /// <returns></returns> public bool simulate_laser_data() { laser_data = LMSAPI_LIB.create_simulation_laser_data(angular_range, angular_resolution, distance_range, 0, scale_distance); if (laser_data == null) { System.Windows.Forms.MessageBox.Show("Error al solicitar datos de mediciòn"); return false; } return true; }
/// <summary> /// Función para iniciar un barrido de mediciones. /// </summary> /// <param name="laser_buffer">Objeto de lectura de datos</param> public void begin_capturing(LMSAPI_DATA laser_buffer) { // create buffer m_vertex_count = m_vertical_sampler_count * laser_buffer.get_distance_count(); m_laser_distances = new float[m_vertex_count]; m_buffer_index = 0; capture_data(laser_buffer); }
/// <summary> /// Utiliza el miembro m_scale_distance para la distancia, y crea un objeto de datos del laser (LMSAPI_DATA) si la medición tuvo exito /// </summary> /// <returns>Un objeto LMSAPI_DATA con los datos de medición, o null si hubo un error</returns> public LMSAPI_DATA request_measurement() { IntPtr laserdata = LMSAPI_LIB.lmsapi_laser_data_create(); if (laserdata == IntPtr.Zero) return null;// ?? fallo de memoria if (LMSAPI_LIB.lmsapi_request_measurement(m_handle, laserdata, m_scale_distance) == 0) { //operación exitosa LMSAPI_DATA newdata = new LMSAPI_DATA(laserdata); return newdata; } LMSAPI_LIB.lmsapi_laser_data_destroy(laserdata); return null; }
/// <summary> /// Obtiene datos del sensor en el objeto de lectura laser_data. Si no hay conexión /// entonces obtiene datos simulados. /// </summary> /// <returns></returns> public bool request_laser_data() { if (laser_connection == null) { return simulate_laser_data(); } laser_connection.m_scale_distance = scale_distance;//distancias en metros laser_data = laser_connection.request_measurement(); if (laser_data == null) { System.Windows.Forms.MessageBox.Show("Error al solicitar datos de mediciòn"); return false; } return true; }
/// <summary> /// Utiliza el miembro m_scale_distance para la distancia, y crea un objeto de datos del laser (LMSAPI_DATA) si la medición tuvo exito /// </summary> /// <returns>Un objeto LMSAPI_DATA con los datos de medición, o null si hubo un error</returns> public LMSAPI_DATA request_measurement() { IntPtr laserdata = LMSAPI_LIB.lmsapi_laser_data_create(); if (laserdata == IntPtr.Zero) { return(null); // ?? fallo de memoria } if (LMSAPI_LIB.lmsapi_request_measurement(m_handle, laserdata, m_scale_distance) == 0) { //operación exitosa LMSAPI_DATA newdata = new LMSAPI_DATA(laserdata); return(newdata); } LMSAPI_LIB.lmsapi_laser_data_destroy(laserdata); return(null); }
/// <summary> /// Obtiene un objeto LMSAPI_DATA (datos de medición) con datos simulados en memoria. /// </summary> /// <param name="distance_range">Rango de distancias en Metros. Una de las constantes de distancias: 8, 80 o 150 metros respectivamente.</param> /// <param name="handle_intensity">Booleano con el cual se habilita la medición de distancias.</param> /// <param name="resolution">Resolución angular, uno de los siguientes valores: 25, 50, 100 (Cada valor es un porcentaje de grado, 1/100).</param> /// <param name="width">Rango angular del barrido. Los valores válidos son: 100 y 180 grados de circunferencia.</param> /// <param name="scale_distance">scale_distance Escala para las distancias. Configure la escala de la siguiente manera: 1.0f : Milimetros; 10.0f : Centímetros; 100.0f : Decimetros, 1000.0f : Metros</param> /// <returns>Un objeto LMSAPI_DATA con los datos de medición, o null si hubo un error.</returns> public static LMSAPI_DATA create_simulation_laser_data( int width, int resolution, int distance_range, int handle_intensity, float scale_distance) { IntPtr laserdata = lmsapi_laser_data_create(); if (laserdata == IntPtr.Zero) { return(null); // ?? fallo de memoria } lmsapi_laser_data_simulate_values(laserdata, width, resolution, distance_range, handle_intensity, scale_distance); LMSAPI_DATA newdata = new LMSAPI_DATA(laserdata); return(newdata); }
public void request_laser_data() { int port = cbPuerto.SelectedIndex + 1; angular_range = 100; if (cbRangoAngular.SelectedIndex == 1) angular_range = 180; angular_resolution = 100; if (cbResAngular.SelectedIndex == 1) angular_resolution = 50; else if (cbResAngular.SelectedIndex == 2) angular_resolution = 25; distance_range = 8; if (cbRangoDistancia.SelectedIndex == 1) distance_range = 80; //obtenemos los datos de medición simulados // Conectarnos con el sensor LMSAPI_CONNECTION connection = LMSAPI_LIB.create_connection_object(port, angular_range, angular_resolution, distance_range, 0); if (connection == null) { System.Windows.Forms.MessageBox.Show("Error!!:Configuraciòn erronea del sensor, no puede establecerse conexiòn."); return; } connection.m_scale_distance = scale_distance;//distancias en metros laser_data = connection.request_measurement(); if (laser_data == null) { System.Windows.Forms.MessageBox.Show("Error al solicitar datos de mediciòn"); return; } //cerrar la conexion connection = null; }
/// <summary> /// Llamese despues de llamar begin_capturing() /// </summary> /// <param name="laser_buffer">Objeto de lectura de datos</param> /// <returns>false si se ha completado el número de capturas</returns> public bool capture_data(LMSAPI_DATA laser_buffer) { m_current_laser_buffer = laser_buffer; if (m_buffer_index >= m_vertical_sampler_count) return false; //end of measurement uint sample_count = m_current_laser_buffer.get_distance_count(); for (int i = 0; i < sample_count; i++) { m_laser_distances[m_buffer_index * sample_count+i] = m_current_laser_buffer.get_distance(i); } m_buffer_index++; return true; }
/// <summary> /// Obtiene un objeto LMSAPI_DATA (datos de medición) con datos simulados en memoria. /// </summary> /// <param name="distance_range">Rango de distancias en Metros. Una de las constantes de distancias: 8, 80 o 150 metros respectivamente.</param> /// <param name="handle_intensity">Booleano con el cual se habilita la medición de distancias.</param> /// <param name="resolution">Resolución angular, uno de los siguientes valores: 25, 50, 100 (Cada valor es un porcentaje de grado, 1/100).</param> /// <param name="width">Rango angular del barrido. Los valores válidos son: 100 y 180 grados de circunferencia.</param> /// <param name="scale_distance">scale_distance Escala para las distancias. Configure la escala de la siguiente manera: 1.0f : Milimetros; 10.0f : Centímetros; 100.0f : Decimetros, 1000.0f : Metros</param> /// <returns>Un objeto LMSAPI_DATA con los datos de medición, o null si hubo un error.</returns> public static LMSAPI_DATA create_simulation_laser_data( int width, int resolution, int distance_range, int handle_intensity, float scale_distance) { IntPtr laserdata = lmsapi_laser_data_create(); if (laserdata == IntPtr.Zero) return null;// ?? fallo de memoria lmsapi_laser_data_simulate_values(laserdata, width, resolution, distance_range, handle_intensity, scale_distance); LMSAPI_DATA newdata = new LMSAPI_DATA(laserdata); return newdata; }