Обработка облака точек в реальном времени и задержка - PullRequest
0 голосов
/ 28 мая 2020

Наш проект - интегрировать лидарную систему в виртуальную реальность (единство). Я смог бы добиться такой интеграции с ROS-мостом. Следующим шагом является обработка данных облака точек перед отправкой их в систему Unity.

  • Лидарный сенсор Velodyne VLP-16
  • Ubuntu 18.4
  • IDE: Pycharm (python)
  • Обработка облака точек: python библиотека облаков точек с ROS
  • ros-bridge с единой системой

Проблема Без обработки задержка между сенсором и единой визуализацией составляет всего 1 секунду. Но обработка данных облака точек в ROS (pycharm) вызывает значительную задержку (около 5 секунд).

  • Я использую велодиски для преобразования сырых данных в формат pointcloud2. В коде для обработки я подписываю это сообщение pointcloud2 и конвертирую его в формат PointXYZRGB, чтобы применить библиотеки pcl.
  • Сначала я протестировал эту последовательность преобразования типов данных без применения PCL.

сырые данные -> publi sh сообщение pointcloud2 -> подписаться на pointcloud2-> pointXYZRGB -> (обработка) -> сообщение pointcloud2 -> publi sh it.

  • Без обработки у меня задержка более 5 секунд.

Я понимаю, что было бы лучше получать сырые данные с датчика без преобразования в сообщения pointcloud2. Но мне очень сложно сделать это в python. Я нашел один пример граббера на c ++. https://medium.com/@yohei.kajiwara / vlp16- c -quick-example-35b9ceea2059

Но я не уверен, какой способ самый надежный. Пожалуйста, дайте мне совет по этому поводу.

С уважением

Сонсу Бён

1 Ответ

1 голос
/ 28 мая 2020

Если вас беспокоит скорость, есть несколько вещей.

Драйверы Velodyne имеют возможность получать пакеты и объединяться в облако точек с доступом без копирования, используя нодлеты. Узлы ROS похожи на узлы, но с меньшим количеством копий, более эффективными для больших данных. Ex velodyne_driver и Ex velodyne_pointcloud . Вы можете вызвать это все через файл запуска VLP16_points.launch, который демонстрирует, как комбинировать подобные нодлеты. Код довольно удобочитаем, поэтому вы можете пройтись по их настройке для справки. Если вы еще не пробовали этот метод, а затем подключились к Unity, это ваш минимальный базовый уровень. Тогда узкое место находится на стороне единства. Лучше всего, если вам не нужно ничего писать самостоятельно. Пакет pcl_ros имеет несколько нодлетов преобразования; если бы их сочетание могло удовлетворить ваши потребности, это было бы наиболее эффективным и легким способом. В противном случае вы все равно можете использовать заголовок <pcl_ros/pointcloud.h> в своем узле c ++, а pcl::PointCloud<T> будет интерпретироваться ros как сообщение sensor_msgs/PointCloud2 как для подписчика, так и для издателя. Если вам нужны дополнительные преобразования, в пакете pcl_conversion есть несколько удобных.

(Это немного тангентально. Если шея bottle за ним - это интерфейс websocket-y Ros # использует для связи с rosbridge_server, rosbridge_server поддерживает протокол UDP, который, если он находится на той же машине, должен быть довольно быстрым, но Ros # в настоящее время не поддерживает это и не имеет этого в своей дорожной карте, поскольку большинство их использования - дело не в том, что он запущен на той же машине.)

...