• Diff for "laser_assembler"
Differences between revisions 32 and 37 (spanning 5 versions)
Revision 32 as of 2009-09-25 04:09:03
Size: 4658
Editor: JeremyLeibs
Comment:
Revision 37 as of 2009-09-28 18:39:49
Size: 4574
Comment:
Deletions are marked like this. Additions are marked like this.
Line 39: Line 39:
 * '''~fixed_frame''' (string) - '''[Required]''' Stationary frame to convert the scans (or clouds) to on reception.
 * '''~tf_cache_time_secs''' (double) - The cache time (seconds) to hold past transforms. Defaults to 10 seconds.
 * '''~fixed_frame''' (string) - '''[Required]''' Stationary frame into which received scans (or clouds) are transformed.
 * '''~tf_cache_time_secs''' (double) - The cache time (seconds) to store past transforms. Defaults to 10 seconds.
Line 48: Line 48:
The laser_scan_assembler and point_cloud_assembler both provide the ''build_cloud'' service. When an assembler receives a ''build_cloud'' request, it searches it's rolling buffer for clouds that occur in the requested interval. These clouds are then assembled into a larger a cloud and sent to to the caller in the service response. The laser_scan_assembler and point_cloud_assembler both provide the ''build_cloud'' service. When an assembler receives a ''build_cloud'' request, it searches its rolling buffer for clouds that occur in the requested interval. These clouds are then assembled into a larger a cloud and sent to to the caller in the service response.
Line 50: Line 50:
Note that this is a non-blocking operation. Thus, if the assembler has not yet received any scans (or clouds) in requested interval, it will simply return an empty cloud.  It will not wait until it has received all scans (or clouds) in the requested interval. Note that this is a non-blocking operation. Thus, if the assembler has not yet received any scans (or clouds) in requested interval, it will simply return an empty cloud.

  Show EOL distros: 

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages

laser_pipeline: laser_assembler | laser_filters | laser_geometry

Package Summary

Provides nodes to assemble point clouds from either LaserScan or PointCloud messages


Overview

Laser Rangefinder sensors (such as Hokuyo's UTM-30LX) generally output a stream of scans, where each scan is a set of range readings of detected objects (in polar coordinates) in the plane of the sensor.

Many robotic systems, like PR2's tilting laser platform, articulate a laser rangefinder in order to get a 3D view of the world. The laser_assembler package provides nodes that listen to streams of scans and then assemble them into a larger 3D Cartesian coordinate (XYZ) point cloud.

Users interface with the laser_assembler package via two ROS nodes:

  • laser_scan_assembler: Assembles a stream of LaserScan messages into point clouds

  • point_cloud_assembler: Sometimes due to some pre-processing, laser scans have already been converted into cartesian coordinates as PointCloud messages. This node assembles a stream of these PointCloud messages into larger point clouds


Data Flow

The general data flow can be descibed as follows:

laser_scan_assembler.png

The laser_scan_assembler subscribes to LaserScan messages on the scan topic. These scans are processed by the projecter and transformer, which project the scan into Cartesian space and then transform it into the fixed_frame. This results in a PointCloud that can be added to the rolling buffer. Clouds in the rolling buffer are then assembled on service calls.

Note that the Transformer automatically receives tf data without any user intervention.

point_cloud_assembler.png

The point_cloud_assembler looks very similar to the laser_scan_assembler, except that the projection step is skipped, since the input clouds are already in Cartesian coordinates.


ROS Interface

Parameters:

The PointCloudAssembler and LaserScanAssembler have fairly similar parameters

Both

  • ~fixed_frame (string) - [Required] Stationary frame into which received scans (or clouds) are transformed.

  • ~tf_cache_time_secs (double) - The cache time (seconds) to store past transforms. Defaults to 10 seconds.

point_cloud_assembler

  • ~max_clouds (int) - The number of point clouds to store in the assembler's rolling buffer

laser_scan_assembler

  • ~max_scans (int) - The number of scans to store in the assembler's rolling buffer

  • ~ignore_laser_skew (bool) - Defaults to true. If true, pretend that all hits in a single scan correspond to the same tf transforms. If false, individually transform each hit to the fixed_frame (this is a fairly cpu intensive operation).

Services:

The laser_scan_assembler and point_cloud_assembler both provide the build_cloud service. When an assembler receives a build_cloud request, it searches its rolling buffer for clouds that occur in the requested interval. These clouds are then assembled into a larger a cloud and sent to to the caller in the service response.

Note that this is a non-blocking operation. Thus, if the assembler has not yet received any scans (or clouds) in requested interval, it will simply return an empty cloud.

  • build_cloud (laser_assembler/AssembleScans)

    • request: The time interval on which we want to aggregate scans

      • begin - The start of the interval on which we want to assemble scans clouds
      • end - The end of the interval on which we want to assemble scans or clouds
    • response: Assembled cloud for the requested interval

      • cloud - The point cloud holding the assembled clouds or scans. This cloud is in the frame specified by the ~fixed_frame parameter.

Subscribed Topics:

laser_scan_assembler

  • scan (sensor_msgs/LaserScan) - Topic on which to receive a stream of LaserScan messages.

point_cloud_assembler

  • cloud (sensor_msgs/PointCloud) - Topic on which to receive a stream of PointCloud messages.


Tutorials

The Introduction To Working With Laser Scanner Data tutorial provides an example of using the laser_assembler package


Deprecated API

As of laser_pipeline 0.4.0. A large part of the laser_assembler's ROS API was deprecated. The API reference for the deprecated API is available on the laser_assembler-0.3.0 page.

Wiki: laser_assembler (last edited 2013-09-12 21:03:30 by DanLazewatsky)