Current section
Files
Jump to
Current section
Files
lib/bb/message/sensor/laser_scan.ex
# SPDX-FileCopyrightText: 2025 James Harton## SPDX-License-Identifier: Apache-2.0defmodule BB.Message.Sensor.LaserScan do @moduledoc """ Single scan from a planar laser range-finder. ## Fields - `angle_min` - Start angle of scan in radians - `angle_max` - End angle of scan in radians - `angle_increment` - Angular distance between measurements in radians - `time_increment` - Time between measurements in seconds - `scan_time` - Time between scans in seconds - `range_min` - Minimum range value in metres - `range_max` - Maximum range value in metres - `ranges` - Range data in metres (values < range_min or > range_max are invalid) - `intensities` - Intensity data (device-specific units, optional) ## Examples alias BB.Message.Sensor.LaserScan {:ok, msg} = LaserScan.new(:laser_frame, angle_min: -1.57, angle_max: 1.57, angle_increment: 0.01, time_increment: 0.0001, scan_time: 0.1, range_min: 0.1, range_max: 10.0, ranges: [1.0, 1.1, 1.2, 1.3] ) """ defstruct [ :angle_min, :angle_max, :angle_increment, :time_increment, :scan_time, :range_min, :range_max, :ranges, :intensities ] use BB.Message, schema: [ angle_min: [type: :float, required: true, doc: "Start angle in radians"], angle_max: [type: :float, required: true, doc: "End angle in radians"], angle_increment: [ type: :float, required: true, doc: "Angular distance between measurements in radians" ], time_increment: [ type: :float, required: true, doc: "Time between measurements in seconds" ], scan_time: [type: :float, required: true, doc: "Time between scans in seconds"], range_min: [type: :float, required: true, doc: "Minimum range in metres"], range_max: [type: :float, required: true, doc: "Maximum range in metres"], ranges: [type: {:list, :float}, required: true, doc: "Range data in metres"], intensities: [type: {:list, :float}, default: [], doc: "Intensity data (optional)"] ] @type t :: %__MODULE__{ angle_min: float(), angle_max: float(), angle_increment: float(), time_increment: float(), scan_time: float(), range_min: float(), range_max: float(), ranges: [float()], intensities: [float()] }end