The package laserscan_kinect converts depth image to laser scan (sensor_msgs/LaserScan). It allows to use RGB-D sensor (for example Microsoft Kinect) for navigation purposes. Package laserscan_kinect finds the smallest value of distance in each column of the depth image and converts it to polar coordinates.

Moreover, the package provides features like a ground removing from the scan and a sensor tilt compensation in distance values, but it is necessary to know a height of sensor optical center and a tilt angle in the frame of ground.


laserscan_kinect_detection.jpg The picture shows a comparison between the laser scan based on converted depth image from Microsoft Kinect (blue points) and a laser scan from the scanner Hokuyo URG-04LX-UG01 (black points). Moreover, the picture contains the RBG image and the depth image.


During the tuning process additional debug image can be used. It contains lines that represent the lower and upper bounds of the detection area. Also, closest points in each image column are visible. laserscan_kinect_dbg.png


The file /config/params.yaml contains example parameters values. To start the node laserscan_kinect it can be used a following file /launch/laserscan.launch .



Subscribed Topics

image (sensor_msgs/Image)
  • Depth image which will be converted to laserscan.
camera_info (sensor_msgs/CameraInfo)
  • Additional information about the depth sensor.

Published Topics

/scan (sensor_msgs/LaserScan)
  • Converted depthimage. It contains information about the robot surrounding in a planar scan.
/debug_image (sensor_msgs/Image)
  • Debug image used during the tuning process.


~output_frame_id (str, default: camera_depth_frame)
  • Frame id for the output laserscan message.
~range_min (double, default: 0.5)
  • Minimum sensor range (in meters). Pixels in the depth image with values smaller than this parameter are ignored during the processing.
~range_max (double, default: 5.0)
  • Maximum sensor range (in meters). Pixels in the depth image with values greater than this parameter are ignored during the processing.
~depth_img_row_step (int, default: 2)
  • Row step in the depth image processing. By increasing this parameter the computational complexity of the algorithm is decreased but some of data are losted.
~scan_height (int, default: 440)
  • Height of used part of the depth image (in pixels).
~cam_model_update (bool, default: false)
  • Determines if continuously camera model data update is necessary. If it's true, then camera model (sensor_msgs/CameraInfo) from topic camera_info is updated with each new depth image message. Otherwise, the camera model and parameters associated with it are updated only at the beginning of the node or when the node parameter is changed by dynamic_reconfigure.
~ground_remove_en (bool, default: false)
  • Determines if a ground removal from the output scan feature is enabled. The ground removal method to work needs correctly defined values of parameters like a sensor_tilt_angle and sensor_mount_height.
~sensor_mount_height (double, default: 0.4)
  • Height of the depth sensor optical center mount (in meters). Parameter is necessary for the ground removal feature. It should be measured from the ground to the optical center of the depth sensor.
~sensor_tilt_angle (double, default: 0.0)
  • Depth sensor tilt angle (in degrees). If the sensor is leaning towards the ground the tilt angle should be positive. Otherwise, the value of the angle should be negative.
~ground_margin (double, default: 0.05)
  • Margin in the ground removal feature (in meters).
~tilt_compensation_en (bool, default: false)
  • Parameter determines if sensor tilt angle compensation is enabled.
~publish_dbg_info (bool, default: true)
  • Publish a debug image that can be used during the parameters tuning process.

Report a Bug

Use GitHub to report bugs or submit feature requests. [View active issues]

Wiki: laserscan_kinect (last edited 2021-02-08 21:41:24 by MichalDrwiega)