Uuv_simulator: 实现更真实的声纳传感器模拟

创建于 2017-05-02  ·  33评论  ·  资料来源: uuvsimulator/uuv_simulator

我们目前滥用 Gazebo 的激光传感器并将其称为声纳。

对声纳传感器(侧扫声纳多波束声纳)进行更真实的模拟将为 uuv_simulator 增加很多价值,并使其对更大的新社区更有趣。

enhancement help wanted

最有用的评论

嘿,我们也在努力以uuv_simulator进行传感器模拟。 目前,我们有一些类似于侧扫的东西,可以为我们提供瀑布图像。 更重要的是,我们正在努力打造一个不错的 FLS 传感器: https :

如果对此仍有兴趣,我将提供一些关于声纳外观的示例,并可能努力完成所有工作并为此 repo 创建 PR。

所有33条评论

嘿,我们也在努力以uuv_simulator进行传感器模拟。 目前,我们有一些类似于侧扫的东西,可以为我们提供瀑布图像。 更重要的是,我们正在努力打造一个不错的 FLS 传感器: https :

如果对此仍有兴趣,我将提供一些关于声纳外观的示例,并可能努力完成所有工作并为此 repo 创建 PR。

@nilsbore一些例子会很棒。 我也对这个很感兴趣。

@nilsbore ,非常欢迎所有贡献:) 如果您想提出拉取请求,我很乐意对其进行审核。 另一种解决方案是在 UUV 模拟器的文档中添加有关如何集成插件的信息,以便更多人可以使用它:)

@musamarcusso ,感谢您在这个模拟器上所做的出色工作! 我会看看为这个 repo 创建一个干净的 PR 需要多少,并遵循建议的路径之一,谢谢!

@nilsbore

我期待看到您在将声纳适应 UUV 模拟器方面取得的进展。 请告诉我们! =D

FLS 有什么进展吗? 我也想利用。

你好@nilsbore! 自从这个线程开始以来已经有一段时间了,但是我可以知道到目前为止 FLS 模拟的进展如何? 我也期待着使用您在 Gazebo 中进行的声纳模拟,希望您在此之后取得更多进展

*在您最后一次更新之后。

大家好,很抱歉我未能在这个主题上取得太大进展。 传感器模拟是开源的,可在此处获得: https : 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.xacro ,并在您的车辆 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 主题上看到类似此图像的内容: video

当时间允许时(在截止日期之后),我将尝试将这个传感器分解成它自己的包,任何想要使用 FLS sim 的人都可以使用它。

最好的事物,
尼尔斯

注意到@nilsbore ! 非常感谢您的更新。 我也会尝试对该传感器进行改进,以便提高其性能。

到目前为止真的很棒的更新和进步! 期待关于这个项目的进一步更新和非常好的工作@nilsbore!

我从@NickSadjoli@nilsbore 那里挑选了樱桃,试图从主人那里得到一些 FF。 看起来你们俩在不同的方面有分歧。

很高兴让你们看看并发表评论/提交,以便其他人可以使用。

抱歉回复晚了@willcbaker ! 我与@nilsbore不同,因为我试图将他的代码实现到我自己的项目中,该项目似乎在环境中具有不同的参数。 然而,他的代码在我的环境中运行良好,尽管可以应用一些改进使其更类似于“用于实时应用程序的新型基于 GPU 的声纳模拟器”论文中提到的实现。

FLS upgraded-turbidwater

不幸的是,由于其他问题,我在改进代码方面没有取得太大进展,但我会确保在有时间时发布更新。

就您所做的提交而言,我可以肯定地说,您所做的添加与我为我的分支所做的完全相同。 它现在应该与 Gazebo 完美配合,您可以从“rexrov/depth/image_sonar”主题中获取声纳图像。

我应该注意到,目前该名称与“/depth”主题紧密相关,因为传感器实现目前需要使用深度相机。 我们应该看看这是否可以改进以避免可能的混淆,并希望很快就会有进一步的更新。

@NickSadjoli ,如果

@musamarcusso抱歉之前没有提供链接。 我有一个工作分支,在 Rexrov UUV 上有这个声纳的工作示例,但请注意,这个分支包含其他不工作的实验代码,我之前尝试重新创建参考论文中提到的 FLS。 分行链接如下:

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

在此分支中添加或使用的其他需要注意的事项或更改:

  • 一个名为“test_turbid_water.world”的定制测试世界,很大程度上基于我为在我的研究项目中使用而修改的“subsea_bop_panel.world”。
  • 包含来自 Niels 的 FLS 实现的工作 rexrov 模型位于目录“uuv_descriptions/robots/rexrov_test.xacro”中,最初基于“rexrov_sonar.xacro”模型。 该模型将之前的 m450 或 p900 fls 注释掉,并替换为上面 Niels 推荐的 fls sonar xacro。
  • 自定义的“rexrov_fls.rviz”视图,使 Rviz 直接显示到 /rexrov/depth/image_raw_sonar 和前置 default_camera 主题。
  • 自定义启动文件,“test_turbid_water.launch”用于启动上述所有更改组合,直接引用自定义世界和Rviz

如果当前分支中文件的组织过于混乱,请在此线程中给我反馈,以便我可以制作该分支的更清晰版本供您拉取。

感谢并期待您的反馈/意见

  • 尼克萨卓利

编辑:忘记附加存储库链接

嗨,@NickSadjoli
我正在试用您的 uuv_simulator-realistic-sonar-sim-48。 我得到的第一个错误是在 catkin_make 安装期间“缺少 uuv_laser_to_sonar/launch”。 我创建了一个空的启动文件夹作为解决方法。 然后我运行了“roslaunch uuv_gazebo_worlds test_turbid_water.launch”并得到了几个错误,包括

  1. [错误] [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 上测试您的代码。 谢谢。 C. 简

嗨,@NickSadjoli
跟踪错误后,结果是 opencv 库没有正确链接。 作为一种解决方法,我向 image_sonar_ros_plugin 显式添加了所需的 opencv 库。 请让我知道是否有更好的方法来修复原始错误。

我还注意到 my_frame (和地图)要么没有定义,要么没有从世界获取 tf。 知道如何解决问题吗? 感谢您的贡献。 C. 简

你好@chyphen777!

很抱歉,这是对您的询问的迟到答复。

丢失启动文件的错误可能是由于我包含了几个无论如何都不会在 FLS 模拟中使用的目录,导致 CMake-s 混乱。 我已经更新了我的分支来清理它,现在应该可以修复这些错误。 然而不幸的是,我似乎不小心删除了这个分支中的一些必要文件,这导致 Gazebo GUI 启动时出现错误和分段错误。 但是请注意,实际的凉亭主题仍会启动,并且 RViz 偶尔仍可以正常启动,因此它还没有完全中断。

我将尝试使用分支修复此问题,如果问题仍然存在,则将其恢复到之前的提交。 请注意,这可能需要一段时间,因为我还在工作中处理其他事情,所以我可能没有太多时间。

至于“我们没有剪辑”和“不支持传感器类型[深度]的转换”错误,我不确定这些是否是RViz中未显示声纳图像的可能原因,因为我仍然能够即使出现这些错误,我的 RViz 上也会显示图像。 我认为这很可能归因于符号查找错误,不幸的是我还没有在本地存储库中遇到过。

在相关说明中,我不确定 opencv 库是否也需要显式链接到 CMakeLists ,因为我能够在不需要它的情况下很好地启动世界。 但是,我也会尝试对此进行研究。 感谢您为可能遇到类似问题的其他用户提供创可贴错误。

@chyphen777

我刚刚对当前分支做了一些小的修改,它现在在我的机器上运行良好,所以你应该能够切换到这个分支并使用 catkin_make install 编译所有内容。

但是,需要注意的是,分支有时似乎不稳定,您可能会遇到以下类型的错误:

current_branch_not_stable

如果您遇到此类错误,您应该能够关闭并重新启动启动文件以使 Gazebo 和 RViz 启动并运行(至少我能够做到)。 这种不稳定性绝对令人讨厌,我将尝试进一步研究导致这种情况的原因,以便分支更加稳定。

此外,不幸的是,我也没有仔细研究 my_frame 和 map 未定义或未从世界的 tf. 我怀疑这可能是由于我之前尝试使用另一个尚未成功的 FLS 解决方案的遗留问题。 同样,一旦我有更多时间,我会尝试研究这个问题,并在我有更多更新时回复您。

干杯并感谢您的反馈 C. Chien! - 尼古拉斯 S.

嗨, @NickSadjoli

感谢您的回复、修复和有用的信息。 我可以运行你的声纳模拟器。 抱歉回复晚了。 我被转移到其他项目上。 请随时通知我们任何更新。
问候,C. Chien。

@尼克萨乔利
首先,在 UUV 模拟器的 FLS 实现方面做得很好,这对社区来说是一笔巨大的财富! 我有几个关于它的问题,因为我计划进行一些细微的更改,以使 FLS 与我通常部署到现场的硬件相匹配。

  1. 我如何添加另一个声纳,例如,一个向前看,一个向后看? 看起来在 FLS 图像生成方面对相机有很多相互依赖,寻求您的指导。

  2. 这是基于什么声纳,它的垂直孔径是多少? 如果我想如何改变声纳的垂直孔径?

  3. 传感器的最大范围是多少,如果需要,我将如何更改?

  4. 在文件 rexrov_test.xacro 中,在启动 FLS 的块中,“samples = 100”指的是什么?

约翰

@尼克萨乔利
希望在即将进行的一些工作中正确引用这一点。 我将使用 UUV 模拟器引用,但还有其他作品需要引用吗? 也许“一种用于实时应用的新型基于 GPU 的声纳模拟器?”

@jake3991至少我的原始实现是基于您所指的论文。 我不知道@NickSadjoli是否添加了其他作品中的任何概念。

很好!

@nilsbore我试图了解您的实现和成像声纳的图像形成。 你能指出用于实现ConstructSonarImageConstructScanImage的方程式吗? 例如,为什么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这段代码来自很久以前,我不记得我从哪里得到了这些方程。 老实说,实现这一点时的重点更多是创建看起来逼真的图像,而不是完全正确的声纳模型。 一个好的开始可能是查看@jake3991引用的论文。

对于那些对 Gazebo 中的多波束声纳感兴趣的人,我在 Dave 项目中构建了一个多波束声纳插件,它也包含了 uuv_simulator。 它使用 Nvidia Cuda 库并计算高达 10 Hz 刷新率、900 kHz 频率、10 m 范围的强度/范围数据。 有关更多详细信息,请访问 https://github.com/Field-Robotics-Lab/dave/wiki/Multibeam-Forward-Looking-Sonar
image

嗨,很抱歉在很长一段时间后才回复这个帖子,因为我正在为我的项目处理另一个大型零件/组件。

这实际上也意味着我不再完全致力于模拟器的开发,因为我已经将这项工作交给了我的一位同事,他从去年开始就一直在处理它。 不幸的是,我忘了向他提及这个线程,以防有关于任何开发的问题。

还要澄清一下:在我处理声纳模型的过程中,我没有做@nilsbore为声纳编写的任何低级(即 C 源代码)代码。 但是,我的同事可能对其进行了一些小的调整,以改变其某些行为,以更真实地模拟混浊水下环境中的 FLS 行为。

@jake3991回答您的问题:

  1. 据我所知,我的同事到目前为止只能通过调整声纳的一些 URDF 参数来“旋转”声纳。 如果您仍然感兴趣,我会尝试更详细地询问他是如何完成的。
  2. 最初声纳仍然基于@nilsbore使用的 Blueview 声纳。 然而,最近我的同事想出了如何调整光圈以遵循不同的声纳规格,特别是Blueview M750D 声纳。 我相信他已经通过在 xacro 调用中添加一些参数来做到这一点,但我再次需要向他询问有关该实现的更多详细信息。
  3. 与2相同的答案
  4. 不幸的是,没有设法使用该软件对此有明确的答案。 这个需要问同事。

另请注意,我的同事正计划发表一篇关于他一直在研究的基于 uuv_simulator 的模拟器的论文。 因此,需要将有关我们项目当前实施的更多详细信息发送给他。 如果有必要,我会尝试让他连接到此线程,以回答有关我们项目实施的任何进一步问题。

然而,关于实际“准确”的声纳模型,@woensug-choi 链接的工作似乎可能是一个更“准确”的模型,因为它使用了更直接的光线追踪实现。 虽然我自己并不完全确定这对于基于模拟的开发总体来说有多好。

将让我的同事检查实现,看看它可以如何很好地集成到我的项目模拟器中。

再次向大家对这个帖子的回复很晚表示深深的歉意。

@jake3991另外为了澄清我们项目模拟器的引用:由于我们还没有在模拟器上获得实际成功的论文发表,我建议您仍然使用您链接的论文以及@nilsbore进行正确引用。

一旦我们在出版物上的出版物被接受或完成,那么我们的论文的引用也可能会被使用。

请注意,我使用的是来自@musamarcusso 的https://github.com/uuvsimulator/uuv_simulator ,它已经集成了@nilsbore的声纳模块。
@jake3991问题上澄清@NickSadjoli

  1. 我们为声纳本身添加了一个 URDF。 因此,通过添加另一个 URDF 并重新映射参数名称,您的模拟器中可以有 2 个声纳。

2.就像@NickSadjoli所说的,我们是从一个蓝图声纳引用的。
要推特声纳的 VFOV:
在声纳的 URDF xacro 文件中,您需要指定图像的 HFOV,宽度和高度。 Gazebo 然后根据图像宽度和 HFOV 计算焦距。 使用相同的焦距,他们使用图像的高度反向计算 VFOV。 因此,要指定所需的 VFOV,您需要计算图像高度。

焦距=(宽度/2)/tan(deg2rad(HFOV)/2)或焦距=(高度/2)/tan(deg2rad(VFOV)/2)

3.您需要在推特上发布声纳的C++代码。 在@nilsbore的声纳的 C++ 代码中,我为“范围”值添加了一个订阅者,而不是像@nilsbore原始作品那样具有恒定范围。 这样我就可以像大多数声纳一样使用声纳显示的最大范围。

  1. 在“FLS”的 xacro 中,未使用“samples”参数。 在“Multibeam”的xacro中,它使用凉亭的激光点来传导多光束。 因此请参考: http :

希望这可以帮助。

@nilsbore@NickSadjoli

  1. 在 sonar_snippets.xacro 中,${width} 和 ${height} 是什么意思? 它与生成的图像声纳的宽度和高度有关吗? 如果是这样,我尝试设置 ${width} 和 ${height} 的值,然后打印声纳图像主题的高度和宽度值。 但这些价值观是不同的。 你能向我解释一下,为什么会这样?
  2. 是否有可能获得更大范围的声纳,以便我可以在声纳图像中看到更远的障碍物?

@Jenanaputra请参考我上面的评论.....

  1. 你是怎么设置话题的? 你改参数了吗{$topic}在 xacro 文件中? 或者您是否将 C++ 代码修改为您想要的特定主题? (对我来说修改代码听起来更开胃)
  2. 声纳实际上是对gazebo 深度相机的修改,在gazebo 的相机插件中,${width} 和${height} 会影响传感器的VFOV 和HFOV(方程式在我之前的帖子中提到)。 通常相机的宽度为1280,高度为720。对于声纳,我将宽度设置为1280并使用公式计算高度。 这样我就得到了我想要的传感器的 VFOV。
  3. 正如我之前在上一篇文章中提到的,范围的修改需要您修改 C++ 代码。 该范围目前是一个固定值硬编码。
    最后别忘了修改C++代码后进行catkin clean和catkin make(假设你使用的是ROS包)

@loguna123感谢您的重播。 您知道如何获取/了解此 fls 插件中使用的深度值吗?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

hughhugh picture hughhugh  ·  5评论

Timple picture Timple  ·  24评论

Timple picture Timple  ·  7评论

HashirZahir picture HashirZahir  ·  10评论

musamarcusso picture musamarcusso  ·  12评论