Closed manuelrucci7 closed 8 months ago
Thanks for your feedback and sorry for the late reply. sick_scan_xd converts the lidar timestamp to the ROS system time using a Software PLL. The difference between the lidar timestamp and the ros timestamp when receiving the scan data is computed and a linear regression between lidar and ros time is continously calculated. See https://github.com/SICKAG/sick_scan_xd/blob/master/doc/software_pll.md for details.
If a TCP packet is delayed due to network traffic, the distance between lidar and ros timestamp can differ from the values calculated so far. In this case, the packet is not used to adjust the Software PLL. If this happens occasionally like 400 of 28578224 packets dropped (0.0 perc.)
, it will have very little or no impact on the timestamps generated. If this happens often, this indicates too high network traffic and may cause inaccurate timestamps.
The default settings, i.e. both sw_pll_only_publish
and use_generation_timestamp
set true, are correct and should not be modified unless for special applications.
To disable all timeouts, you can disable message monitoring and set all timeouts to max values:
<param name="message_monitoring_enabled" type="bool" value="False" /> <!-- Enable message monitoring with reconnect+reinit in case of timeouts, default: true -->
<param name="read_timeout_millisec_default" type="int" value="2147483648"/> <!-- 5 sec read timeout in operational mode (measurement mode), default: 5000 milliseconds -->
<param name="read_timeout_millisec_startup" type="int" value="2147483648"/> <!-- 120 sec read timeout during startup (sensor may be starting up, which can take up to 120 sec.), default: 120000 milliseconds -->
<param name="read_timeout_millisec_kill_node" type="int" value="2147483648"/> <!-- 150 sec pointcloud timeout, ros node will be killed if no point cloud published within the last 150 sec., default: 150000 milliseconds -->
Problem description
We are using an LMS4xxx and we have set Laser in Software mode (using sopas) to be able to switch on and off the laser according to our need. However, we have notice this warning:
This is our configuration file:
In this setup, the read_timeout_millisec_kill_node parameter causes the ROS node to restart if no pointcloud is received within 25 seconds. This situation arises when the laser stops. After restarting, the software enters PLL mode and generates a warning. This error does not occur when the laser is in free-running mode.
Questions
Do you think this have an impact on the timestamp generated by the software pll?
There is a way to disable the timeout? (all the timeout, timer_kill_node, timeout_startup and timeout_default?
What is the correct way to use the software pll? How this parameters should be set:
Note
We are using ROS2 humble and this is commit of sick_scan_xd we are using: