前视声呐目标识别定位(三)-部署至机器人

前视声呐目标识别定位(一)-基础知识

前视声呐目标识别定位(二)-目标识别定位模块   

        开发了多波束前视声呐目标识别定位模块后,自然期待能将声呐部署至AUV,实现AUV对目标的抵近观测。原本规划着定位模块不仅能将目标定位信息提供给AUV进行辅助导航,还能借助水声通信模块在水面实现在水面开关声呐及调节声呐参数,开关目标识别模块,传输目标图像向观测者展示,录制目标数据包以进行模型训练等。在先前的文章已经介绍了,前视声呐目标定位只能提供目标距离及水平开角信息,而缺少垂直开角的信息,所以使用前视声呐定位是无法得到目标物具体坐标信息的,只能起辅助作用。

      先前的文章已经介绍了声呐目标识别及定位模块,在部署过程中有许多问题,比较关键的有三个。首先是目标识别模块需要GPU算力板,算力板尺寸必须满足AUV布局的需求限制,同时要考虑散热的问题;再者声呐的驱动及目标识别模块都是在ubuntu下使用ROS/ROS2进行开发,而AUV的导航模块是性能普通的工控机,还是特制的系统,使用水声通信模块必须借助工控机做中继,只能考虑其它通信方式;最后水声通信的带宽非常低,是比较难满足图片传输的条件的。

      虽然接到任务时时间紧需求多任务重,鼓捣了一段时间还是开发出了一个小小的demo。不过开发完后整个项目都没有了,所以也没有部署至AUV进行下水测试,最终只能算是自娱自乐了。最近整理资料时在角落里发现了这些东西,虽然我也觉得整个框架粗糙且暴力,不尽如人意,但想着水下圈子这么小,资料这么少,把这个demo开源也许能为一些水下爱好者的研究开发提供一条不同的思路吧,同时也算是把这些工作做一个归档,日后可以查阅。

      项目github地址:GitHub - cabinx/yolov5_humble_fls_tcp: yolov5_humble_fls with tcp/ip transmission

      接下来处理上文提及的三个问题。首先综合考虑尺寸和算力后选择了NVIDIA XAVIER开发板,在密闭的舱段内散热的问题倒是没有啥好办法。再者XAVIER板和AUV的工控机之间通过TCP/IP通信,约定好协议就好。最后关于目标图片,只截取目标部分的图片,然后压缩编码传输,以满足水声通信的限制。

      整个软件的框架如下图。

1234

      在XAVIER板上center_server起一个处理中心的作用。其接收AUV工控机下发的指令信息,并转发给相应各个模块。同时接收各个模块的数据,封装后发送给AUV工控机。yolov5_humble_fls是目标识别模块,和之前的识别模块相比主要添加了TCP通信模块和截图封装传输模块。sonar_node是声呐驱动模块,当时选择的是Oculus m750d这款声呐。control center是指令转换模块,将auv下发的指令解包转换为shell指令以执行相应任务,非常粗暴,并不是非常推荐,只是当时简单地想着怎么简单怎么来。

      在工控机上auv_server也起信息中转的作用,接收水面指令转发给XAVIER板,同时接收XAVIER板数据转发给水面,但是需要根据协议解包目标数据以辅助导航。还有一个client test模块,是我用来模拟水面发送指令的测试模块。

      水声通信模块我没接触在此就不讨论了,但只要知道协议无非是在auv server上再添加相应的编解码。

      框架原先我是在ROS Neotic下写的,测试时Oculus 750d声呐通过网线和XAVIER板连接,然后用我的台式机模拟AUV的工控机,直接用一根网线连接,测试基本实现了各个功能。现在我用ROS2 humble大致重新整理了一遍,测试就只在我的台式机测试了,台式机既模拟XAVIER板,又模拟AUV工控机。此外我手头上已经没有声呐进行测试了,所以声呐驱动模块我就没有在ROS2重新整理,以后我会将之前写的ROS版本的上传至github,该版本是测试过是能正常接收发布声呐数据的。

      目前只能使用离线数据包进行测试,将声呐数据包下载至bag文件夹下,启动auv_server.py,center_sever.py,control_center.py。然后通过client_test.py脚本进行测试。后续我会通过几个例子介绍整个框架的信息流。

python3 client_test.py 1 1      #启动识别模块
python3 client_test.py 5 1      #播放离线数据包
python3 client_test.py 7 1      #对识别到的目标截图传输
python3 client_test.py 8 1      #开始录制数据包
python3 client_test.py 9 1      #结束录制数据包
python3 client_test.py 6 1      #结束播放离线数据包
python3 client_test.py 2 1      #结束识别模块python3 client_test.py 3 1      #启动声呐模块
python3 client_test.py 4 1      #关闭声呐模块python3 client_test.py 11 1/2   #切换声呐高低频,1为低频,2为高频
python3 client_test.py 12 100   #设定声呐gamma correction值为100
python3 client_test.py 13 20    #设定声呐量程为20m
python3 client_test.py 14 50    #设定增益为50
python3 client_test.py 15 1500  #设定声速为1500
python3 client_test.py 16 25    #设定盐度为25

        当时还想过实际应用中把这些指令做个图形界面的话将会方便不少,现在暂时不需要了。

        当初ROS1版本时测试时,台式机及XAVIER板的系统均为Ubuntu20.04,ROS版本为Neotic;ROS2版本测试时,台式机版本为Ubuntu22.04,ROS版本为Humble。

       ROS1 Neotic版本测试视频:

yolov5-ros1-test

         整理后ROS2 Humble版本测试视频:

yolov5-sonar-test

      

CSDN上传视频实在麻烦,测试视频可以到知乎上看一下。

        https://zhuanlan.zhihu.com/p/690658706

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++算法——二分法查找

一、二分查找算法思想和模版 1.算法思想 2.细节处理 3.模板 二、二分查找 1.链接 704. 二分查找 - 力扣(LeetCode) 2.描述 3.思路 先从最经典的题目去切入,思路就是二分查找,这里我们认为,目标值既可以看作为左部…

ES6参数默认值

1.参数是按顺序传递的,参数的默认值可以赋给任意位置的参数,给参数传undefined,参数才会使用默认值,例子如下: function foo(a, b 2, c 3) {console.log(a, b, c); } foo() //undefined 2 3 foo(1, null, undefined…

XSS 与 CSRF 攻击——有什么区别,如何加以防护

跨站脚本(XSS)和跨站请求伪造(CSRF),它们将恶意脚本注入目标系统,以进一步利用技术栈或窃取用户数据。 什么是 XSS 和 CSRF? CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和受害用户之间的信任关系。XSS和跨站脚…

WPS二次开发系列:以自动播放模式打开PPT文档

在前面文章中 WPS SDK打开文档并实现保存回传 介绍了如何使用WPS SDK打开文档,那么我们是否能够实现在打开WPS 文档的时候能够传递一些参数来控制打开文档的行为呢,经过研究WPS SDK相关文档和API,最终实现了 以自动播放方式打开PPT文档功能。…

【RAG】内部外挂知识库搭建-本地GPT

大半年的项目告一段落了,现在自己找找感兴趣的东西学习下,看看可不可以搞出个效果不错的local GPT,自研下大模型吧 RAG是什么? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来…

Springboot集成token认证

一、引出session问题以及token、鉴权 session都是保存在内存中,认证用户增多,服务端开销明显增大。若是认证的记录保存在某台服务器内存中时,意味着用户的下次请求只能够在该服务器内存中进行认证。CSRF跨站攻击 token的鉴权机制&#xff1…

mysql--sql常用语句

通过profile命令来查看当前最主要的耗费时间的步骤。 mysql> select count(1) from t1; ---------- | count(1) | ---------- | 1 | ---------- 1 row in set (0.11 sec)mysql> show profiles; ----------------------------------------------- | Query_ID | Du…

Spring Cloud微服务入门(二)

微服务的技术栈 服务治理: 服务注册、发现、调用。 负载均衡: 高可用、集群部署。 容错: 避免雪崩、削峰、服务降级。 消息总线: 消息队列、异步通信,数据一致性。 网关: 校验路径、请求转发、服务集成…

Git 常用命令集

Git 常用命令集 符号说明&#xff1a; 尖括号&#xff08;< >&#xff09;表示需要替换成尖括号内文字描述的内容 方括号&#xff08;[ ]&#xff09;表示可选项 远程库名&#xff0c;形如 git.com 路径名&#xff0c;形如 D:\YouthGit\GitTest 或者 GitTest 1.初始化操…

【Web】2024红明谷CTF初赛个人wp(2/4)

目录 ezphp playground 时间原因只打了2个小时&#xff0c;出了2道&#xff0c;简单记录一下 ezphp 参考文章 PHP filter chains: file read from error-based oracle https://github.com/synacktiv/php_filter_chains_oracle_exploit 用上面的脚本爆出部分源码&#xff…

SSM项目转Springboot项目

SSM项目转Springboot项目 由于几年前写的一个ssm项目想转成springboot项目&#xff0c;所以今天倒腾了一下。 最近有人需要毕业设计转换一下&#xff0c;所以我有时间的话可以有偿帮忙转换&#xff0c;需要的私信我或&#xff0b;v&#xff1a;Arousala_ 首先创建一个新的spr…

蓝桥杯第793题——排水系统

题目描述 对于一个城市来说&#xff0c;排水系统是极其重要的一个部分。 有一天&#xff0c;小 C 拿到了某座城市排水系统的设计图。排水系统由 n 个排水结点&#xff08;它们从 1∼n 编号&#xff09;和若干个单向排水管道构成。每一个排水结点有若干个管道用于汇集其他排水…

git分支-基本分支与合并

问题假设 让我们通过一个简单的分支和合并的例子&#xff0c;演示在实际工作中可能会使用的工作流程。将按照以下步骤进行&#xff1a; 在网站上进行一些工作。为正在开发的新用户故事创建一个分支。在该分支上进行一些工作。 在这个阶段&#xff0c;我们可能会接到一个电话…

线上研讨会 | 应对汽车毫米波雷达设计中的电磁挑战

智能汽车、新能源汽车最近几年一直是汽车行业关注的热点&#xff0c;随着5G技术越来越普及&#xff0c;汽车智能化发展将越来越迅速。从传统汽车到智能汽车&#xff0c;不是简单功能的增强&#xff0c;而是从单一功能的交通工具变成可移动的办公和娱乐空间&#xff0c;成为物联…

STM32实现软件SPI对W25Q64内存芯片实现读写操作

先看看本次实验的成果吧&#xff1a; 这么简单的一个程序&#xff0c;我学习了一个星期左右&#xff0c;终于把所有的关节都打通了。所有代码都能什么都不看背着敲出来了。为了使自己的记忆更为清晰&#xff0c;特意总结了一个思维导图&#xff0c;感觉自己即便是日后忘记了看一…

[动态规划]代码随想录总结(自用)

文章目录 动态规划入门斐波那契数路径问题整数拆分动态规划在树中的应用 背包问题01背包完全背包 打家劫舍买卖股票的最佳时机&#xff08;状态转换&#xff09;最长子序列最长公共序列子序列有关&#xff08;删除元素&#xff09;回文子串 动态规划入门 斐波那契数 力扣相关…

机器学习的15个概念

机器学习 有监督学习 有监督学习是利用训练数据集进行预测的机器学习任务。有监督学习可以分为分类和回归。回归用于预测“价格”“温度”或“距离”等连续值&#xff0c;而分类用于预测“是”或“否”、“垃圾邮件”或“非垃圾邮件”、“恶性”或“良性”等类别。 分类包含…

如何保护IP地址?安全匿名上网的方法

当互联网成为每个家庭的重要组成部分后&#xff0c;IP地址就成了你的虚拟地址。您的请求从该地址开始&#xff0c;然后 Internet 将消息发送回该地址。那么&#xff0c;您担心您的地址被泄露吗&#xff1f; 对于安全意识高或者某些业务需求的用户&#xff0c;如果您正在寻找保护…

C++ 静态库与动态库的生成和使用:基于 VS Studio 生成 newmat 矩阵库的静态库与动态库

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 静态库与动态库区分 Part.II 静态库的生成与使用 (newmat)Chap.I 生成静态库Chap.II 使用静态库 Part.III 动态库的生成与使用 (newmat)Chap.I 生成动态库Chap.II 使用动态库 Part.IV 文件内容Chap.I test.cpp (静态库)Cha…

Hadoop Yarn

首先先从Yarn开始讲起&#xff0c;Yarn是Hadoop架构的资源管理器&#xff0c;可以管理mapreduce程序的资源分配和任务调度。 Yarn主要有ResourceManager、NodeManage、ApplicationMaster&#xff0c;Container ResourceMange负责管理全局的资源 NodeManage&#xff08;NM&a…