Robotics StackExchange | Archived questions

laser_assembler -> problems with ignore_laser_skew

Hi,

I have a tilting laser scanner and i am converting the scans to a point cloud with the laserassembler package. So far everything works fine except of the ignorelaser_skew.

If I deactivate the ignorelaserskew (set to false), each single point of a scan should be transformed with the tf from that exact time, right? So if the scanner is titling really fastly, I should get somewhat diagonal lines.

Unfortunately, I can't see any difference between ignorelaserskew=true and ignorelaserskew=false and so there are quite big errors in the point cloud, if the scanner is tilting fastly.

The tf is updated at 100 Hz, the scans are published at 5 Hz on the topic /tilt_scan. I'm using ros kinetic.

Below you can see the launch file for the laser_assembler and the python script to call the assemble scans service.

Any ideas would could be wrong? Or did i get the purpose of ignorelaserskew incorrectly? Thanks in advance!

Launch file:

<launch>
  <node type="laser_scan_assembler" pkg="laser_assembler" name="my_assembler">
    <remap from="scan" to="tilt_scan"/>
    <param name="max_scans" type="int" value="1" />
    <param name="tf_cache_time_secs" type="double" value="10" />
    <param name="fixed_frame" type="string" value="base_link" />
    <param name="ignore_laser_skew" type="bool" value="false" />
  </node>
</launch>

script:

#!/usr/bin/env python

import roslib; roslib.load_manifest('laser_assembler')
import rospy; from laser_assembler.srv import *
from sensor_msgs.msg import PointCloud

rospy.init_node("assemble_scan_client")
rate = rospy.Rate(0.5)

while not rospy.is_shutdown():

    rospy.wait_for_service("assemble_scans")

    try:
        assemble_scans = rospy.ServiceProxy('assemble_scans', AssembleScans)
        resp = assemble_scans(rospy.Time(0,0), rospy.get_rostime())
        print "Got cloud with %u points" % len(resp.cloud.points)

        pub=rospy.Publisher('laser_cloud', PointCloud, queue_size=10)
        pub.publish(resp.cloud)

    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

    rate.sleep()

Asked by tedalias on 2018-07-07 03:44:21 UTC

Comments

More information is necessary to be able to help you. It sounds like you have things right, but without a way to reproduce your problem or see the error in your results we can only guess at what you're doing and what might be good to change. Please edit your post with more details.

Asked by tfoote on 2018-07-09 02:52:37 UTC

Answers

Sorry, next time I will try to describe the Problem with more details. I was able to fix the issue.

The Problems were:

-Robot_state_publisher was Publishing into /tf (in Addition to the tf broadcaster that I set up).

-the time increment published by the laser scanner (turtlebot3 laser scanner) was to small (factor x10).

-the time stamp published with each scan was wrong due to latency of the scanner. Fixed this by adding a ros::Duration Offset to the time stamp.

Asked by tedalias on 2018-07-09 10:33:25 UTC

Comments