ROS系统学习8---节点间的内存共享(初级篇)
上一篇文章我们介绍了怎么在ROS中应用LCM与外部进行通信。本篇我们回到ROS的内部,看看如何实现ROS节点间的内存共享,以实现更加快速的内部通信。
首先,我们需要清楚为什么要用内存共享?
答案是ROS提供的服务或者话题都是通过网络来实现的。这样做虽然更具普遍性,照顾到ROS节点可能架设在不同的硬件上这一点,然对于在同一台设备的两个节点间传输数据是非常不友好的。因为其既没必要性又浪费大量资源,且效率低下,容易造成网络堵塞,延时严重。
那么怎么改善最好呢,自然是进程间的内存共享。我们直接让两个节点共享一片物理内存,在里面做一个队列数据结构,一个往里面写,一个去里面读。
下面我们就来实现这一功能。跟上篇文章一样,我们先实现纯净的Linux C++版本,然后再把代码移植到ROS的节点中。
实现Linux进程间的内存共享,主要参考这篇文章(因为写的很好,运行顺利,这部分只做了一点点修改,其他照抄,见谅见谅):
“写”进程,流程如下:
1) 获得key, ftok()
2) 使用key来创建一个共享内存 shmget()
3) 映射共享内存(得到虚拟地址), shmat()
4) 使用共享内存, 往共享内存中写入数据
5) 解除映射 shmdt()
6) 如果共
ROS系统学习8---节点间的内存共享(初级篇)相关推荐
- ROS学习之节点间话题通信的
一.学习要点: 1.发布节点 a.启动该节点并设置其名称,名称必须唯一 b.设置节点进程的句柄 c.将节点设置成发布者,并将所发布主题的类型和名称告知节点管理器. d.设置发送数据的频率: 2.订阅节 ...
- ROS系统学习5---OpenCV的使用
在机器人系统中,视觉是非常重要的一部分(人的眼睛获取信息占全部信息的78%,机器人可以类比下).因此,用前面四篇文章打下些许基础后,本人便迫不及待的想学习怎么在ROS上用上OpenCV视觉库. 好消息 ...
- ROS系统学习2---ROS最小系统的制作
上一篇文章我们讲了ros的安装,并且运行了ros自带的一个简单程序. 下面,我们将从一个空的文件夹开始,一步步创建工作空间,包,和节点,并让该节点输出"Hello ros".
- ROS学习笔记(一)ROS系统架构
ROS系统架构 ROS系统的架构主要被设计和划分为三部分,每一部分代表一个层级的概念: 文件系统级(The filesystem level) 计算图级(The computation graph l ...
- SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...
- [ROS基础-4] ROS系统框架
系列文章目录 [ROS基础-1] Linux系统介绍与ubuntu安装(virtualbox) [ROS基础-2] Ubuntu系统基本操作与基本命令讲解 [ROS基础-3] ROS系统安装与基本配置 ...
- SLAM导航机器人零基础实战系列:(二)ROS入门——2.ROS系统整体架构
SLAM导航机器人零基础实战系列:(二)ROS入门--2.ROS系统整体架构 摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机 ...
- 【OpenCV学习】 《OpenCV3编程入门》--毛星云 01 邂逅OpenCV(OpenCV基本概念与基本架构) ROS系统上的运用(python实现)
对 <OpenCV3编程入门>第一章的学习笔记:理解什么是计算机视觉,什么是OpenCV,以及其中的联系等等. PS:此书为2014年出版,opencv的版本和接口也与现在有些不一致了,作 ...
- ROS系统SLAM基础学习:gazebo仿真机器人自主导航
ROS系统SLAM基础学习:gazebo仿真机器人自主导航 move_base节点配置 amcl节点配置 导航仿真 导航SLAM仿真 自主探索SLAM仿真 自主导航:避障 遇到的问题及解决方法和总结 ...
- ROS wiki系列|通过ROS wiki-tutorials学习节点
前面几期我们讲的都是一些入门相关的内容-- ROS wiki系列|ROS wiki初探(自用) ROS wiki系列|Documentation-ROS部分讲解 ROS wiki系列|ROS入门基础概 ...
最新文章
- linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
- python中的引用法总结_python模块调用总结
- Illustrator+FontLab 进行字体设计教程
- 解读main()方法中的String[] args
- 计算机网络子网划分路由配置实验报告,洛阳理工学院+计算机网络+实验5子网划分路由配置...
- livecharts中仪表盘_Vue中使用Echarts仪表盘展示实时数据的实现
- 【滤波器】基于matlab GUI高通+低通+带通+带阻FIR滤波器设计【含Matlab源码 092期】
- 计算机基础知识ppt操作题,计算机一级ppt操作题
- Python + ElasticSearch:轻松玩转跨越千年的两百三十万条地震数据
- cordova打包之android应用签名
- 走过软件定义网络“来时的路”
- Android Activity 的详细启动过程分析
- mosefet驱动电路设计详解
- 西电2021计算机考研大纲,2021年西安电子科技大学硕士研究生833计算机学科专业基础综合考试大纲...
- Dojo1.11官方教程文档翻译(3.4)Dojo特效
- Intel E100 网卡驱动实例分析
- 三、mongdb 查询
- 1024程序员节活动勋章获取方式
- 点评美国名校的(EE)和(CS)
- 多台仪器同步测量软件,ATECLOUD智能云测试平台
热门文章
- 算法设计与分析期末复习题(史上最详细)
- OSX malware and exploit collection (~100 files) + links and resources for OSX malware analysis
- linux打印系统cups原理分析
- vbs计算机重启代码,vbs关机代码怎么使用
- vbs代码弹计算机,如何恶搞朋友的电脑?超简单的vbs代码
- Oracle 创建索引
- python熊猫烧香_熊猫烧香的核心代码
- uandroidtool使用教程_apktool反编译详细使用教程_图文教程
- 计算机加密是什么意思,bitlocker驱动加密是什么意思?
- html 字体思源_CSS3嵌入字体@font-face调用字体(思源宋体regula/PingFang SC/ttf/woff)...