Uuv_simulator: Mettre en œuvre une simulation de capteur sonar plus réaliste

Créé le 2 mai 2017  ·  33Commentaires  ·  Source: uuvsimulator/uuv_simulator

Nous abusons actuellement des capteurs laser de Gazebo et l'appelons sonar.

Une simulation plus réaliste des capteurs sonar ( sonar à balayage latéral et multifaisceaux ) ajouterait beaucoup de valeur à uuv_simulator et le rendrait plus intéressant pour une nouvelle communauté plus large.

enhancement help wanted

Commentaire le plus utile

Hé, nous travaillons également sur des simulations de capteurs dans uuv_simulator . Actuellement, nous avons quelque chose qui s'apparente à un balayage latéral, qui nous donne des images en cascade. Plus important encore, nous travaillons à un bon capteur FLS ici : https://github.com/smarc-project/smarc_simulations/blob/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins/src/gazebo_ros_image_sonar.cpp . Il s'appuie sur la simulation décrite dans l'article "Un nouveau simulateur de sonar basé sur GPU pour les applications en temps réel". Gazebo le rend un peu difficile, il repose donc sur l'abus d'une caméra de profondeur simulée, mais il reste raisonnablement efficace.

S'il y a toujours de l'intérêt à ce sujet, je fournirai quelques exemples sur l'apparence des sonars et travaillerai peut-être pour tout terminer et créer un PR pour ce repo.

Tous les 33 commentaires

Hé, nous travaillons également sur des simulations de capteurs dans uuv_simulator . Actuellement, nous avons quelque chose qui s'apparente à un balayage latéral, qui nous donne des images en cascade. Plus important encore, nous travaillons à un bon capteur FLS ici : https://github.com/smarc-project/smarc_simulations/blob/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins/src/gazebo_ros_image_sonar.cpp . Il s'appuie sur la simulation décrite dans l'article "Un nouveau simulateur de sonar basé sur GPU pour les applications en temps réel". Gazebo le rend un peu difficile, il repose donc sur l'abus d'une caméra de profondeur simulée, mais il reste raisonnablement efficace.

S'il y a toujours de l'intérêt à ce sujet, je fournirai quelques exemples sur l'apparence des sonars et travaillerai peut-être pour tout terminer et créer un PR pour ce repo.

@nilsbore quelques exemples seraient formidables. Cela m'intéresse aussi beaucoup.

Salut @nilsbore , toutes les contributions sont les bienvenues :) Si vous souhaitez faire une pull request, je serai ravi de l'examiner. Une autre solution serait d'ajouter des informations sur la documentation du simulateur UUV sur la façon d'intégrer vos plugins également, afin que plus de personnes puissent l'utiliser :)

Salut @musamarcusso et merci pour ton excellent travail sur ce simulateur ! Je vais voir combien il faudrait pour créer un PR propre à ce dépôt, et suivre l'un des chemins proposés, merci !

Salut @nilsbore ,

J'ai hâte de voir vos progrès dans l'adaptation du sonar au simulateur UUV. S'il vous plaît laissez-nous savoir! =D

Y a-t-il eu des progrès sur le FLS? Je cherche aussi à utiliser.

Bonjour @nilsbore ! Cela fait un moment que ce fil n'a pas été lancé, mais puis-je savoir où en sont les progrès de la simulation FLS jusqu'à présent ? J'ai hâte d'utiliser également la simulation de sonar sur laquelle vous travaillez dans Gazebo et j'espère que vous aurez encore plus de progrès après cela.

*après la dernière mise à jour que vous avez eue ici.

Bonjour à tous, je suis désolé de ne pas avoir pu faire beaucoup de progrès sur ce sujet. La simulation de capteur est open source et disponible ici : https://github.com/smarc-project/smarc_simulations/tree/master/smarc_gazebo_plugins/smarc_gazebo_ros_plugins . C'est ce qu'on appelle le gazebo_ros_image_sonar . Même si nous utilisons une version un peu datée de uuv_simulator, ce plugin ne dépend que de gazebo et devrait donc fonctionner partout. Dans uuv_simulator, vous pouvez l'inclure en incluant cet urdf : https://github.com/smarc-project/smarc_simulations/blob/master/smarc_sensor_plugins/smarc_sensor_plugins_ros/urdf/sonar_snippets.xacro , et en ajoutant quelque chose comme cet extrait de code dans votre véhicule :

<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>

Vous devriez alors pouvoir voir quelque chose comme cette image sur un sujet ros : video .

Lorsque le temps le permettra (après les délais), j'essaierai de décomposer ce capteur dans son propre package qui peut être utilisé par quiconque souhaite utiliser la simulation FLS et rien d'autre.

Meilleur,
Aucun

A noté @nilsbore ! Merci beaucoup pour la mise à jour. J'essaierai également d'apporter des améliorations à ce capteur afin que ses performances puissent être améliorées.

Vraiment super mise à jour et progrès jusqu'à présent! J'attends avec impatience d'autres mises à jour sur ce projet et un très bon travail @nilsbore !

J'ai choisi @NickSadjoli et @nilsbore pour essayer d'obtenir quelque chose de FF du maître. On dirait que vous avez tous les deux divergé de différentes manières.

Ce serait bien que vous jetiez un coup d'œil et commentiez/commettez cela afin que cela puisse être utilisé par d'autres.

Désolé pour la réponse tardive @willcbaker ! Je m'éloigne de

FLS upgraded-turbidwater

Malheureusement, je n'ai pas beaucoup progressé dans l'amélioration du code en raison d'autres problèmes, mais je m'assurerai de publier des mises à jour lorsque j'aurai le temps de le faire.

En ce qui concerne le commit que vous avez fait, je peux dire en toute sécurité que les ajouts que vous avez faits sont exactement les mêmes que ceux que j'ai faits pour ma branche. Cela devrait fonctionner parfaitement avec Gazebo maintenant et vous pouvez obtenir les images du sonar à partir de la rubrique "rexrov/depth/image_sonar".

Je dois noter qu'actuellement, le nom est étroitement lié au sujet "/profondeur" car la mise en œuvre du capteur nécessite l'utilisation d'une caméra de profondeur pour le moment. Nous devrions voir si cela peut être amélioré pour éviter toute confusion possible et, espérons-le, d'autres mises à jour pourront suivre bientôt.

@NickSadjoli , pourriez-vous

@musamarcusso Désolé de ne pas avoir fourni les liens auparavant. J'ai une branche de travail qui a un exemple de travail de ce sonar sur l'UUV Rexrov, mais veuillez noter que cette branche contient d'autres codes expérimentaux qui ne fonctionnent pas que j'ai essayé précédemment de recréer le FLS mentionné dans l'article mentionné. La branche est liée ci-dessous:

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

Autres choses ou changements à noter qui ont été ajoutés ou utiles dans cette branche :

  • Un monde de test personnalisé nommé "test_turbid_water.world" qui était fortement basé sur le "subsea_bop_panel.world" que j'ai modifié pour une utilisation dans mon projet de recherche.
  • Un modèle rexrov fonctionnel contenant l'implémentation FLS de Niels se trouve dans le répertoire "uuv_descriptions/robots/rexrov_test.xacro", initialement basé sur le modèle "rexrov_sonar.xacro". Le modèle commente le précédent m450 ou p900 fls et le remplace par le sonar fls xacro recommandé par Niels ci-dessus.
  • Une vue personnalisée "rexrov_fls.rviz" qui permet à Rviz de s'afficher directement dans les sujets /rexrov/depth/image_raw_sonar et front default_camera.
  • Un fichier de lancement personnalisé, "test_turbid_water.launch" est utilisé pour lancer toutes les combinaisons de changements ci-dessus, référençant directement le monde personnalisé et Rviz

Si l'organisation des fichiers dans la branche actuelle est trop déroutante, merci de me faire part de vos commentaires dans ce fil, afin que je puisse créer une version plus propre de cette branche pour que vous puissiez faire un pull.

Merci et dans l'attente de vos retours/avis

  • Nick Sadjoli

EDIT : J'ai oublié de joindre le lien du référentiel

Salut, @NickSadjoli
J'essaie votre uuv_simulator-realistic-sonar-sim-48. La première erreur que j'ai eue était "manquant uuv_laser_to_sonar/launch" lors de l'installation de catkin_make. J'ai créé un dossier de lancement vide comme solution de contournement. Ensuite, j'ai exécuté "roslaunch uuv_gazebo_worlds test_turbid_water.launch" et j'ai eu plusieurs erreurs, notamment

  1. [Err] [gazebo_ros_image_sonar. cpp:160 ] Nous n'avons pas de clip.
  2. gzserver : erreur de recherche de symbole : /home/cchien/catkin_ws3/devel/lib/libimage_sonar_ros_plugin.so : symbole non défini : _ZN2cv3Mat6createEiPKii.
    ainsi que quelques avertissements, notamment "Conversion du type de capteur [profondeur] non prise en charge".
    Par conséquent, aucune image sonar n'est affichée dans rviz. Est-ce que je rate quelque chose ? Des commentaires ou des suggestions? Je teste votre code sur ubuntu 16.04, ROS kinetic et opencv 3.4. Merci. C. Chien

Salut, @NickSadjoli
Après avoir recherché les erreurs, il s'avère que les bibliothèques opencv n'étaient pas correctement liées. En guise de solution de contournement, j'ai ajouté explicitement les bibliothèques opencv requises à image_sonar_ros_plugin. S'il vous plaît laissez-moi savoir s'il existe de meilleures façons de corriger l'erreur d'origine.

Je remarque également que my_frame (et map) n'est pas défini ou n'obtient pas tf du monde. Une idée de comment résoudre le problème ? Merci pour votre contribution. C. Chien

Bonjour @chyphen777 !

Désolé, il s'agit d'une réponse très tardive à votre demande.

L'erreur sur le fichier de lancement manquant était probablement due au fait que j'avais inclus plusieurs répertoires qui n'étaient de toute façon pas utilisés dans la simulation FLS, ce qui causait des CMake-s désordonnés. J'ai mis à jour ma branche pour nettoyer cela, ce qui devrait corriger ces erreurs maintenant. Cependant, malheureusement, il semble que j'ai accidentellement supprimé certains fichiers nécessaires dans cette branche, ce qui provoque le lancement de l'interface graphique de Gazebo avec des erreurs et des défauts de segmentation à la place. Notez cependant que les sujets de gazebo réels sont toujours lancés et que RViz peut encore occasionnellement se lancer correctement, il n'est donc pas encore entièrement cassé.

Je vais essayer de résoudre ce problème avec la branche et de revenir au commit précédent si le problème persiste. Notez que cela peut prendre un certain temps car je m'occupe également d'autres choses dans mon travail, donc je n'ai peut-être pas beaucoup de temps.

En ce qui concerne les erreurs "Nous n'avons pas de clip" et "Conversion du type de capteur [profondeur] non prise en charge", je ne sais pas si ce sont des causes possibles pour que l'image du sonar ne s'affiche pas dans RViz, car j'ai toujours pu le faire avoir l'image affichée sur mon RViz même avec ces erreurs qui apparaissent. Je pense que cela est probablement attribué à l'erreur de recherche de symbole que je n'ai malheureusement pas encore rencontrée sur mon référentiel local.

Sur une note connexe, je ne sais pas si les bibliothèques opencv doivent également être explicitement liées aux CMakeLists, car j'ai pu lancer le monde très bien sans l'exiger. Je vais essayer de voir cela aussi cependant. Merci d'avoir également fourni l'erreur de pansement aux autres utilisateurs susceptibles de rencontrer un problème similaire.

Salut @chyphen777 ,

Je viens d'apporter quelques modifications mineures à la branche actuelle et cela semble fonctionner correctement sur ma machine maintenant, vous devriez donc pouvoir simplement basculer vers cette branche et que tout soit compilé avec catkin_make install.

Cependant, il est à noter que la branche semble parfois instable et que vous pourriez rencontrer le type d'erreur suivant :

current_branch_not_stable

Si vous rencontrez de telles erreurs, vous devriez pouvoir simplement fermer et relancer le fichier de lancement pour que Gazebo et RViz soient opérationnels (du moins ce que j'ai pu faire). Cette instabilité est définitivement ennuyeuse et je vais essayer de chercher plus loin ce qui la cause afin que la branche puisse être plus stable.

De plus, je n'ai malheureusement pas non plus regardé de plus près en ce qui concerne le my_frame et la carte qui ne doivent pas être définis ou qui ne sont pas mis à jour à partir de tf du monde. Je soupçonne que cela pourrait être dû à un reste de mes tentatives précédentes d'utiliser une autre solution FLS qui n'a pas encore réussi. Encore une fois, j'essaierai d'examiner cela une fois que j'aurai plus de temps et je vous recontacterai une fois que j'aurai plus de mises à jour.

Bravo et merci pour votre retour C. Chien ! - Nicolas S.

Salut, @NickSadjoli :

Merci pour la réponse, les correctifs et les informations utiles. Je suis capable d'exécuter votre simulateur de sonar. Désolé pour la réponse tardive. J'ai été détourné vers d'autres projets. Merci de nous tenir au courant de toute mise à jour.
Cordialement, C. Chien.

@NickSadjoli
Tout d'abord, excellent travail avec cette implémentation FLS pour simulateur UUV, c'est un énorme atout pour la communauté ! J'ai quelques questions à ce sujet car je prévois d'apporter de légères modifications pour que le FLS corresponde au matériel que je déploierais normalement sur le terrain.

  1. Comment puis-je ajouter un autre sonar, par exemple, un vers l'avant et un vers l'arrière ? On dirait qu'il y a beaucoup d'interdépendance avec la caméra en ce qui concerne la génération d'images FLS, à la recherche de vos conseils.

  2. Sur quoi est basé le sonar et quelle est son ouverture verticale ? Si je le voulais, comment modifierais-je l'ouverture verticale du sonar ?

  3. Quelle est la portée maximale du capteur et comment la changerais-je si je le voulais ?

  4. Dans le fichier rexrov_test.xacro, dans le bloc pour démarrer le FLS, à quoi se réfère « samples = 100 » ?

John

@NickSadjoli
Vous cherchez à citer correctement cela dans certains travaux à venir. J'utiliserai la citation du simulateur UUV mais y a-t-il d'autres travaux qui doivent être cités ? Peut-être « Un nouveau simulateur de sonar basé sur GPU pour les applications en temps réel ? »

@ jake3991 Au moins, mon implémentation d'origine est basée sur l'article @NickSadjoli a ajouté des concepts d'autres travaux.

Bon travail!

@nilsbore J'essaie de comprendre votre implémentation et la formation d'image du sonar d'imagerie. Pourriez-vous m'indiquer les équations qui ont été utilisées pour implémenter ConstructSonarImage et ConstructScanImage ? Par exemple, pourquoi SNR est calculé comme 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 Ce code date d'il y a un certain temps et je ne me souviens pas exactement où j'ai obtenu ces équations. En toute honnêteté, lors de la mise en œuvre, l'accent a été mis davantage sur la création d'une image réaliste plutôt que sur un modèle de sonar complètement correct. Un bon début est probablement de regarder le document référencé par @ jake3991 .

Pour ceux qui sont intéressés par Multibeam Sonar dans Gazebo, j'ai construit un plugin de sondeur Multibeam dans le projet Dave qui intègre également uuv_simulator. Il utilise la bibliothèque Nvidia Cuda et calcule les données d'intensité/portée jusqu'à un taux de rafraîchissement de 10 Hz avec une fréquence de 900 kHz, une portée de 10 m. Pour plus de détails, https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar
image

Salut, je suis vraiment désolé de répondre à ce fil après un très long moment, car je m'attaque à une autre pièce/composant massif pour mon projet.

Cela signifie également que je ne travaille plus pleinement sur le développement du simulateur car j'ai confié cette charge de travail à un de mes collègues qui s'en occupe depuis l'année dernière. Malheureusement, j'ai oublié de lui mentionner ce fil au cas où il y aurait des questions concernant un développement.

Egalement pour clarification : lors de ma manipulation du modèle de sonar, je n'ai fait aucun code de niveau inférieur (c'est-à-dire les codes sources C) écrit par @nilsbore pour le sonar. Cependant, mon collègue a peut-être apporté quelques petits ajustements pour modifier certains de ses comportements afin de simuler de manière plus réaliste les comportements FLS dans des environnements sous-marins troubles.

@jake3991 Pour répondre à vos questions :

  1. D'après ce que j'ai compris, mon collègue n'a jusqu'à présent réussi à « faire pivoter » le sonar qu'en ajustant certains paramètres URDF de celui-ci. Je vais essayer de lui demander comment c'est fait plus en détail si vous êtes toujours intéressé.
  2. Initialement, le sonar était toujours basé sur le sonar Blueview utilisé par sonar Blueview M750D . Je pense qu'il a réussi à le faire en ajoutant quelques paramètres à l'appel xacro, mais encore une fois, je devrai lui demander plus de détails pour cette implémentation.
  3. Même réponse que 2
  4. Je n'ai malheureusement pas réussi à jouer avec le logiciel pour avoir des réponses définitives à ce sujet. Besoin de demander à un collègue sur celui-ci.

Veuillez également noter que mon collègue envisage de publier un article sur le simulateur basé sur uuv_simulator sur lequel il travaille. Il faudra donc lui adresser de plus amples détails sur la mise en œuvre actuelle de notre projet. J'essaierai de le connecter à ce fil si nécessaire pour répondre à d'autres questions sur la mise en œuvre de notre projet.

Cependant, en ce qui concerne un modèle de sonar réellement "précis", il semble que le travail lié par @woensug-choi pourrait être un modèle plus "précis" car il utilise une implémentation de lancer de rayons plus directe. Bien que je ne sois pas tout à fait sûr moi-même à quel point cela est meilleur pour le développement basé sur la simulation dans son ensemble.

Je demanderai à mon collègue de vérifier l'implémentation et de voir dans quelle mesure elle pourrait être intégrée au simulateur de mon projet.

Encore une fois de grandes excuses à tous pour la réponse très tardive à ce fil.

@ jake3991 Également pour des éclaircissements concernant la citation du simulateur de notre projet : étant donné que nous n'avons pas obtenu de publication papier réussie sur le simulateur, je vous suggère d'utiliser toujours l'article que vous avez lié ainsi que @nilsbore pour la citation appropriée.

Une fois que notre publication sur la publication est acceptée ou faite, alors la citation pour notre article peut peut-être aussi être utilisée à ce moment-là.

Pour ceux qui sont intéressés, veuillez consulter https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar .

Notez que j'utilise https://github.com/uuvsimulator/uuv_simulator de @musamarcusso qui a déjà intégré le module sonar de @nilsbore .
Pour clarifier @NickSadjoli sur la question @jake3991 :

  1. Nous avons ajouté un URDF pour le sonar lui-même. donc en ajoutant un autre URDF et en remapper les noms des paramètres, vous pouvez avoir 2 sonars dans votre simulateur.

2.Comme l'a dit @NickSadjoli , nous faisions référence à un sonar Blueprint.
Pour tweeter le VFOV du sonar :
Dans le fichier URDF xacro du sonar, vous devez spécifier le HFOV, la largeur et la hauteur de l'image. Gazebo que de calculer la base de la longueur focale sur la largeur de l'image et HFOV. En utilisant la même distance focale, ils inversent le calcul du VFOV en utilisant la hauteur de l'image. Donc, pour spécifier le VFOV que vous vouliez, vous devrez calculer la hauteur de l'image.

Distance focale = (Largeur/2) / tan( deg2rad(HFOV)/2) ou Distance focale = (Hauteur/2) / tan( deg2rad(VFOV)/2)

3.Vous devez tweeter le code C++ du sonar. Dans le code C++ du sonar de @nilsbore , j'ai ajouté un abonné à la valeur "Range" au lieu d'avoir une Range constante comme le travail original de @nilsbore . De cette façon, je suis capable de jouer avec la portée maximale de l'affichage du sondeur comme le font la plupart des sondeurs.

  1. Dans le xacro de "FLS", le paramètre "samples" n'est pas utilisé. Dans le xacro pour "Multibeam", il utilise le point laser du belvédère pour contuer le multibeam. Référez-vous donc à ceci : http://gazebosim.org/tutorials?tut=ros_gzplugins sous "GPU laser".

J'espère que cela t'aides.

@nilsbore et @NickSadjoli , Hii, je viens d'essayer le plugin fls fourni dans uuv_sensor_ros_plugin. J'ai quelques questions à ce sujet : 1. J'ai essayé de configurer le sujet dans sonar_snippets.xacro. Quand le robot a été simulé, pourquoi n'y a-t-il pas le sujet que j'ai défini avant ? Je viens de voir ce genre de sujet : "/rexroth/depth/sonar raw_image".

  1. Dans sonar_snippets.xacro, que signifient ${width} et ${height} ? est-ce lié à la largeur et à la hauteur de l'image sonar générée ? Si c'est le cas, j'ai essayé de définir la valeur de ${width} et ${height} puis j'imprime la valeur de la hauteur et de la largeur du sujet de l'image sonar . Mais ces valeurs étaient différentes. Pourriez-vous s'il vous plaît m'expliquer, pourquoi cela arrive-t-il ?
  2. Est-il possible d'obtenir la portée étendue du sonar, afin que je puisse voir l'obstacle le plus éloigné dans l'image du sonar ?

@Jenanaputra Veuillez vous référer à mon commentaire ci-dessus .....

  1. Comment avez-vous défini le sujet ? Avez-vous modifié les paramètres de{$sujet}dans un fichier xacro ? Ou avez-vous modifié le code C++ en un sujet spécifique que vous aimeriez avoir ? (pour moi modifier le code semble plus appétissant)
  2. Le sonar est en fait une modification de la caméra de profondeur du gazebo, dans un plugin de caméra de gazebo, les ${width} et ${height} affectent le VFOV et HFOV du capteur (mention d'équation sur mon post précédent). Habituellement, pour la caméra, la largeur est de 1280 et la hauteur de 720. Pour le sonar, je règle la largeur sur 1280 et calcule la hauteur à l'aide de la formule. De cette façon, j'obtiens le VFOV du capteur que je voulais.
  3. Comme mentionné précédemment sur mon post précédent, la modification de la plage vous oblige à modifier le code C++. La plage est actuellement une valeur fixe codée en dur.
    Enfin, n'oubliez pas de catkin clean et catkin make après avoir modifié le code C++ (en supposant que vous utilisiez le package ROS)

@loguna123 Merci pour votre rediffusion. Savez-vous comment obtenir/connaître la valeur de profondeur utilisée dans ce plugin fls ?

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

atomoclast picture atomoclast  ·  23Commentaires

Timple picture Timple  ·  24Commentaires

musamarcusso picture musamarcusso  ·  12Commentaires

HashirZahir picture HashirZahir  ·  10Commentaires

Timple picture Timple  ·  7Commentaires