OpenDDS的学习和使用 因项目需要,最近在学习和使用开源软件OpenDDS,在这里把自己的所学,所用,所想做个记录,以备查看。因个人当前理解的限制,所写内容不一定全部正确,但所有内容是 我操作验证过的。使用环境Debian 4.9.210 x86_64/Linux 摘要 1、学习资料 2、环境搭建 3、为我所用 4、打包DDS库文件 5、求助渠道 ——————————————————————————————————————————————————————————————————————– 1、学习资料 a. 网上搜索中文资料有很多介绍,先对OpenDDS有了个大概的认知。它是个开源的数据分发 中间件,有三层:TAO+ACE+DDS, 其中TAO负责封装数据,让OpenDDS支持跨平台; ACE负责数据通信; DDS负责数据的分发交互。 b. 在OpenDDS官网OpenDDS 下载OpenDDS软件包和开发者指南。网站里也有一些对其的 介绍,看不懂没关系,多看几遍。软件包解压后里面有一些README和md文件也看下, 还有DOC目录下文档也看下。最重要的是开发者指南文件,里面比较详细的介绍了OpenDDS 的使用和配置,需要多看几遍,尤其是第二章介绍软件包里的用例,以及第七章OpenDDS的 common,discovery, transfort配置,对理解OpenDDS如何使用很有帮助。 2、环境搭建 本人使用的是linux系统,内核版本是4.9-12,windows环境方法类似,网上也可以搜到很多介绍。 需要材料: Perl软件包(主要用于跑OpenDDS的用例和一些环境配置) 地址:Perl Download – www.perl.org OpenDDS软件包OpenDDS-3.15.tar.gz 地址:https://github.com/objectcomputing/OpenDDS/releases/download/DDS-3.15/OpenDDS-3.15.tar.gz ACE+TAO软件包ACE+TAO-2.2a 地址:http://download.ociweb.com/TAO-2.2a/ACE+TAO-2.2a_with_latest_patches.tar.gz 首先,安装Perl, (安装方法在软件包的install.mid里有写) 然后,解压OpenDDS-3.15.tar.gz软件包,得到文件夹OpenDDS-3.15 最后,解压ACE+TAO软件包,得到文件夹ACE_wrappers,然后将此文件夹移入动到上一步得到 的文件夹OpenDDS-3.15中 编译OpenDDS 进入解压后的OpenDDS目录,然后运行配置文件,这里会配置编译的环境变量和一些准备工作,其中包括下载ACE+TAO的软件包,由于下载很慢常会失败,因此我们上面手工下载然后解压ACE+TAO到OpenDDS目录。 PS: –prefix=/home/test 是为后面安装OpenDDS指定安装路径的,如果这里不配置,后面安装会报错找不到安装路径。 实际我们编译后就可以使用OpenDDS,安装只是把相关的头文件和库文件打包到指定目录,方便我们打包生成OpenDDS的运行环境。 安装OpenDDS 执行安装命令后,OpenDDS的文件会安装到上一步骤中通过 –prefix指定的 /home/test目录下。 测试OpenDDS 进入目录OpenDDS-3.15/DevGuideExamples/DCPS/Messenger目录,使用perl测试开发者指南里介绍的用例。 如果用例报找不到OpenDDS的库文件,需要手工添加环境变量: export $LD_LIBRARY_PATH=*/OpenDDS-3.15/lib:*/OpenDDS-3.15/ACE/lib 测试通过的化,说明基本的OpenDDS运行环境就搭建好了。但这只是在单机运行了样例,大概率我们需要在两台机器之间通信,下面说下怎样在两台linux计算机之间跑Messenger用例。 两台linux计算机OpenDDS通信 1、首先需要在两台linunx计算机上分别测试通过部署好的OpenDDS用例 2、配置两台计算机的 /etc/hosts 文件,让其内容保持一致,例如:其中10.10.10.10是计算机A的IP地址,Debian10是其hostname; 10.10.10.20是计算机B的IP地址,Debian20是其hostname PS: 配置后重启下计算机使其生效。如果不配置,publisher发布者DataWriter在与subcriber订阅者的DataReader建链时报文带的ip地址可能是默认的127.0.0.1,最终无法建立连接。不知道为啥 OpenDDS要读这个文件,而且还会把ip地址map到hostname,然后报文里带的时hostname:port. 3、OpenDDS的发布者和订阅者通信前需要先发现对方,这里主要有两种发现方式,一是使用信息仓库的集中发现,另一种是发布者和订阅者直接的对等发现。这里使用的是集中发现,感觉下来这种方式简单些,常用些。 在A计算机运行集中发现服务DCPSInfoRepo程序和订阅服务,在B计算机运行发布服务。命令中最后带的IP地址都是DCPSInfoRepo服务所在计算机IP地址,命令中还带了打印日志的参数,帮助分析问题,也可以不带。 当然我们也可以把相关的参数配置在.ini文件中,然后执行程序时加载,例如 .publisher -DCPSConfigFile configuration.ini 具体配置方法可以参考开发者指南的第七章。 3、为我所用 可以通过修改OpenDDS-3.15/DevGuideExamples/DCPS/Messenger下的用例代码,发送和订阅我们需要的数据。修改源码前,可以参考开发者指南中关于这个用例代码的讲解。 修改Messenger.idl文件,定制我们需要发布订阅的数据 修改Publisher.cpp文件,控制发布数据的方式 修改DataReaderListenerImpl.cpp文件,控制订阅数据的方式 这里修改完可以直接在OpenDDS-3.15/DevGuideExamples/DCPS/Messenger目录下make编译生成新的publisher和subcriber文件。OpenDDS默认是用.mpc构建的,编译完会 在 Messenger目录下生成GNUmakefile, GNUmakefile.Messenger_Idl, GNUmakefile.Messenger_Publisher, GNUmakefile.Messenger_Subscriber四个makefile文件。如果需要 引入其它编程库,可以直接修改这些makefile文件,让引入的代码参与编译。 也可以通过CMake构建项目,可以参考文件夹下的README.md文件配置,这里需要cmake版本大于3.8,本人还没有尝试。 4、打包DDS库文件 当开发完基于OpenDDS的应用程序,想要在其它linux环境运行时,就需要在环境上部署OpenDDS运行环境。可以通过把OpenDDS运行库打包成.deb文件的方式,安装到需要 使用的环境。分为下面几个步骤: a. 构建你需要放置OpenDDS运行库的目录层次,例如需要安装在 /opt/test/ 目录 b. 把前面环境搭建章节中,安装的OpenDDS所有文件拷贝到 currentPat/opt/test/目录 c. 在 currentPath目录下,创建目录 DEBIAN, 然后在DEBIAN目录下touch文件control 和 postinst文件 d. 编写control文件和postinst文件,然后使用dpkg命令打包即可。control文件必须要有的,里面描述软件的基本情况,postinst文件是可选的,是个脚本,用来处理软件安装后 需要的操作。还有很多配置文件,可以网上搜索学习 e. 打包完成后的.deb,可以直接通过dpkg -i *.deb安装,卸载的话直接 dekg -r *.deb 5、求助渠道 在OpenDDS的官网的support网页列举了求助方法Support ,可以查看GitHub上的问题清单Issues · OpenDDS/OpenDDS · GitHub 翻看问题列表,可能有人和你遇到过同样的问题。或者你也可以提交问题,等待大佬的解答,我提过一个问题,大佬响应比较慢,最后还是我自己解决的。。。 当然我们还可以百度去碰碰运气 哈哈
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/66491.html