Ask Your Question

Revision history [back]

You are correct: AFAIK, hector slam and gmapping don't do any motion compensation and simply assume that the robot's motion is negligible relative to the speed of the laser scanner. Not a direct answer to your question, but related: There's a package called laser_assembler that takes single laser scans (e.g., from a 2D laser on a rotating unit) and builds a 3D point cloud from it. It has a parameter called ignore_laser_skew. When this param is set to false, laser_assembler does exactly the kind of motion compensation you're talking about.

You are correct: AFAIK, hector slam and gmapping don't do any motion compensation and simply assume that the robot's motion is negligible relative to the speed of the laser scanner. In other words, if you have a very slow laser scanner like the RPLidar, your robot must also move very slowly during the mapping process. Not a direct answer to your question, but related: There's a package called laser_assembler that takes single laser scans (e.g., from a 2D laser on a rotating unit) and builds a 3D point cloud from it. It has a parameter called ignore_laser_skew. When this param is set to false, laser_assembler does exactly the kind of motion compensation you're talking about.

You are correct: AFAIK, hector slam and gmapping don't do any motion compensation and simply assume that the robot's motion is negligible relative to the speed of the laser scanner. In other words, if you have a very slow laser scanner like the RPLidar, your robot must also move very slowly during the mapping process. Not a direct answer to your question, but related: There's a package called laser_assembler that takes single laser scans (e.g., from a 2D laser on a rotating unit) and builds a 3D point cloud from it. It has a parameter called ignore_laser_skew. When this param is set to false, laser_assembler does exactly the kind of motion compensation you're talking about.

Also note that a "motion compensated laser scan" (i.e., where all hits are individually transformed into 3D points based on the motion of the robot) cannot be represented by a sensor_msgs/LaserScan message, but have to be represented as sensor_msgs/PointCloud2.