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

2024-04-04 17:12

本文主要是介绍前视声呐目标识别定位(三)-部署至机器人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

前视声呐目标识别定位(四)-代码解析之启动识别模块

前视声呐目标识别定位(五)-代码解析之修改声呐参数

前视声呐目标识别定位(六)-代码解析之目标截图并传输

前视声呐目标识别定位(七)-代码解析之录制数据包

前视声呐目标识别定位(八)-代码解析之各模块通信

前视声呐目标识别定位(九)-声呐驱动

        开发了多波束前视声呐目标识别定位模块后,自然期待能将声呐部署至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

这篇关于前视声呐目标识别定位(三)-部署至机器人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876375

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5