Uuv_simulator: Реализуйте более реалистичную симуляцию датчика сонара

Созданный на 2 мая 2017  ·  33Комментарии  ·  Источник: uuvsimulator/uuv_simulator

В настоящее время мы злоупотребляем лазерными датчиками Gazebo и называем это сонаром.

Более реалистичное моделирование гидролокаторов ( гидролокатор бокового обзора и многолучевой сонар ) значительно повысит ценность uuv_simulator и сделает его более интересным для более широкого нового сообщества.

enhancement help wanted

Самый полезный комментарий

Привет, мы также работаем над симуляцией датчиков в uuv_simulator . В настоящее время у нас есть что-то вроде бокового обзора, которое дает нам изображения водопада. Что еще более важно, мы работаем над хорошим датчиком FLS здесь: https://github.com/smarc-project/smarc_simulations/blob/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins/src/gazebo_ros_image_sonar.cpp . Он основан на симуляторе, описанном в статье «Новый симулятор гидролокатора на базе графического процессора для приложений реального времени». Gazebo делает его немного сложным, поэтому он полагается на злоупотребление смоделированной камерой глубины, но все же достаточно эффективен.

Если интерес к этому все еще есть, я приведу несколько примеров того, как выглядят эхолоты, и, возможно, поработаю над завершением всего и создам PR для этого репо.

Все 33 Комментарий

Привет, мы также работаем над симуляцией датчиков в uuv_simulator . В настоящее время у нас есть что-то вроде бокового обзора, которое дает нам изображения водопада. Что еще более важно, мы работаем над хорошим датчиком FLS здесь: https://github.com/smarc-project/smarc_simulations/blob/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins/src/gazebo_ros_image_sonar.cpp . Он основан на симуляторе, описанном в статье «Новый симулятор гидролокатора на базе графического процессора для приложений реального времени». Gazebo делает его немного сложным, поэтому он полагается на злоупотребление смоделированной камерой глубины, но все же достаточно эффективен.

Если интерес к этому все еще есть, я приведу несколько примеров того, как выглядят эхолоты, и, возможно, поработаю над завершением всего и создам PR для этого репо.

@nilsbore несколько примеров было бы здорово. Меня это тоже очень интересует.

Привет, @nilsbore , все вклады приветствуются :) Если вы хотите сделать

Привет, @musamarcusso , и спасибо за отличную работу над симулятором! Я посмотрю, сколько потребуется, чтобы создать чистый PR для этого репо, и пойду по одному из предложенных путей, спасибо!

Привет @nilsbore ,

Я с нетерпением жду вашего прогресса в адаптации эхолота к симулятору UUV. Пожалуйста дай нам знать! = D

Был ли достигнут прогресс по ДУТ? Я тоже хочу использовать.

Привет @nilsbore! Прошло много времени с тех пор, как эта тема была запущена, но могу ли я узнать, как продвигается моделирование FLS? Я с нетерпением жду возможности использовать симуляцию сонара, над которой вы работаете в Gazebo, и надеюсь, что после этого у вас будет некоторый прогресс.

* после последнего обновления, которое у вас было здесь.

Привет всем, извините, я не смог продвинуться по этой теме. Моделирование сенсора является открытым исходным кодом и доступно здесь: https://github.com/smarc-project/smarc_simulations/tree/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins . Это называется gazebo_ros_image_sonar . Несмотря на то, что мы используем несколько устаревшую версию uuv_simulator, этот плагин зависит только от gazebo и поэтому должен работать везде. В uuv_simulator вы можете включить его, включив этот urdf: https://github.com/smarc-project/smarc_simulations/blob/master/smarc_sensor_plugins/smarc_sensor_plugins_ros/urdf/sonar_snippets.xacrodfippet и добавив что-то вроде этого фрагмента urdf :

<xacro:forward_looking_sonar
      namespace="${namespace}"
      suffix="down"
      parent_link="${namespace}/base_link"
      topic="forward_sonar"
      mass="0.015"
      update_rate="10"
      samples="100"
      fov="1.54719755"
      width="260"
      height="120">
      <inertia ixx="0.00001" ixy="0.0" ixz="0.0" iyy="0.00001" iyz="0.0" izz="0.00001" />
      <origin xyz="0.83 0 -0.22" rpy="0 ${0.2*pi} 0" />
      <visual>
      </visual>
    </xacro:forward_looking_sonar>

После этого вы должны увидеть что-то вроде этого изображения в теме ros: видео .

Когда позволит время (после крайних сроков), я попытаюсь разбить этот датчик на отдельный пакет, который может использовать любой, кто хочет использовать FLS sim и ничего больше.

Лучший,
Нильс

Отметил @nilsbore ! Большое спасибо за обновление. Я постараюсь улучшить и этот датчик, чтобы повысить его производительность.

Действительно отличное обновление и прогресс! С нетерпением жду дальнейших новостей об этом проекте и отличной работы @nilsbore!

Я выбрал вишню из @NickSadjoli и @nilsbore, чтобы попытаться получить что-нибудь от мастера. Похоже, вы оба по-разному разошлись.

Было бы неплохо, если бы вы посмотрели и прокомментировали / зафиксировали, чтобы это могло быть использовано другими.

Извините за поздний ответ @willcbaker ! Я отклоняюсь от @nilsbore, поскольку пытаюсь внедрить его код в свой собственный проект, который, похоже, имеет другие параметры в среде. Однако его код отлично работает в моей среде, хотя и с некоторыми улучшениями, которые можно было бы применить, чтобы сделать его более похожим на реализацию, упомянутую в статье «Новый симулятор гидролокатора на базе графического процессора для приложений реального времени».

FLS upgraded-turbidwater

К сожалению, из-за других проблем я не добился большого прогресса в улучшении кода, но обязательно опубликую обновления, когда у меня будет время.

Что касается сделанного вами коммита, я могу с уверенностью сказать, что внесенные вами дополнения точно такие же, как и для моей ветки. Теперь он должен отлично работать с Gazebo, и вы можете получить изображения сонара из темы "rexrov / depth / image_sonar".

Я должен отметить, что в настоящее время название тесно связано с темой «/ глубина», так как реализация датчика на данный момент требует использования камеры глубины. Мы должны посмотреть, можно ли это улучшить, чтобы избежать возможной путаницы, и, надеюсь, в ближайшее время последуют дальнейшие обновления.

Привет, @NickSadjoli , не могли бы вы дать ссылку на репозиторий, в котором реализован этот гидролокатор, если он есть?

@musamarcusso Приносим извинения за то, что не предоставили ссылки раньше. У меня есть рабочая ветка, в которой есть рабочий пример этого сонара на Rexrov UUV, но обратите внимание, что эта ветка содержит другой неработающий экспериментальный код, который я пытался ранее воссоздать FLS, упомянутый в упомянутой статье. Ссылка на ветку приведена ниже:

https://github.com/NickSadjoli/uuv_simulator/tree/realistic-sonar-sim-48

Другие заметки или изменения, которые были добавлены или могут быть использованы в этой ветке:

  • Настроенный тестовый мир под названием «test_turbid_water.world», в значительной степени основанный на «subsa_bop_panel.world», который я модифицировал для использования в моем исследовательском проекте.
  • Рабочая модель rexrov, содержащая реализацию FLS от Niels, находится в каталоге «uuv_descriptions / robots / rexrov_test.xacro», изначально основанном на модели «rexrov_sonar.xacro». Модель комментирует предыдущие модели m450 или p900 fls и заменяет их гидролокатором fls xacro, который был рекомендован Нильсом выше.
  • Настроенное представление «rexrov_fls.rviz», которое позволяет Rviz напрямую отображать разделы / rexrov / depth / image_raw_sonar и передняя default_camera.
  • Пользовательский файл запуска, test_turbid_water.launch, используется для запуска всей комбинации изменений выше, напрямую ссылаясь на пользовательский мир и Rviz.

Если организация файлов в текущей ветке слишком запутанная, пожалуйста, дайте мне обратную связь в этой ветке, чтобы я мог сделать более чистую версию этой ветки для вас.

Спасибо и с нетерпением жду ваших отзывов / мнений

  • НикСаджоли

РЕДАКТИРОВАТЬ: забыл прикрепить ссылку на репозиторий

Привет, @NickSadjoli
Я пробую ваш uuv_simulator-реалистичный-сонар-сим-48. Первой ошибкой, которую я получил, было «отсутствует uuv_laser_to_sonar / launch» во время установки catkin_make. В качестве временного решения я создал пустую папку запуска. Затем я запустил "roslaunch uuv_gazebo_worlds test_turbid_water.launch" и получил несколько ошибок, в том числе

  1. [Err] [gazebo_ros_image_sonar. cpp: 160 ] У нас нет клипа.
  2. gzserver: ошибка поиска символа: /home/cchien/catkin_ws3/devel/lib/libimage_sonar_ros_plugin.so: неопределенный символ: _ZN2cv3Mat6createEiPKii.
    а также некоторое предупреждение, в том числе «Преобразование типа датчика [глубина] не поддерживается».
    В результате в rviz не отображается изображение сонара. Я что-то теряю? Есть комментарии или предложения? Я тестирую ваш код на ubuntu 16.04, ROS kinetic и opencv 3.4. Спасибо. К. Чиен

Привет, @NickSadjoli
После отслеживания ошибок выясняется, что библиотеки opencv не были должным образом связаны. В качестве обходного пути я явно добавил необходимые библиотеки opencv в image_sonar_ros_plugin. Пожалуйста, дайте мне знать, если есть более эффективные способы исправить исходную ошибку.

Я также заметил, что my_frame (и карта) либо не определен, либо не получает tf из мира. Есть идеи, как решить проблему? Спасибо за ваш вклад. К. Чиен

Привет @ chyphen777!

Приносим извинения за запоздалый ответ на ваш запрос.

Ошибка в отсутствующем файле запуска, вероятно, была вызвана тем, что я включил несколько каталогов, которые в любом случае не использовались в моделировании FLS, что привело к беспорядочным CMake-s. Я обновил свою ветку, чтобы очистить это, и теперь нужно исправить такие ошибки. Однако, к сожалению, кажется, что я случайно удалил некоторые необходимые файлы в этой ветке, из-за чего графический интерфейс Gazebo запускается с ошибками и ошибками сегментации. Обратите внимание, однако, что фактические темы беседок все еще запускаются, и что RViz все еще может иногда запускаться должным образом, поэтому он еще не полностью сломан.

Я попытаюсь исправить эту проблему с помощью ветки и верну ее к предыдущей фиксации, если проблема не исчезнет. Обратите внимание, что это может занять некоторое время, так как я также занимаюсь другими делами на работе, поэтому у меня может не быть много времени.

Что касается ошибок «У нас нет клипа» и «Преобразование типа датчика [глубина] не поддерживается», я не уверен, являются ли они возможными причинами того, что изображение сонара не отображается в RViz, поскольку я все еще мог иметь изображение, показанное на моем RViz, даже при появлении этих ошибок. Я думаю, что это, скорее всего, связано с ошибкой поиска символа, с которой я, к сожалению, еще не сталкивался в моем локальном репо.

В связи с этим я не уверен, нужно ли явно связывать библиотеки opencv с CMakeLists, так как я смог нормально запустить мир, не требуя этого. Однако я постараюсь разобраться и в этом. Благодарим вас за сообщение об ошибке пластыря, а также других пользователей, которые могут столкнуться с аналогичной проблемой.

Привет @ chyphen777!

Я только что внес некоторые незначительные изменения в текущую ветку, и, похоже, теперь она нормально работает на моем компьютере, поэтому вы сможете просто переключиться на эту ветку и все скомпилировать с помощью catkin_make install.

Однако следует отметить, что ветвь временами кажется нестабильной, и вы можете столкнуться с ошибкой следующего типа:

current_branch_not_stable

Если вы столкнетесь с такими ошибками, вы сможете просто закрыть и повторно запустить файл запуска, чтобы запустить Gazebo и RViz (по крайней мере, то, что я смог сделать). Эта нестабильность определенно раздражает, и я постараюсь разобраться, что ее вызывает, чтобы ветка была более стабильной.

Кроме того, я, к сожалению, также не стал внимательнее относиться к my_frame и карте, которые не должны быть определены или не обновляются из tf мира. Я подозреваю, что это могло быть связано с остатками моих предыдущих попыток использования другого решения FLS, которое пока не было успешным. Опять же, я постараюсь разобраться в этом, когда у меня будет больше времени, и вернусь к вам, когда у меня появятся новые обновления.

Приветствую и спасибо за ваш отзыв, C. Chien! - Николай С.

Привет, @NickSadjoli :

Спасибо за ответ, исправления и полезную информацию. Я могу запустить ваш симулятор сонара. Извините за поздний ответ. Я был отстранен от других проектов. Пожалуйста, держите нас в курсе любых обновлений.
С уважением, К. Чиен.

@NickSadjoli
Во-первых, отличная работа с этой реализацией FLS для симулятора UUV, это огромный актив для сообщества! У меня есть пара вопросов, так как я планирую внести некоторые небольшие изменения, чтобы ДУТ соответствовал оборудованию, которое я обычно развертываю в полевых условиях.

  1. Как я могу добавить еще один гидролокатор, например, вперед и назад? Похоже, что существует большая взаимозависимость между камерой в отношении генерации изображений ДУТ, и мы ждем ваших указаний.

  2. На каком гидролокаторе он основан и какова его вертикальная апертура? Если бы я хотел, как бы мне изменить вертикальную апертуру эхолота?

  3. Каков максимальный диапазон датчика и как мне его изменить, если я захочу?

  4. Что означает "samples = 100" в файле rexrov_test.xacro в блоке запуска ДУТ?

Джон

@NickSadjoli
Хочется правильно процитировать это в некоторых будущих работах. Я буду использовать цитату из симулятора UUV, но есть ли еще какие-то работы, которые нужно процитировать? Возможно, «Новый симулятор гидролокатора на базе графического процессора для приложений реального времени?»

@ jake3991 По крайней мере, моя первоначальная реализация основана на статье, о которой вы говорите. Я не знаю, добавил ли @NickSadjoli какие-либо концепции из других работ.

Отличная работа!

@nilsbore Я пытаюсь понять вашу реализацию и формирование изображения гидролокатора изображения. Не могли бы вы указать мне на уравнения, которые использовались для реализации ConstructSonarImage и ConstructScanImage ? Например, почему SNR вычисляется как cv::Mat SNR = SL - 2.0*TL - (NL-DI) + TS; ?

cv::Mat GazeboRosImageSonar::ConstructSonarImage(cv::Mat& depth, cv::Mat& normals)
{
  std::vector<cv::Mat> images(3);
  cv::split(normals, images);

  float intensity = 100.; // target strength
  float SL = 200.; // source level
  float NL = 30; // noise level
  float DI = 0.0; // directivity index

  if (dist_matrix_.empty()) {
    // Compute dist_matrix_ once
    // ...
  }

  cv::Mat TS = intensity*images[2]; // target strength, probably dir should be DI

  cv::Mat TL = 5*depth; // transmission loss
  cv::multiply(TL, dist_matrix_, TL);

  cv::Mat SNR = SL - 2.0*TL - (NL-DI) + TS;
  SNR.setTo(0., SNR < 0.);

  // ...

@witignite Этот код был которую ссылается

Для тех, кто интересуется многолучевым сонаром в беседке, я создал плагин для многолучевого сонара в проекте Dave, который также включает uuv_simulator. Он использует библиотеку Nvidia Cuda и вычисляет данные интенсивности / диапазона с частотой обновления до 10 Гц с частотой 900 кГц, диапазон 10 м. Для получения дополнительной информации https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar.
image

Привет, мне очень жаль, что я просто ответил на эту тему спустя очень долгое время, так как я занимаюсь еще одной важной частью / компонентом для своего проекта.

Фактически это также означает, что я больше не полностью работаю над разработкой симулятора, поскольку я передал эту рабочую нагрузку своему коллеге, который занимался ею с прошлого года. К сожалению, я забыл упомянуть ему эту ветку на случай, если появятся вопросы относительно каких-либо разработок.

Также для пояснения: во время работы с моделью эхолота я не использовал код нижнего уровня (т.е. исходные коды C), написанный @nilsbore для эхолота. Тем не менее, мой коллега, возможно, внес в него некоторые небольшие изменения, чтобы изменить его поведение, чтобы более реалистично моделировать поведение ДУТ в мутной подводной среде.

@ jake3991 Чтобы ответить на ваши вопросы:

  1. Насколько я понимаю, моему коллеге пока удалось «повернуть» гидролокатор только путем настройки некоторых его параметров URDF. Попробую поинтересоваться у него, как это делается, поподробнее, если тебе все еще интересно.
  2. Первоначально гидролокатор все еще был основан на сонаре Blueview, который использовал @nilsbore . Однако недавно мой коллега придумал, как настроить диафрагму, чтобы она соответствовала другим характеристикам сонара, в частности, сонару Blueview M750D . Я считаю, что ему удалось это сделать, добавив некоторые параметры в вызов xacro, но снова мне нужно спросить у него дополнительные подробности для этой реализации.
  3. Тот же ответ, что и 2
  4. Поиграться с программным обеспечением, чтобы получить однозначные ответы, к сожалению, не удалось. Надо спросить у коллеги по этому поводу.

Также обратите внимание, что мой коллега планирует опубликовать статью о симуляторе на основе uuv_simulator, над которым он работал. Поэтому дополнительные сведения о текущей реализации нашего проекта необходимо будет направить ему. Я постараюсь, чтобы он был связан с этой веткой, если это необходимо, чтобы ответить на любые дополнительные вопросы по реализации нашего проекта.

Что касается действительно «точной» модели сонара, кажется, что работа, связанная с @ woensug-choi, могла бы быть более «точной» моделью, поскольку она использует более прямую реализацию с трассировкой лучей. Хотя я и сам не совсем уверен, насколько это лучше для разработки на основе моделирования в целом.

Попросит ли мой коллега проверить реализацию и посмотреть, насколько хорошо она может быть интегрирована в симулятор моего проекта.

И снова огромные извинения всем за очень поздний ответ на эту ветку.

@ jake3991 Также для пояснения относительно цитирования симулятора нашего проекта: поскольку у нас не было фактической успешной публикации на симуляторе, я предлагаю вам по-прежнему использовать статью, на которую вы ссылаетесь, а также

Как только наша публикация о публикации будет принята или сделана, тогда, возможно, можно будет также использовать цитирование нашей статьи.

Для заинтересованных, пожалуйста, проверьте https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar .

Обратите внимание, что я использую https://github.com/uuvsimulator/uuv_simulator от @musamarcusso, который уже интегрировал модуль сонара
Чтобы прояснить @NickSadjoli по вопросу @ jake3991 :

  1. Мы добавили URDF для самого эхолота. поэтому, добавив еще один URDF и переназначив имена параметров, вы можете иметь 2 сонара в вашем симуляторе.

2. Как сказал
Чтобы написать в Твиттере VFOV гидролокатора:
В файле URDF xacro сонара необходимо указать HFOV, ширину и высоту изображения. Gazebo, чем рассчитать фокусное расстояние на основе ширины изображения и HFOV. Используя то же фокусное расстояние, они рассчитывают VFOV в обратном порядке, используя высоту изображения. Итак, чтобы указать желаемый VFOV, вам нужно будет рассчитать высоту изображения.

Фокусное расстояние = (Ширина / 2) / тангенс угла (deg2rad (HFOV) / 2) или Фокусное расстояние = (Высота / 2) / tan (deg2rad (VFOV) / 2)

3. Вы должны написать код эхолота на C ++. В коде C ++ гидролокатора от @nilsbore я добавил подписчика к значению "Range" вместо постоянного диапазона, как в оригинальной работе @nilsbore . Таким образом, я могу играть с максимальным диапазоном отображения эхолота, как и большинство эхолотов.

  1. В xacro "FLS" параметр "samples" не используется. В xacro для "Multibeam" он использует лазерную точку беседки для управления многолучевым лучом. Следовательно, обратитесь к этому: http://gazebosim.org/tutorials?tut=ros_gzplugins в разделе «Лазер на GPU».

Надеюсь это поможет.

@nilsbore и @NickSadjoli ,

  1. Что означают $ {width} и ​​$ {height} в sonar_snippets.xacro? это связано с шириной и высотой сгенерированного изображения сонара? Если это так, я попытался установить значения $ {width} и ​​$ {height}, затем я распечатал значение высоты и ширины темы изображения сонара. Но эти ценности были другими. Не могли бы вы объяснить мне, почему это происходит?
  2. Можно ли получить расширенный диапазон действия сонара, чтобы я мог видеть дальнее препятствие на изображении сонара?

@Jenanaputra Пожалуйста, обратитесь к моему комментарию выше .....

  1. Как вы задали тему? Вы меняли параметры{$ topic}в файле xacro? Или вы изменили код C ++ для конкретной темы, которую хотели бы обсудить? (для меня изменение кода звучит аппетитнее)
  2. Сонар на самом деле является модификацией камеры глубины беседки, в плагине камеры беседки $ {width} и ​​$ {height} влияют на VFOV и HFOV датчика (уравнение упоминается в моем предыдущем посте). Обычно для камеры ширина составляет 1280, а высота - 720. Для сонара я устанавливаю ширину 1280 и вычисляю высоту по формуле. Таким образом я получаю VFOV датчика, который мне нужен.
  3. Как упоминалось ранее в моем предыдущем посте, изменение диапазона требует изменения кода C ++. В настоящее время диапазон жестко задан фиксированным значением.
    Наконец, не забудьте очистить catkin и сделать catkin после изменения кода C ++ (при условии, что вы используете пакет ROS)

@ loguna123 Спасибо за повтор. Вы знаете, как узнать значение глубины, используемое в этом плагине fls?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

tve picture tve  ·  17Комментарии

hughhugh picture hughhugh  ·  5Комментарии

musamarcusso picture musamarcusso  ·  12Комментарии

Timple picture Timple  ·  24Комментарии

dbcesar picture dbcesar  ·  5Комментарии