CentOS 8 环境下OpenDDS-3-14配置过程

柴兴修
2023-12-01

在学习OpenDDS过程中,发现网上的资料教程不全,同时很多大佬把一些步骤省略(虽然他们认为很简单,但是对于小白来说太南了),所以为了给广大小白提供便利,同时也给自己(小白)做个笔记,就把步骤记录下来,希望能与诸君共勉!

DDS(Data Distribution Service)是数据分发服务的首字母缩略词。

DDS采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,能保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。

根据OMG(对象管理组织,Object Management Group)定义的标准,它本质上是一个通过网络交换数据的协议。广泛应用于分布式应用,模拟器等。它基于 DCPS(Data-Centric Publish-Subscribe, 以数据为中心的发布订阅)模型。

DDS中以数据为中心的发布/订阅(DCPS)模型构建了一个共享的”全局数据空间“的概念,所有的数据对象都存在于此空间中,分布式节点通过简单的读、写操作便可以访问这些数据对象。实际上,数据并非存在于所有计算机的地址空间中,它仅存在于那些对它感兴趣的应用程序的本地缓存中,而这一点正是发布/订阅模型的关键所在。

DDS规范使用UML语言描述服务,提供了一个与平台无关的数据模型(这个模型能够映射到各种具体的平台和编程语言),使得实时分布式系统中数据能够高效、可靠地发布,它主要应用在要求高性能可预见性对资源有效使用关键任务领域

DDS规范列举并正式定义了一整套全面的QoS(Quality of Service,服务质量)策略,能利用QoS进行系统控制。每一个DCPS实体都有自身的QoS策略,而且在每一对发布者和订阅者之间又都可以建立独立的QoS协定。这使得DDS可以很好地配置和利用系统资源,协调可预言性与执行效率间的平衡,并能支持复杂多变的数据流需求。

DDS经常被用于三种设计和应用环境,包括:

  • 数据苛刻性场合的应用
  • 多个数据源需要连接到多个数据接收点的应用程序
  • 系统结构动态需要发生变化的应用程序

配置过程如下:

环境

Linux:Centos 8.1.1911
Perl: 5.32
Make: GNU Make 4.2.1
gcc: 8.3.1

perl下载编译

Perl下载地址:http://www.perl.org/get.html#unix_like
Perl安装包名为:perl-5.32.0.tar.gz

下载解压

http://www.perl.org/get.html#unix_like
$ tar -xvzf perl-5.32.0.tar.gz

编译

$ cd  perl-5.32.0
$ ./Configure
$ make
$ sudo make install 
$ make clean

ACE+TAO与OpenDDS下载编译

ACE+TAO下载地址
http://download.dre.vanderbilt.edu/
OpenDDS下载地址
http://download.ociweb.com/OpenDDS/

下载解压

将ACE+TAO与OpenDDS解压至/opt目录下

sudo tar -zxvf ACE+TAO-6.5.10.tar.gz -C /opt
sudo tar -zxvf OpenDDS-3.14.tar.gz -C /opt

解压完毕后,在/opt目录下已存在ACE_wrappersOpenDDS-3.14两个文件夹,修改其权限
(不修改权限会在编译时出现Permission denied的情况)

cd /opt
sudo chmod 777 -R ACE_wrappers/
sudo chmod 777 -R OpenDDS-3.14/

PS:ACE+TAO 下载选择 FULL 版本,因为 FULL 版本包含所有 GNU make 预生成 makefile
的源代码,而Sources Only版本则仅包含源代码,您还必须使用MPC生成自己的 makefile。

设置相关环境变量

$ cd ~
$ ls -al  #会看到有.bashrc文件
$ gedit .bashrc

.bashrc末尾添加如下的环境变量:

# ACE+TAO+DDS Environment
export ACE_ROOT=/opt/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=/opt/OpenDDS-3.14
export PATH=$ACE_ROOT/bin:$DDS_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$ACE_ROOT/lib:$DDS_ROOT/lib:$LD_LIBRARY_PATH

注意实际的安装目录与以上环境变量的关系,根据实际的安装路径上述设置可作适当调整。

$ source .bashrc

使环境变量生效

设置/新建 config.h

新建 $ACE_ROOT/ace/config.h, 内容如下:

vi $ACE_ROOT/ace/config.h
#include "ace/config-linux.h"

设置/新建 platform_macros.GNU

新建$ACE_ROOT/include/makeinclude/platform_macros.GNU, 内容如下:

vi $ACE_ROOT/include/makeinclude/platform_macros.GNU
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU

编译

配置完以上文件之后,可以进行编译:

编译次序为: ACE -> TAO -> OpenDDS

因为我这里是全部编译,所以make时间可能比较久,如只需安装所需要的,可以去看看其他人分享的资料。

ACE编译

$ cd $ACE_ROOT
$ make clean 
$ make

TAO编译

$ cd $TAO_ROOT
$ make clean
$ make

OpenDDS编译

$ cd $DDS_ROOT
$ ./configure
$ make clean
$ make

运行测试脚本

为了测试OpenDDS的环境搭建是否成功,OpenDDS为我们提供了一个自动测试脚本run_test.pl

$ cd $DDS_ROOT/examples/DCPS/Messenger_Imr
$ perl ./run_test.pl
>>> /opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service/tao_imr_locator -o imr.ior  -orbendpoint iiop://:10098
>>> /opt/ACE_wrappers/TAO/orbsvcs/ImplRepo_Service/tao_imr_activator -o activator.ior -ORBInitRef ImplRepoService=file://imr.ior  -orbendpoint iiop://:10066
>>> /opt/OpenDDS-3.13.2/bin/DCPSInfoRepo  -NOBITS -o repo.ior  -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo
Successfully shut down server <InfoRepo>
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior update InfoRepo -l Fan-Lenovo -c "/opt/OpenDDS-3.13.2/bin/./DCPSInfoRepo  -NOBITS -o repo.ior  -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior"
(486|140412808431424) ImR: Successfully registered <InfoRepo>
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior list -v
Server <InfoRepo>
  Activator: Fan-Lenovo
  Command Line: /opt/OpenDDS-3.13.2/bin/./DCPSInfoRepo  -NOBITS -o repo.ior  -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior
  Working Directory: 
  Activation Mode: NORMAL
  Number of retries: 0
  Not currently running

/opt/OpenDDS-3.13.2/examples/DCPS/Messenger_Imr/publisher   -DCPSConfigFile pub.ini -orbendpoint iiop://:10109
/opt/OpenDDS-3.13.2/examples/DCPS/Messenger_Imr/subscriber   -DCPSConfigFile sub.ini
(488|139645218817856) Writer::start 
(488|139645109663488) Writer::svc begins.
DataReaderListenerImpl::on_subscription_matched
(488|139645109663488) 14:52:25.926322 Writer::svc starting to write.
DataReaderListenerImpl::on_liveliness_changed
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 0
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 1
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 2
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 3
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 4
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 5
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 6
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 7
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 8
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
Message: subject    = Review
         subject_id = 99
         from       = Comic Book Guy
         count      = 9
         text       = Worst. Movie. Ever.
SampleInfo.sample_rank = 0
DataReaderListenerImpl::on_liveliness_changed
DataReaderListenerImpl::on_subscription_matched
(488|139645109663488) Writer::svc finished.
(488|139645218817856) Writer::end 
>>> /opt/ACE_wrappers/bin/tao_imr -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo
Successfully shut down server <InfoRepo>
test PASSED.

显示 test PASSED ,测试成功,表示OpenDDS环境已经搭建成功。

 类似资料: