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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之一 简单视频放大抖动效果 一、简单介绍 二、简单视频放大抖动效果实现原理 三、简单视频放大…

面试经典150题【131-140】

文章目录 面试经典150题【131-140】123.买卖股票的最佳时机III188.买卖股票的最佳时机IV二分查找的板子:35.搜索插入位置74.搜索二维矩阵162.寻找峰值33.搜索旋转排序数组34.在排序数组中查找元素的第一个和最后一个位置153.寻找旋转排序数组中的最小值4.寻找两个正…

练习 18 Web [RoarCTF 2019]Easy Calc

表达式注入&#xff0c;被屏蔽字符的处理方式 一开始先看一下前端的源码 有一个calc.php&#xff0c;肯定需要打开 这是calc中的代码 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str $_GET[num];$blacklist [ , \t, \r, \n,\,…

计算机网络-HTTP相关知识-HTTP的发展

HTTP/1.1 特点&#xff1a; 简单&#xff1a;HTTP/1.1的报文格式包括头部和主体&#xff0c;头部信息是键值对的形式&#xff0c;使得其易于理解和使用。灵活和易于扩展&#xff1a;HTTP/1.1的请求方法、URL、状态码、头字段等都可以自定义和扩展&#xff0c;使得其具有很高的…

【Android、 kotlin】kotlin学习笔记

基本语法 fun main(){val a2var b "Hello"println("$ (a - 1} $b Kotlin!")} Variables 只赋值一次用val read-only variables with val 赋值多次用var mutable variables with var Standard output printin() and print() functions String templ…

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

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

分布式链路追踪与云原生可观测性

分布式链路追踪系统历史 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - Google Dapper&#xff0c;大规模分布式系统的跟踪系统大规模分布式系统的跟踪系统&#xff1a;Dapper设计给我们的启示 阿里巴巴鹰眼技术解密 - 周小帆京东云分布式链路追踪在金…

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二&#xff1a;在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

Acrel-1000DP光伏监控系统在尚雷仕(湖北)健康科技有限公司5.98MW分布式光伏10KV并网系统的应用

摘 要&#xff1a;分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式多为自发自用&#xff0c;余电上网&#xff0c;部分项目采用全额上网模式。分布式光伏全额上网的优点是可以充分利用分布式光伏发电系统的发电量&#xff0c;提高分布式光伏发电系统的利用率。发展分…

C++ //练习 11.3 编写你自己的单词计数程序。

C Primer&#xff08;第5版&#xff09; 练习 11.3 练习 11.3 编写你自己的单词计数程序。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*************************************************************************> …

拾光坞N3 ARM 虚拟主机 i茅台项目

拾光坞N3 在Dcoker部署i茅台案例 OS&#xff1a;Ubuntu 22.04.1 LTS aarch64 cpu&#xff1a;RK3566 ram&#xff1a;2G 部署流程——》mysql——》java8——》redis——》nginx mysql # 依赖 apt update apt install -y net-tools apt install -y libaio* # 下载mysql wg…

JavaBean是什么?

Bean的本意为豌豆、子实&#xff0c;在这里引申为一种实体。JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean&#xff0c;类必须是具体的和公共的&#xff0c;并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性&#xff0…

鸿蒙南向开发实战:【智能窗帘】

样例简介 智能窗帘设备不仅接收数字管家应用下发的指令来控制窗帘开启的时间&#xff0c;而且还可以加入到数字管家的日程管理中。通过日程可以设定窗帘开关的时间段&#xff0c;使其在特定的时间段内&#xff0c;窗帘自动打开或者关闭&#xff1b;通过日程管家还可以实现窗帘…

基础篇3 浅试Python爬虫爬取视频,m3u8标准的切片视频

浅试Python爬取视频 1.页面分析 使用虾米视频在线解析使用方式&#xff1a;https://jx.xmflv.cc/?url目标网站视频链接例如某艺的视频 原视频链接 解析结果: 1.1 F12查看页面结构 我们发现页面内容中什么都没有&#xff0c;video标签中的src路径也不是视频的数据。 1.2 …

VUE运行项目后,只有local地址,没有network地址(添加nerwork地址)

使用前 使用后 解决方案 1.找到build文件夹下的webpack.dev.conf.js文件&#xff0c;更改messages中的内容 devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({compilationSuccessInfo: {messages: [App running: ,Local: http://${devWebpackConfig.devServer.hos…

【前端Vue】社交信息头条项目完整笔记第3篇:三、个人中心,TabBar 处理【附代码文档】

社交媒体-信息头条项目完整开发笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;一、项目初始化使用 Vue CLI 创建项目,加入 Git 版本管理,调整初始目录结构,导入图标素材,引入 Vant 组件库,移动端 REM 适配。二、登录注册准备,实现基本登录功能,登录状…

ObjectiveC-08-OOP面向对象程序设计-类的分离与组合

本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念&#xff0c;概念上简单来讲类是它是一组关系密切属性的集合&#xff0c;所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种&#xff0c;比如has a&#xff0c; is a&#xff0c;has some等&…

交互设计师、UI设计师、视觉设计师面试作品集包装模板figma源文件

页面数量&#xff1a;19页 页面尺寸&#xff1a;1920*1080PX 交付格式&#xff1a;figma 赠送文件&#xff1a;24款高质量样机 交付文件&#xff1a;作品集模板源文件、作品集包装psd源文件、作品集所用字体文件 该作品集虽然只有19页&#xff0c;但可根据需求复制作品集里已有…

offsetof宏定义的使用和模拟实现详解

目录 一.offsetof宏定义的使用二.offsetof宏的模拟实现三.总结 一.offsetof宏定义的使用 offsetof的第一个参数是数据类型(结构体或联合体)&#xff0c;第二个参数是偏移量 &#xff08;offsetof用于计算结构体和联合体的偏移量&#xff09; 返回值的类型是size_t&#xff08;无…

Spring Cloud微服务入门(二)

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