velodyne icon indicating copy to clipboard operation
velodyne copied to clipboard

Use sensor_qos profile

Open alluring-mushroom opened this issue 2 years ago • 1 comments

Is your feature request related to a problem? Please describe. We have a system with a many VLP16 (8) and other sources of high bandwidth data, and so we are locking down our QOS policies. I have noticed that the velodyne driver and pointcloud converter use essentially the default QOS policy. Specifically, it uses a reliable policy, instead of a best effort.

https://github.com/ros-drivers/velodyne/blob/37a2b71d7f2111616931339c850fb5bb23b96313/velodyne_driver/src/driver/driver.cpp#L174 https://github.com/ros-drivers/velodyne/blob/37a2b71d7f2111616931339c850fb5bb23b96313/velodyne_pointcloud/src/conversions/convert.cpp#L124 https://github.com/ros-drivers/velodyne/blob/37a2b71d7f2111616931339c850fb5bb23b96313/velodyne_pointcloud/src/conversions/convert.cpp#L129

Because we have so many lidar producing so much data, flowing, using a best_effort policy makes sense. Additionally, lidar are sensors, and I believe it is true in general that grabbing every single velodyne_packet is not a common need.

Describe the solution you'd like I think this should be changed to a best_effort policy, most likely the default rmw_qos_profile_sensor_data, as this profile was designed for use in sensors. E.g. velodyne_publisher would look like this:

#include "rclcpp/qos.hpp"
output_ = this->create_publisher<velodyne_msgs::msg::VelodyneScan>("velodyne_packets", rmw_qos_profile_sensor_data);

Describe alternatives you've considered I am very keen to hear the reasons for keeping this with the default QOS, as such reasoning will be helpful in informing decisions about our own architecture.

alluring-mushroom avatar Sep 07 '22 06:09 alluring-mushroom

@alluring-mushroom Would you be willing to make a Pull Request to the ros2 branch?

JWhitleyWork avatar Sep 30 '22 17:09 JWhitleyWork

@JWhitleyWork, I can potentially in the future. I opened a similar issue on on the SICK repo, and they advised that the impact of this is minimal, as subscribing with best-effort results in best-effort:

you can always change the QoS on the receiving side to best_effort, which will lead to best-effort data handling, as the chosen policy is negotiated between publisher and subscriber.

I did not realise this when posting this. I still believe being able to set the node to be best-effort has merit, to ensure the data rate is as good as possible though I do not have the bandwidth currently (which is probably fairly apparent).

alluring-mushroom avatar Nov 23 '22 08:11 alluring-mushroom

Thanks for responding. As you can probably tell from my very spaced-out replies, I don't currently have the bandwidth to address this either. Therefore, I'm going to close this issue until a PR is put in. Please re-open or create a new one if there are other issues.

JWhitleyWork avatar Dec 04 '22 20:12 JWhitleyWork