Repeated sideways jumps in gmapping with Hokuyo
Hi,
I'm using a Turtlebot 2 on ROS Hydro on Ubuntu 12.04 64-bit. Recently I replaced my bot's Kinect with a Hokuyo URG-04LX. Since then, I've been getting much better maps of my office building in terms of where hallways and cubicles should be. However, there is a weird new phenomenon I haven't been able to isolate the cause of.
Namely, walls that should be straight are a series of short parallel line segments that are all off by some angle. This happens for even a simple test where I drove the robot in a straight line down a hallway:
I had thought maybe there was something wrong with the numbers on the transform from the base to the Hokuyo that I was manually publishing, but now I'm not sure; if I run RViz while playing the same bagfile, set the global fixed frame to /odom, turn off the map, and set the LaserScan decay to 300, I can get a "map" that actually looks very good, like so:
Note that, in this image, the map has a perfectly straight hallway. This is the result of using the same arguments to the static transform publisher (shown in the script window). So if I'm correct (am I...?), the fact that this map looks good rules out bad transform arguments as well as bad odometry.
Watching the GMapping process in RViz, I can see that as the robot drives forward, every few seconds, its pose seems to consistently jump to the left, which is why the output gets that skewed map. It doesn't look like I'm allowed to post videos here, but if it helps, I can go create a YouTube account and share a recording of what this looks like.
I've tried several things, including slowing the bagfile down 10x, changing the map resolution (delta), and throttling the scans in GMapping. Nothing really changes the consistent jumping. My GMapping launch file is as follows (currently using the default arguments):
<launch>
<arg name="scan_topic" default="scan" />
<arg name="srr" default="0.01"/>
<arg name="srt" default="0.02"/>
<arg name="str" default="0.01"/>
<arg name="stt" default="0.02"/>
<arg name="lU" default="0.5"/>
<arg name="aU" default="0.436"/>
<arg name="mU" default="20"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<param name="base_frame" value="base_footprint"/>
<param name="odom_frame" value="odom"/>
<param name="map_update_interval" value="$(arg mU)"/>
<param name="maxUrange" value="3.5"/>
<param name="maxRange" value="8"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="$(arg srr)"/>
<param name="srt" value="$(arg srt)"/>
<param name="str" value="$(arg str)"/>
<param name="stt" value="$(arg stt)"/>
<param name="linearUpdate" value="$(arg lU)"/>
<param name="angularUpdate" value ...