无人驾驶笔记系列(四):Fast-RTPS初体验

背景介绍

ROS1在节点启动前,必须通过roscore启动一个master节点,通过master管理节点之间的通信。这样master节点如果出现问题,其他节点之间的通信也会出现问题。同时,通讯的实时性也不是很好。因此,ROS2和apollo框架都用上了DDS通讯。

关于什么是DDS,英文全称(Data Distribution Service for Real-Time Systems)我也不在此啰嗦了,推荐读下这篇博客。
DDS简要介绍

总结下特点:

  • DDS采用发布/订阅体系架构,强调以数据为中心
  • DDS使应用在需要进行数据访问的时候提供一个虚拟的全局数据池概念,事实上并没有一个存储所有数据的全局设备。每个应用仅在本地存储它需要的数据,当整个网络内的任何应用需要他们时,提供给对应应用。所有的数据分发工作全部都由DDS代劳了。
  • 网络中的数据对象用主题做标识,分布式节点在全局数据空间中发布或订阅感兴趣的主题信息。各个节点在逻辑上无主从关系,点与点之间都是对等关系,通信方式可以是点对点,点对多,多对多,在Qos策略的控制下建立连接,自动发现和配置网络参数

当然DDS之前一种协议,具体实现有好多版本,如:

  • RTI公司的DDS方案:美国海上战争中心(NSWC)高性能分布式计算系统(HiPer-D),美军都在用,应该很牛吧。
  • OpenDDS:OpenDDS是使用C++语言针对OMG数据分发服务(DDS)的一种开源实现。由OCI公司设计和维护,http://www.opendds.org 官网。尽管本身OpenDDS采用C++语言实现,但也提供JAVA和JMS的开发接口,这意味着JAVA程序开发也可以使用OpenDDS。
  • eProsima Fast RTPS:Fast RTPS是eProsima公司对RTPS标准的一个实现。那RTPS是什么东东?RTPS是DDS标准中的一个子集。英文名字是Real Time Publish Subscribe,是DDS标准中的通讯协议部分。

安装eProsima Fast RTPS

eProsima Fast RTPS的github主页

推荐用官网的安装包安装,源码安装比较复杂,需要你安装很多依赖。

安装包解压后,查看下文件结构:

xx:~/fastrtps$ ls
doc  install.sh  java  README.txt  src  uninstall.shxx:~/fastrtps$ cd src
xx:~/fastrtps/src$ ls
fastcdr  fastrtps  fastrtpsgen  foonathan_memory

可以看到,其实文件还是包含了依赖包的源码,这样保证我们安装不会出问题。

一行命令,即可完成安装

sudo bash install.sh

成功安装后,查看下安装目录

#include文件目录
/usr/local/include/fastrtps
#库文件目录
/usr/local/lib/libfastrtps.so
#cmake文件目录
/usr/local/share/fastrtps/cmake/fastrtps-targets.cmake

跑个实例试试看

你可以在github主要上把源码拉取下来。
在源码中,可以看到有个helloworld实例

cd Fast-RTPS/examples/C++/HelloWorldExample

编译

mkdir build && cd build
cmake ..
make

编译后,要在两个窗口运行。
先运行发布者

./HelloWorldExample publisher

打印结果如下:

Starting
Publisher running 10 samples.
Publisher matched
# 在subscriber启动后打印
Message: HelloWorld with index: 1 SENT
Message: HelloWorld with index: 2 SENT
Message: HelloWorld with index: 3 SENT
Message: HelloWorld with index: 4 SENT
Message: HelloWorld with index: 5 SENT
Message: HelloWorld with index: 6 SENT
Message: HelloWorld with index: 7 SENT
Message: HelloWorld with index: 8 SENT
Message: HelloWorld with index: 9 SENT
Message: HelloWorld with index: 10 SENT

启动订阅者

./HelloWorldExample subscriber

打印结果如下:

Starting
Subscriber running. Please press enter to stop the Subscriber
Subscriber matched
Message HelloWorld 1 RECEIVED
Message HelloWorld 2 RECEIVED
Message HelloWorld 3 RECEIVED
Message HelloWorld 4 RECEIVED
Message HelloWorld 5 RECEIVED
Message HelloWorld 6 RECEIVED
Message HelloWorld 7 RECEIVED
Message HelloWorld 8 RECEIVED
Message HelloWorld 9 RECEIVED
Message HelloWorld 10 RECEIVED
Subscriber unmatched

我们稀里糊涂的跑了官方例子,具体是怎么运行的,还是完全不明白。

原理解析

未完待续

无人驾驶笔记系列(四):Fast-RTPS初体验相关推荐

  1. centos安装rabbitmq_【SpringBoot MQ系列教程】RabbitMq 初体验

    SpringBoot 系列教程之 RabbitMq 初体验​mp.weixin.qq.com mq 在异步解耦削峰的优势非常突出,现在很多的项目都会用到,掌握 mq 的知识点,了解如何顺畅的使用 mq ...

  2. 【正点原子STM32连载】第四章 STM32初体验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  3. 【聆思CSK6视觉AI开发套件试用】CSK6系列头肩识别初体验

    本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站.作者:張弩拔劍 背景 前言 聆思CSK4002以先进的AI算法, 出色的性价比, 以及优越的头 ...

  4. [LBS学习笔记 1]高德数据可视化初体验

    高德数据可视化初体验 背景 换了新工作,虽然还是java开发,但是之前搞做在线教育的,现在做地图相关的事.因此,花了些时间学了空间索引相关的内容,后期会写关于空间索引相关的内容,这期写地理数据可视化相 ...

  5. lua语言入门学习(四)项目初体验之抽奖转盘(1)

    lua语言入门学习 今天前辈教我看了项目,感觉果然公司级的项目分工都比较严谨,很多东西都是略懂功能,但对于底层逻辑的实现并不清楚. 为了保护公司这个游戏具体实现功能上本身的隐私,日常代码分享中不会分享 ...

  6. 华为路由器时间同步_好用实在价格亲民 - 华为路由WS5200四核版初体验

    近几年随着前期城市化光改的完成,全民光纤宽带的速率也随之获得了提升.当年的20M.50M以随时间远去,如今放眼望去几乎都是100M光纤速率,有些用户更是提升至200M或更快的速率.不过很多用户发现虽然 ...

  7. 【致敬未来的攻城狮计划】— 连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下(文字上的初理解)

    系列文章目录 系列文章目录 前言 一.瑞萨MCU(CPK_RA2E1是瑞萨RA系列开发板)是什么? 首先引入是什么? 他的优势在哪? 瑞萨CPK_RA2E1 对标stm32 相似之处和不同之处? 瑞萨 ...

  8. Android学习笔记系列四2 —— Activity的生命周期

    2019独角兽企业重金招聘Python工程师标准>>> 启动一个Activity 使用startActivity(Intent intent). intent指定了你想要启动的act ...

  9. 开源 - 学习笔记 - 青阳网络文件传输系统初体验

    青阳网络文件传输系统 - 学习笔记 创建个启动脚本 账号权限配置 服务配置 参考资料 创建个启动脚本 @echo off title 青阳网络文件传输系统 start /B java -server ...

最新文章

  1. springboot集成neo4j
  2. html border阴影效果_HTML | 简易相册制作
  3. How to Visualize Your Recurrent Neural Network with Attention in Keras
  4. 服务上的图片直接在浏览器上可以打开,但是在img上报404错误
  5. C++_异常6-其他异常特性
  6. 微信小程序开发系列二:微信小程序的视图设计
  7. WhqDatabase 我自己用C#开发的列式数据库
  8. JavaScript的三大基本操作案例讲解
  9. Android studio的gradle教程整理
  10. Photoshop 抠图方式
  11. 蓝桥杯必备算法二:二分搜索
  12. STM32F4设置NVIC中断优先级分组
  13. 解析拼手气红包金额划分算法
  14. 打开方式怎么用计算机程序,打开方式怎么还原?打开方式还原方法步骤
  15. 牛叔说电影-圣堂四骑士
  16. 计算机动漫设计需要学什么,计算机动画制作专业好学吗?都有哪些课程?
  17. 腾讯2021/2022春季校招,内推实习生和校招生,名额不限
  18. 手把手教你逆向微信之朋友圈小视频转发(上)
  19. 前端面试题--水平垂直居中的方法
  20. Java基础之扩展特性

热门文章

  1. 华为运营商级路由器配置示例 | EVdPdNd L3VdPdNdv6 over SRv6 BE ECMP
  2. Base64编码中有回车换行符
  3. LLDB 从害怕到真香
  4. 性价比高的骨传导蓝牙耳机有哪些,分享几款高性能的骨感传导耳机
  5. 【分享】集简云微信公众号助手无需代码连接维格表的方法
  6. 1069. 凸多边形的划分
  7. 《画解数据结构》(0 - 4)- 逻辑结构
  8. if连续判断php_if判断语句_php if elseif 条件判断语句使用方法
  9. 编写C语言实现莫尔斯编码,翻译莫尔斯电码
  10. Java——实现客服端和服务器计算