嘿,我们也在努力以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 的声纳模拟器”论文中提到的实现。
不幸的是,由于其他问题,我在改进代码方面没有取得太大进展,但我会确保在有时间时发布更新。
就您所做的提交而言,我可以肯定地说,您所做的添加与我为我的分支所做的完全相同。 它现在应该与 Gazebo 完美配合,您可以从“rexrov/depth/image_sonar”主题中获取声纳图像。
我应该注意到,目前该名称与“/depth”主题紧密相关,因为传感器实现目前需要使用深度相机。 我们应该看看这是否可以改进以避免可能的混淆,并希望很快就会有进一步的更新。
嘿@NickSadjoli ,如果
@musamarcusso抱歉之前没有提供链接。 我有一个工作分支,在 Rexrov UUV 上有这个声纳的工作示例,但请注意,这个分支包含其他不工作的实验代码,我之前尝试重新创建参考论文中提到的 FLS。 分行链接如下:
https://github.com/NickSadjoli/uuv_simulator/tree/realistic-sonar-sim-48
在此分支中添加或使用的其他需要注意的事项或更改:
如果当前分支中文件的组织过于混乱,请在此线程中给我反馈,以便我可以制作该分支的更清晰版本供您拉取。
感谢并期待您的反馈/意见
编辑:忘记附加存储库链接
嗨,@NickSadjoli
我正在试用您的 uuv_simulator-realistic-sonar-sim-48。 我得到的第一个错误是在 catkin_make 安装期间“缺少 uuv_laser_to_sonar/launch”。 我创建了一个空的启动文件夹作为解决方法。 然后我运行了“roslaunch uuv_gazebo_worlds test_turbid_water.launch”并得到了几个错误,包括
嗨,@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 编译所有内容。
但是,需要注意的是,分支有时似乎不稳定,您可能会遇到以下类型的错误:
如果您遇到此类错误,您应该能够关闭并重新启动启动文件以使 Gazebo 和 RViz 启动并运行(至少我能够做到)。 这种不稳定性绝对令人讨厌,我将尝试进一步研究导致这种情况的原因,以便分支更加稳定。
此外,不幸的是,我也没有仔细研究 my_frame 和 map 未定义或未从世界的 tf. 我怀疑这可能是由于我之前尝试使用另一个尚未成功的 FLS 解决方案的遗留问题。 同样,一旦我有更多时间,我会尝试研究这个问题,并在我有更多更新时回复您。
干杯并感谢您的反馈 C. Chien! - 尼古拉斯 S.
嗨, @NickSadjoli :
感谢您的回复、修复和有用的信息。 我可以运行你的声纳模拟器。 抱歉回复晚了。 我被转移到其他项目上。 请随时通知我们任何更新。
问候,C. Chien。
@尼克萨乔利
首先,在 UUV 模拟器的 FLS 实现方面做得很好,这对社区来说是一笔巨大的财富! 我有几个关于它的问题,因为我计划进行一些细微的更改,以使 FLS 与我通常部署到现场的硬件相匹配。
我如何添加另一个声纳,例如,一个向前看,一个向后看? 看起来在 FLS 图像生成方面对相机有很多相互依赖,寻求您的指导。
这是基于什么声纳,它的垂直孔径是多少? 如果我想如何改变声纳的垂直孔径?
传感器的最大范围是多少,如果需要,我将如何更改?
在文件 rexrov_test.xacro 中,在启动 FLS 的块中,“samples = 100”指的是什么?
约翰
@尼克萨乔利
希望在即将进行的一些工作中正确引用这一点。 我将使用 UUV 模拟器引用,但还有其他作品需要引用吗? 也许“一种用于实时应用的新型基于 GPU 的声纳模拟器?”
@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这段代码来自很久以前,我不记得我从哪里得到了这些方程。 老实说,实现这一点时的重点更多是创建看起来逼真的图像,而不是完全正确的声纳模型。 一个好的开始可能是查看@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
嗨,很抱歉在很长一段时间后才回复这个帖子,因为我正在为我的项目处理另一个大型零件/组件。
这实际上也意味着我不再完全致力于模拟器的开发,因为我已经将这项工作交给了我的一位同事,他从去年开始就一直在处理它。 不幸的是,我忘了向他提及这个线程,以防有关于任何开发的问题。
还要澄清一下:在我处理声纳模型的过程中,我没有做@nilsbore为声纳编写的任何低级(即 C 源代码)代码。 但是,我的同事可能对其进行了一些小的调整,以改变其某些行为,以更真实地模拟混浊水下环境中的 FLS 行为。
@jake3991回答您的问题:
另请注意,我的同事正计划发表一篇关于他一直在研究的基于 uuv_simulator 的模拟器的论文。 因此,需要将有关我们项目当前实施的更多详细信息发送给他。 如果有必要,我会尝试让他连接到此线程,以回答有关我们项目实施的任何进一步问题。
然而,关于实际“准确”的声纳模型,@woensug-choi 链接的工作似乎可能是一个更“准确”的模型,因为它使用了更直接的光线追踪实现。 虽然我自己并不完全确定这对于基于模拟的开发总体来说有多好。
将让我的同事检查实现,看看它可以如何很好地集成到我的项目模拟器中。
再次向大家对这个帖子的回复很晚表示深深的歉意。
@jake3991另外为了澄清我们项目模拟器的引用:由于我们还没有在模拟器上获得实际成功的论文发表,我建议您仍然使用您链接的论文以及@nilsbore进行正确引用。
一旦我们在出版物上的出版物被接受或完成,那么我们的论文的引用也可能会被使用。
请注意,我使用的是来自@musamarcusso 的https://github.com/uuvsimulator/uuv_simulator ,它已经集成了@nilsbore的声纳模块。
在@jake3991问题上澄清@NickSadjoli :
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原始作品那样具有恒定范围。 这样我就可以像大多数声纳一样使用声纳显示的最大范围。
希望这可以帮助。
@nilsbore和@NickSadjoli ,
@Jenanaputra请参考我上面的评论.....
@loguna123感谢您的重播。 您知道如何获取/了解此 fls 插件中使用的深度值吗?
最有用的评论
嘿,我们也在努力以
uuv_simulator
进行传感器模拟。 目前,我们有一些类似于侧扫的东西,可以为我们提供瀑布图像。 更重要的是,我们正在努力打造一个不错的 FLS 传感器: https :如果对此仍有兴趣,我将提供一些关于声纳外观的示例,并可能努力完成所有工作并为此 repo 创建 PR。