【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网络实现图像消息跨机实时传输
【开发背景】 研究机器人目标检测算法的时候,常常需要把推理图像实时展示出来,以供观摩。而ROS1提供的跨机通信方法,要么是配置单Master,要么是配置多Master;一方面配置麻烦,另一方面传输效率低下…...
一次性说清楚 JAVA的 ThreadPoolExecutor 、newFixedThreadPool 和newCachedThreadPool 等
目录 1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么? 2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗,比如线程大小,线程等待时间 等等 3、newCachedThreadP…...
Android双目三维重建:Android双目摄像头实现双目测距
Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建: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. 意思是:避免使用非基本值作为键,而是使用字符串/数字值。 Duplicate keys detected: [object Object]. This may cause an update error. 意思是:检测到重复键:[o…...
重构·改善既有代码的设计.03之重构手法(上)
1. 前言 之前的重构系列中,介绍了书中提到的重构基础,以及识别代码的坏味道。今天继续第三更,讲述那些重构手法(上)。看看哪些手法对你的项目能有所帮助… 2. 重新组织函数 对函数进行整理,使之更恰当的…...
闭关修炼(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.操作系统的目标与应用环境有关,如分时系统,希望能提供良好的()能力。 A、批处理B、可靠性C、稳定性D、人-机交互 2.()是应用程序取得OS所有服务的唯一途径。 A、系统调用B、作业调度C、键…...
Python-责任链模式
介绍 责任链模式是一种行为型设计模式,它允许多个对象以链式的形式依次处理请求,直到请求被处理或者无处理对象为止 实现方式 责任链模式由多个处理器组成,每个处理器都可以处理一种请求。如果当前处理器无法处理请求,它将把请…...
HIT 计统实验2 二进制炸弹(gdb破解版) 拆弹过程
CSAPP 实验2是一个很好玩的实验,网上有很多参考资源写的都很好,本文增加了一些具体细节。 想要我的炸弹可以私信我。 还得看形式语言 , 炸弹6 7 有时间再拆 第1章 实验基本信息 1.1 实验目的 熟练掌握计算机系统的ISA指令系统与寻址方式熟练掌握Linu…...
echart 半环渐变仪表盘
实现效果如图: op配置项代码: 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的时候,只需要在maven中导入starter就能够使用呢?这里来分析一下…...
ChatGPT批量翻译-ChatGPT批量生成多国语言
ChatGPT翻译的准吗 ChatGPT是一种基于Transformer架构的自然语言处理技术,其翻译准确性取决于所训练的模型和数据集的质量。在特定的语料库和训练数据下,ChatGPT可以实现一定程度的准确翻译。但是,与人工翻译相比,ChatGPT的翻译质…...
Symble
ES6引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。 Symbol特点 Symbol 的值是唯一的,用来解决命名冲突的问题 Symbol值不能与其他数据进行运算 Symbol定义的对…...
能在家里赚钱的工作有哪些?适合普通人的兼职项目
当下对于普通人而言,想在社会上找到一份舒心安逸的工作很难,特别是在薪酬待遇这方面,更是低得让人心寒。那么,如果能有一份在家就可以做的事情,而且是收入也不少,那将是很多普通人的最佳选择。在这里&#…...
创建SaaS产品帮助中心的关键步骤
帮助中心是一款SaaS产品必不可少的一部分,为了帮助用户更好的解决产品相关问题,提高新用户的使用体验,并且引导用户更好的使用产品,那么应该怎样制作帮助中心呢,每个产品帮助中心都需要有自己的风格,根据产…...
高频算法:Leetcode53 最大子数组和
今天讲的是Leetcode第53题,最大子数组和 首先观察题目,题目需要我们找出具有最大和的连续子数组,直接拿题目中的示例来做一个演示,找一找什么规律下的连续子数组才能得到最大的和 先从-2开始,-2 1 -1 此时我们的和…...
如何编写接口自动化测试框架、
编写接口自动化测试框架需要注意以下几点: 接口选择:首先确定需要测试的接口,包括请求方式、URL、参数、返回值等信息。 框架设计:设计一个灵活的框架,可以根据接口类型(RESTful API、SOAP API等ÿ…...
【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17
大家好,我是陶然同学,软件工程大三即将实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…...
ESP32开发(1)----Espressif-IDE开发环境配置
Espressif-IDE开发环境配置前言一、ESP32-WROOM-32介绍二、IDE环境搭建三、建立第一个项目总结前言 最近得到一块ESP32-WROOM-32的开发板,没有原理图,但板子走线比较简单,看着板子上的布线大致猜一猜连接,然后试玩了一下…...
MyBatisPlus标准数据层开发
MyBatisPlus标准数据层开发2,标准数据层开发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:设…...
避开这些坑!用UDE STK 5.0给英飞凌AURIX芯片下载程序时,关于板卡休眠与唤醒的实战经验
避开这些坑!用UDE STK 5.0给英飞凌AURIX芯片下载程序时,关于板卡休眠与唤醒的实战经验 在嵌入式系统开发中,低功耗设计是一个永恒的话题。特别是对于汽车电子、工业控制等领域的应用,如何平衡系统性能和功耗表现,往往…...
LeetCode 70. Climbing Stairs 题解
LeetCode 70. Climbing Stairs 题解 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼…...
Telegram用户必看:Grok聊天机器人全功能实测与隐藏技巧大公开
Telegram用户必看:Grok聊天机器人全功能实测与隐藏技巧大公开 作为Telegram深度用户,你可能已经注意到聊天界面顶部多了一个新面孔——Grok聊天机器人。这款由xAI打造的AI助手正在悄然改变我们的通讯体验。不同于市面上大多数聊天机器人,Grok…...
Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU)
Qwen3-VL-8B-Instruct-GGUF效果分享:100张用户实测图平均响应时间<1.8s(A10 GPU) 1. 模型效果实测:速度与精度的双重惊喜 当我第一次看到Qwen3-VL-8B-Instruct-GGUF的测试结果时,确实被惊艳到了。这个模型在A10 G…...
Agent能为中小企业降本增效吗?深度拆解AI Agent在企业智能自动化的落地路径
在2026年这一关键的时间节点上,AI Agent能否为中小企业实现实质性的降本增效,已经从一个理论命题转变为大规模的实践成果。随着大模型技术的深度演进,AI Agent不再仅仅是简单的对话机器人,而是进化为具备自主规划、决策与执行能力…...
GLM-4V-9B GPU高效利用:通过dtype对齐+4-bit量化实现A10G 24GB满载运行
GLM-4V-9B GPU高效利用:通过dtype对齐4-bit量化实现A10G 24GB满载运行 1. 引言 最近在折腾多模态大模型本地部署的朋友,可能都遇到过类似的问题:模型参数动辄几十上百亿,显存要求高得吓人,好不容易找到个能在消费级显…...
若依框架多数据源实战:如何用@DataSource注解轻松切换MySQL主从库
若依框架多数据源实战:用DataSource注解实现MySQL主从库智能切换 当系统流量逐渐攀升,数据库的读写压力开始显现时,很多开发者都会面临一个关键决策:如何在保证数据一致性的前提下,有效分散数据库负载?若依…...
Zotero插件安装失败?手把手教你解决版本兼容问题(以better-notes为例)
Zotero插件安装失败?手把手教你解决版本兼容问题(以better-notes为例) 学术研究离不开文献管理工具,Zotero作为开源免费的文献管理神器,凭借其强大的功能和丰富的插件生态,成为众多科研工作者的首选。然而…...
Gauge常见问题解决:10个典型错误及修复方法
Gauge常见问题解决:10个典型错误及修复方法 【免费下载链接】gauge Light weight cross-platform test automation 项目地址: https://gitcode.com/gh_mirrors/ga/gauge Gauge作为一款轻量级跨平台测试自动化工具,在使用过程中可能会遇到各种错误…...
Chrome DevTools MCP:让 AI 编码助手拥有“浏览器之眼“
1.1 背景:AI 编程的"盲区" 在 AI 辅助编程的时代,我们已经习惯了让 AI 帮我们生成代码、修复 Bug、甚至重构项目。但长期以来,AI 编码助手有一个根本性的局限——它们只能"写"代码,却看不到代码在浏览器中实…...
