上一篇文章我们介绍了怎么在ROS中应用LCM与外部进行通信。本篇我们回到ROS的内部,看看如何实现ROS节点间的内存共享,以实现更加快速的内部通信。

首先,我们需要清楚为什么要用内存共享?

答案是ROS提供的服务或者话题都是通过网络来实现的。这样做虽然更具普遍性,照顾到ROS节点可能架设在不同的硬件上这一点,然对于在同一台设备的两个节点间传输数据是非常不友好的。因为其既没必要性又浪费大量资源,且效率低下,容易造成网络堵塞,延时严重。

那么怎么改善最好呢,自然是进程间的内存共享。我们直接让两个节点共享一片物理内存,在里面做一个队列数据结构,一个往里面写,一个去里面读。

下面我们就来实现这一功能。跟上篇文章一样,我们先实现纯净的Linux C++版本,然后再把代码移植到ROS的节点中。

实现Linux进程间的内存共享,主要参考这篇文章(因为写的很好,运行顺利,这部分只做了一点点修改,其他照抄,见谅见谅):

“写”进程,流程如下:

1) 获得key, ftok()

2) 使用key来创建一个共享内存 shmget()

3) 映射共享内存(得到虚拟地址), shmat()

4) 使用共享内存, 往共享内存中写入数据

5) 解除映射 shmdt()

6) 如果共

ROS系统学习8---节点间的内存共享(初级篇)相关推荐

  1. ROS学习之节点间话题通信的

    一.学习要点: 1.发布节点 a.启动该节点并设置其名称,名称必须唯一 b.设置节点进程的句柄 c.将节点设置成发布者,并将所发布主题的类型和名称告知节点管理器. d.设置发送数据的频率: 2.订阅节 ...

  2. ROS系统学习5---OpenCV的使用

    在机器人系统中,视觉是非常重要的一部分(人的眼睛获取信息占全部信息的78%,机器人可以类比下).因此,用前面四篇文章打下些许基础后,本人便迫不及待的想学习怎么在ROS上用上OpenCV视觉库. 好消息 ...

  3. ROS系统学习2---ROS最小系统的制作

    上一篇文章我们讲了ros的安装,并且运行了ros自带的一个简单程序. 下面,我们将从一个空的文件夹开始,一步步创建工作空间,包,和节点,并让该节点输出"Hello ros".

  4. ROS学习笔记(一)ROS系统架构

    ROS系统架构 ROS系统的架构主要被设计和划分为三部分,每一部分代表一个层级的概念: 文件系统级(The filesystem level) 计算图级(The computation graph l ...

  5. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...

  6. [ROS基础-4] ROS系统框架

    系列文章目录 [ROS基础-1] Linux系统介绍与ubuntu安装(virtualbox) [ROS基础-2] Ubuntu系统基本操作与基本命令讲解 [ROS基础-3] ROS系统安装与基本配置 ...

  7. SLAM导航机器人零基础实战系列:(二)ROS入门——2.ROS系统整体架构

    SLAM导航机器人零基础实战系列:(二)ROS入门--2.ROS系统整体架构 摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机 ...

  8. 【OpenCV学习】 《OpenCV3编程入门》--毛星云 01 邂逅OpenCV(OpenCV基本概念与基本架构) ROS系统上的运用(python实现)

    对 <OpenCV3编程入门>第一章的学习笔记:理解什么是计算机视觉,什么是OpenCV,以及其中的联系等等. PS:此书为2014年出版,opencv的版本和接口也与现在有些不一致了,作 ...

  9. ROS系统SLAM基础学习:gazebo仿真机器人自主导航

    ROS系统SLAM基础学习:gazebo仿真机器人自主导航 move_base节点配置 amcl节点配置 导航仿真 导航SLAM仿真 自主探索SLAM仿真 自主导航:避障 遇到的问题及解决方法和总结 ...

  10. ROS wiki系列|通过ROS wiki-tutorials学习节点

    前面几期我们讲的都是一些入门相关的内容-- ROS wiki系列|ROS wiki初探(自用) ROS wiki系列|Documentation-ROS部分讲解 ROS wiki系列|ROS入门基础概 ...

最新文章

  1. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
  2. python中的引用法总结_python模块调用总结
  3. Illustrator+FontLab 进行字体设计教程
  4. 解读main()方法中的String[] args
  5. 计算机网络子网划分路由配置实验报告,洛阳理工学院+计算机网络+实验5子网划分路由配置...
  6. livecharts中仪表盘_Vue中使用Echarts仪表盘展示实时数据的实现
  7. 【滤波器】基于matlab GUI高通+低通+带通+带阻FIR滤波器设计【含Matlab源码 092期】
  8. 计算机基础知识ppt操作题,计算机一级ppt操作题
  9. Python + ElasticSearch:轻松玩转跨越千年的两百三十万条地震数据
  10. cordova打包之android应用签名
  11. 走过软件定义网络“来时的路”
  12. Android Activity 的详细启动过程分析
  13. mosefet驱动电路设计详解
  14. 西电2021计算机考研大纲,2021年西安电子科技大学硕士研究生833计算机学科专业基础综合考试大纲...
  15. Dojo1.11官方教程文档翻译(3.4)Dojo特效
  16. Intel E100 网卡驱动实例分析
  17. 三、mongdb 查询
  18. 1024程序员节活动勋章获取方式
  19. 点评美国名校的(EE)和(CS)
  20. 多台仪器同步测量软件,ATECLOUD智能云测试平台

热门文章

  1. 算法设计与分析期末复习题(史上最详细)
  2. OSX malware and exploit collection (~100 files) + links and resources for OSX malware analysis
  3. linux打印系统cups原理分析
  4. vbs计算机重启代码,vbs关机代码怎么使用
  5. vbs代码弹计算机,如何恶搞朋友的电脑?超简单的vbs代码
  6. Oracle 创建索引
  7. python熊猫烧香_熊猫烧香的核心代码
  8. uandroidtool使用教程_apktool反编译详细使用教程_图文教程
  9. 计算机加密是什么意思,bitlocker驱动加密是什么意思?
  10. html 字体思源_CSS3嵌入字体@font-face调用字体(思源宋体regula/PingFang SC/ttf/woff)...