{"id":13717597,"url":"https://github.com/kam3k/laser_line_extraction","last_synced_at":"2025-05-07T07:31:47.525Z","repository":{"id":41280970,"uuid":"49603196","full_name":"kam3k/laser_line_extraction","owner":"kam3k","description":"A ROS package that extracts line segments from LaserScan messages.","archived":false,"fork":false,"pushed_at":"2022-08-15T01:14:00.000Z","size":692,"stargazers_count":399,"open_issues_count":11,"forks_count":200,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-08-04T00:13:45.429Z","etag":null,"topics":["laserscan","line-extraction","lines","ros"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kam3k.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-13T21:31:30.000Z","updated_at":"2024-07-29T12:30:11.000Z","dependencies_parsed_at":"2022-07-14T11:30:47.044Z","dependency_job_id":null,"html_url":"https://github.com/kam3k/laser_line_extraction","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kam3k%2Flaser_line_extraction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kam3k%2Flaser_line_extraction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kam3k%2Flaser_line_extraction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kam3k%2Flaser_line_extraction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kam3k","download_url":"https://codeload.github.com/kam3k/laser_line_extraction/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224573505,"owners_count":17333804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["laserscan","line-extraction","lines","ros"],"created_at":"2024-08-03T00:01:24.543Z","updated_at":"2024-11-14T05:32:11.713Z","avatar_url":"https://github.com/kam3k.png","language":"C++","funding_links":[],"categories":["Sensor Processing","Datasets"],"sub_categories":["Lidar and Point Cloud Processing"],"readme":"# Laser Line Extraction\nLaser Line Extraction is a [Robot Operating System (ROS)](http://www.ros.org) package that extracts line segments form [LaserScan](http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html) messages. Created by [Marc Gallant](http://marcgallant.ca), originally for use in the [Mining Systems Laboratory](http://msl.engineering.queensu.ca). Here is what the Laser Line Extraction package looks like in action:\n\n![Laser line extraction](images/line_extraction.gif)\n\nIn the above image, the white dots are points in a LaserScan message, and the red lines are what is extracted by Laser Line Extraction. This data was collected by driving a robot through Beamish-Munro Hall at Queen's University. A SICK LMS111 laser scanner was mounted to the robot. The extraction algorithm is very configurable; the above image used the parameters configured in the `example.launch` launch file.\n\nAfter applying some filters to remove outlying points, Laser Line Extraction implements a split-and-merge algorithm to determine which points belong to lines. Next, it implements the weighted line fitting algorithm by Pfister *et al.* [1] to find the best fit lines and their respective covariance matrices.\n\n## Usage\nI recommend making a copy of `example.launch` in the launch directory and configuring the parameters until you reach a desirable outcome. The parameters in `example.launch` are a good starting point. Then simply use roslaunch, e.g.,\n\n```\nroslaunch laser_line_extraction example.launch\n```\n\n## Messages\nLaser Line Extraction has two messages types:\n\n#### LineSegment.msg\n```\nfloat32 radius\nfloat32 angle\nfloat32[4] covariance\nfloat32[2] start\nfloat32[2] end\n```\n`radius` (m) and `angle` (rad) are the polar parameterization of the line segment. `covariance` is the 2x2 covariance matrix of `radius` and `angle` (listed in row-major order). Finally `start` and `end` are the (x, y) coordinates of the start and end of the line segment.\n\n#### LineSegmentList.msg\n```\nHeader header\nLineSegment[] line_segments\n```\nAn array of LineSegment.msg with a header.\n\n## Topics\n\nLaser Line Extraction subscribes to a single topic and publishes one or two topics.\n\n### Subscribed topics\n- `/scan` ([sensor_msgs/LaserScan](http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html))\n\t- The name of this topic can be configured (see Parameters).\n\n### Published topics\n- `/line_segments` (laser\\_line\\_extraction/LineSegmentList)\n\t- A list of line segments extracted from a laser scan.\n- `/line_markers` ([visualization_msgs/Marker](http://docs.ros.org/api/visualization_msgs/html/msg/Marker.html))\n\t- (optional) Markers so that the extracted lines can be visualized in rviz (see above image). Can be toggled (see Parameters).\n\n## Parameters\nThe parameters are listed in alphabetical order.\n\n- `bearing_std_dev` (default: 0.001)\n\t- The standard deviation of bearing uncertainty in the laser scans (rad).\n- `frame_id` (default: \"laser\")\n\t- The frame in which the line segments are published.\n- `least_sq_angle_thresh` (default: 0.0001)\n\t- Change in angle (rad) threshold to stop iterating least squares (`least_sq_radius_thresh` must also be met).\n- `least_sq_radius_thresh` (default: 0.0001)\n\t- Change in radius (m) threshold to stop iterating least squares (`least_sq_angle_thresh` must also be met).\n- `max_line_gap` (default: 0.4)\n\t- The maximum distance between two points in the same line (m).\n- `min_line_length` (default: 0.5)\n\t- Lines shorter than this are not published (m).\n- `min_line_points` (default: 9)\n\t- Lines with fewer points than this are not published.\n- `min_range` (default: 0.4)\n\t- Points closer than this are ignored (m).\n- `max_range` (default: 10000.0)\n\t- Points farther than this are ignored (m).\n- `min_split_dist` (default: 0.05)\n\t- When performing \"split\" step of split and merge, a split between two points results when the two points are at least this far apart (m).\n- `outlier_dist` (default: 0.05)\n\t- Points who are at least this distance from all their neighbours are considered outliers (m).\n- `publish_markers` (default: false)\n\t- Whether or not markers are published.\n- `range_std_dev` (default: 0.02)\n\t- The standard deviation of range uncertainty in the laser scans (m).\n- `scan_topic` (default: \"scan\")\n\t- The LaserScan topic.\n\n## References\n[1] S. T. Pfister, S. I. Roumeliotis, and J. W. Burdick, \"Weighted line fitting algorithms for mobile robot map building and efficient data representation\" in Proc. IEEE Intl. Conf. on Robotics and Automation (ICRA), Taipei, Taiwan, 14-19 Sept., 2003. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkam3k%2Flaser_line_extraction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkam3k%2Flaser_line_extraction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkam3k%2Flaser_line_extraction/lists"}