当前位置: 首页 > news >正文

【ROS】基于WIFI网络实现图像消息跨机实时传输

【开发背景】

研究机器人目标检测算法的时候,常常需要把推理图像实时展示出来,以供观摩。而ROS1提供的跨机通信方法,要么是配置单Master,要么是配置多Master;一方面配置麻烦,另一方面传输效率低下,特别是在无线网络环境下,那叫一个鸡肋,仿佛我只需要喝一杯水,他却把整个太平洋给我搬来了一样。忍无可忍之下,萌生了自己动手开发一个图像消息传输中间件的冲动!于是乎,“ image_zmqpp ” —— 应运而生了!

【软件支持】

Ubuntu14.04 + ROS Indigo

Ubuntu16.04 + ROS Kinetic

Ubuntu18.04 + ROS Melodic

Ubuntu20.04 + ROS Noetic

【硬件支持】

X86架构

ARM架构

【依赖安装】

如果你的平台能够联网,那么只需要运行一句话即可:

sudo apt-get install libzmq3-dev

如果你的平台和我一样,处于不那么方便联网的情况 ,那也不用担心,只需要照着下面做即可:

1、把我提供的功能包下载下来,解压到任意一个ROS工作空间

2、找到 zmq_sup/third_party 路径下的 libzmq.tar.gz 压缩包,并解压

3、在该目录下打开一个终端,运行下面指令

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
sudo make install

4、然后便可以回到工作空间下进行 catkin_make 啦

【使用方法】

比如,你有三个机器人A、B、C,以及一台上位机,

  • 上位机这边需要运行
roslaunch image_zmqpp image_zmq_sub.launch

其中 launch 文件中的机器人个数以及IP地址等参数需要你根据实际情况做出修改

<?xml version="1.0"?>
<launch><node pkg="image_zmqpp" type="image_zmqpp_sub" respawn="false" name="zmq_sub" output="screen"><param name="ip_num"     value="3"/><param name="ip_addr_1"     value="tcp://192.168.30.26:5555"/><param name="ip_addr_2"     value="tcp://192.168.1.54:5555"/><param name="ip_addr_3"     value="tcp://192.168.1.55:5555"/><param name="image_topic" value="img_zmq"/></node>
</launch>
  • 机器人A、B、C上分别运行
roslaunch image_zmqpp image_zmq_pub.launch

这个launch文件中的IP地址也是要根据实际情况修改的

比如机器人A

<?xml version="1.0"?>
<launch><node pkg="image_zmqpp" type="image_zmqpp_pub" respawn="false" name="zmq_pub" output="screen"><param name="ip_addr"     value="tcp://192.168.30.26:5555"/><param name="image_topic" value="img_zmq"/></node>
</launch>

机器人B

<?xml version="1.0"?>
<launch><node pkg="image_zmqpp" type="image_zmqpp_pub" respawn="false" name="zmq_pub" output="screen"><param name="ip_addr"     value="tcp://192.168.1.54:5555"/><param name="image_topic" value="img_zmq"/></node>
</launch>

这样,你只需要把图像话题改成需要传输的话题,即可非常简单完成跨机WIFI图传!

【效果一展】

 【福利来了】

私信我,拿源码!!

相关文章:

【ROS】基于WIFI网络实现图像消息跨机实时传输

【开发背景】 研究机器人目标检测算法的时候&#xff0c;常常需要把推理图像实时展示出来&#xff0c;以供观摩。而ROS1提供的跨机通信方法&#xff0c;要么是配置单Master&#xff0c;要么是配置多Master&#xff1b;一方面配置麻烦&#xff0c;另一方面传输效率低下&#xf…...

一次性说清楚 JAVA的 ThreadPoolExecutor 、newFixedThreadPool 和newCachedThreadPool 等

目录 1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么&#xff1f; 2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗&#xff0c;比如线程大小&#xff0c;线程等待时间 等等 3、newCachedThreadP…...

Android双目三维重建:Android双目摄像头实现双目测距

Android双目三维重建&#xff1a;Android双目摄像头实现双目测距 目录 Android双目三维重建&#xff1a;Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…...

解决Avoid using non-primitive value as key, use string/number value instead.

Avoid using non-primitive value as key, use string/number value instead. 意思是&#xff1a;避免使用非基本值作为键&#xff0c;而是使用字符串/数字值。 Duplicate keys detected: [object Object]. This may cause an update error. 意思是&#xff1a;检测到重复键:[o…...

重构·改善既有代码的设计.03之重构手法(上)

1. 前言 之前的重构系列中&#xff0c;介绍了书中提到的重构基础&#xff0c;以及识别代码的坏味道。今天继续第三更&#xff0c;讲述那些重构手法&#xff08;上&#xff09;。看看哪些手法对你的项目能有所帮助… 2. 重新组织函数 对函数进行整理&#xff0c;使之更恰当的…...

闭关修炼(0.0 pytorch基础学习)1

基于官网pytorch.org pytorch 动态 比较优秀 py3.7支持是最多的啦 原来anaconda 是蟒蛇的意思 细思极恐 python 是蛇 yi Introduction to PyTorch Tensors — PyTorch Tutorials 2.0.0cu117 documentation omygaga 英语极差 哈哈哈 tensor 多维数组 矩阵二维数组 Tensor…...

个人-计算机操作系统第一章

一、章节习题 1.操作系统的目标与应用环境有关&#xff0c;如分时系统&#xff0c;希望能提供良好的&#xff08;&#xff09;能力。 A、批处理B、可靠性C、稳定性D、人-机交互 2.&#xff08;&#xff09;是应用程序取得OS所有服务的唯一途径。 A、系统调用B、作业调度C、键…...

Python-责任链模式

介绍 责任链模式是一种行为型设计模式&#xff0c;它允许多个对象以链式的形式依次处理请求&#xff0c;直到请求被处理或者无处理对象为止 实现方式 责任链模式由多个处理器组成&#xff0c;每个处理器都可以处理一种请求。如果当前处理器无法处理请求&#xff0c;它将把请…...

HIT 计统实验2 二进制炸弹(gdb破解版) 拆弹过程

CSAPP 实验2是一个很好玩的实验,网上有很多参考资源写的都很好&#xff0c;本文增加了一些具体细节。 想要我的炸弹可以私信我。 还得看形式语言 &#xff0c; 炸弹6 7 有时间再拆 第1章 实验基本信息 1.1 实验目的 熟练掌握计算机系统的ISA指令系统与寻址方式熟练掌握Linu…...

echart 半环渐变仪表盘

实现效果如图&#xff1a; op配置项代码&#xff1a; let Chart this.$echarts.init(document.getElementById(dashboard-1));let option {// backgroundColor: #040d2e,series: [// 中间灰色轴线{type: gauge,radius: 150%, // 位置center: [50%, 90%],startAngle: 180,end…...

【springboot】自动加载分析

文章目录问题SpringBootApplication注解AutoConfigurationPackages.Registrar类AutoConfigurationImportSelector类springboot如何加载其他的starter总结问题 为什么我们在使用springboot的时候&#xff0c;只需要在maven中导入starter就能够使用呢&#xff1f;这里来分析一下…...

ChatGPT批量翻译-ChatGPT批量生成多国语言

ChatGPT翻译的准吗 ChatGPT是一种基于Transformer架构的自然语言处理技术&#xff0c;其翻译准确性取决于所训练的模型和数据集的质量。在特定的语料库和训练数据下&#xff0c;ChatGPT可以实现一定程度的准确翻译。但是&#xff0c;与人工翻译相比&#xff0c;ChatGPT的翻译质…...

Symble

ES6引入了一种新的原始数据类型 Symbol&#xff0c;表示独一无二的值。它是JavaScript语言的第七种数据类型&#xff0c;是一种类似于字符串的数据类型。 Symbol特点 Symbol 的值是唯一的&#xff0c;用来解决命名冲突的问题 Symbol值不能与其他数据进行运算 Symbol定义的对…...

能在家里赚钱的工作有哪些?适合普通人的兼职项目

当下对于普通人而言&#xff0c;想在社会上找到一份舒心安逸的工作很难&#xff0c;特别是在薪酬待遇这方面&#xff0c;更是低得让人心寒。那么&#xff0c;如果能有一份在家就可以做的事情&#xff0c;而且是收入也不少&#xff0c;那将是很多普通人的最佳选择。在这里&#…...

创建SaaS产品帮助中心的关键步骤

帮助中心是一款SaaS产品必不可少的一部分&#xff0c;为了帮助用户更好的解决产品相关问题&#xff0c;提高新用户的使用体验&#xff0c;并且引导用户更好的使用产品&#xff0c;那么应该怎样制作帮助中心呢&#xff0c;每个产品帮助中心都需要有自己的风格&#xff0c;根据产…...

高频算法:Leetcode53 最大子数组和

今天讲的是Leetcode第53题&#xff0c;最大子数组和 首先观察题目&#xff0c;题目需要我们找出具有最大和的连续子数组&#xff0c;直接拿题目中的示例来做一个演示&#xff0c;找一找什么规律下的连续子数组才能得到最大的和 先从-2开始&#xff0c;-2 1 -1 此时我们的和…...

如何编写接口自动化测试框架、

编写接口自动化测试框架需要注意以下几点&#xff1a; 接口选择&#xff1a;首先确定需要测试的接口&#xff0c;包括请求方式、URL、参数、返回值等信息。 框架设计&#xff1a;设计一个灵活的框架&#xff0c;可以根据接口类型&#xff08;RESTful API、SOAP API等&#xff…...

【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17

大家好&#xff0c;我是陶然同学&#xff0c;软件工程大三即将实习。认识我的朋友们知道&#xff0c;我是科班出身&#xff0c;学的还行&#xff0c;但是对面试掌握不够&#xff0c;所以我将用这100多天更新Java面试题&#x1f643;&#x1f643;。 不敢苟同&#xff0c;相信大…...

ESP32开发(1)----Espressif-IDE开发环境配置

Espressif-IDE开发环境配置前言一、ESP32-WROOM-32介绍二、IDE环境搭建三、建立第一个项目总结前言 最近得到一块ESP32-WROOM-32的开发板&#xff0c;没有原理图&#xff0c;但板子走线比较简单&#xff0c;看着板子上的布线大致猜一猜连接&#xff0c;然后试玩了一下&#xf…...

MyBatisPlus标准数据层开发

MyBatisPlus标准数据层开发2&#xff0c;标准数据层开发2.1 标准CRUD使用2.2 新增2.3 删除2.4 修改2.5 根据ID查询2.6 查询所有2.7 Lombok概念使用步骤步骤1:添加lombok依赖步骤2:安装Lombok的插件步骤3:模型类上添加注解2.8 分页功能步骤1:调用方法传入参数获取返回值步骤2:设…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...