#keywords laser, lasers, laser scanner <> <> == Overview == The `laser_pipeline` stack is intended to do the necessary processing to get from the output of a scanning laser rangefinder to a more useful 3D representation of a point cloud. This processing takes three distinct steps: * '''Filtering:''' The raw measurements coming directly out of the laser scanners are often times noisy, or contain invalid measurements. We usually want to provide some amount of smoothing, remove spurious readings due to mixed-pixel or edge responses, or subtract points known to be inside the footprint of the robot. This filtering is done by the assorted filters in the [[laser_filters]] package. * '''Projection:''' Once the appropriate filtering has been done, we want to transform the measurements from a set of ranges and angles, into a set of 3D Cartesian points. Functions to do this transformation efficiently, while accounting for effects such as skew of a tilting laser, are defined in the [[laser_geometry]] package. * '''Assembly:''' Finally, we often move the laser scanner through 3D space to generate a fully 3D (or at least 2.5D cloud). The [[laser_assembler]] package efficiently aggregates scans over time and makes such clouds available to other nodes through a ROS service call. For an end-user higher up the system, the [[laser_assembler]] is actually capable of performing all 3 of these steps, implementing an arbitrary filter chain on its input, performing a high-fidelity transformation to a point cloud internally, and then making clouds available via a [[Services | ROS service call]]. Lower-level users with specific needs, however, may want to write their own special-purpose filters, or custom laser processing nodes. == Point Clouds == Point clouds generated using the laser pipeline results in a <> or (<>) <> message. This point cloud can have the following channels attached to it: * `"intensities"` - Intensity of the return for each point * `"index"` - The index from the original array for each point * `"distances"` - The distance from the laser to each point * `"stamps"` - The specific timestamp at which each point was measured. This is represented as an offset (in seconds) from the timestamp of the point cloud <> * `"vp_x","vp_y","vp_z" - Point in the cloud from which the point was observed. == Hardware Requirements == The `laser_pipeline` assumes that you have a scanning laser rangefinger. The most common examples of these are the Hokuyo UTM and the Sick LMS. The [[laser_drivers]] stack provides drivers for these particular models. However, any driver which outputs the <>, including [[gazebo]], can be used as the input to this pipeline. == Report a Bug == <> {{attachment:rviz_laser_sm.png}} RViz screenshot of laser_scan messages from a tilting laser rangefinder data being projected into 3D. ## AUTOGENERATED DON'T DELETE ## CategoryStack ## CategoryStackROSPKG ## laser_pipeline, laser_pipeline, laser_pipeline, laser_pipeline, laser_pipeline, laser_pipeline, laser_pipeline, laser_pipeline,