ROS系统节点间的内存共享
ROS系统节点间的内存共享 为什么要用内存共享? 在C++中怎么共享内存? 写进程 读进程 将上述代码移植进ROS 创建writeshmInRos.cpp 创建readshmInRos.cpp 为什么要用内存共享? 答案是ROS提供的服务或者话题都是通过网络来实现的。照顾到ROS节点可能架设在不同的硬件上这一点,这样做更具普遍性,但对于在同一台设备的两个节点间传输数据是非常不友好的。因为其既没必要性又浪费大量资源,且效率低下,容易造成网络堵塞,延时严重。 那么怎么改善最好呢,自然是进程间的内存共享。我们直接让两个节点共享一片物理内存,在里面做一个队列数据结构,一个往里面写,一个去里面读。 下面我们就来实现这一功能。跟上篇文章一样,我们先实现纯净的Linux C++版本,然后再把代码移植到ROS的节点中。 在C++中怎么共享内存? 实现Linux进程间的内存共享,主要参考 这篇文章 。 写进程 “写”进程,流程如下: 获得key, ftok() 使用key来创建一个共享内存 shmget() 映射共享内存(得到虚拟地址), shmat() 使用共享内存, 往共享内存中写入数据 解除映射 shmdt() 如果共享内存不再使用,可以使用shmctl()销毁共享内存 代码如下: # include <stdio.h> # include <unistd.h> # include