ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

laser_assembler -> problems with ignore_laser_skew

asked 2018-07-07 03:44:21 -0500

tedalias gravatar image

Hi,

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

If I deactivate the ignore_laser_skew (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 ignore_laser_skew=true and ignore_laser_skew=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 ignore_laser_skew 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()
edit retag flag offensive close merge delete

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.

tfoote gravatar image tfoote  ( 2018-07-09 02:52:37 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2018-07-09 10:33:25 -0500

tedalias gravatar image

updated 2018-07-09 10:34:34 -0500

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.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2018-07-07 03:44:21 -0500

Seen: 193 times

Last updated: Jul 09 '18