树莓派编译OpenDDS并编写DDS发布订阅程序
就上篇文章的交叉编译方式下为树莓派搭建DDS运行环境存在无法编写DDS发布订阅程序的问题,本篇文章介绍一种新的思路来基于树莓派编译OpenDDS并编写DDS发布订阅程序。
1:树莓派编译OpenDDS
Linux:Ubuntu 18.04
Perl:树莓派自带perl,无需安装。
Make:6.3.0
gcc:6.3.0建议SD卡:32GB或64GB,完全编译的OpenDDS代码至少10G。
首先需要为树莓派搭建DDS的运行环境。
1.1 ACE+TAO 与OpenDDS的下载
ACE+TAO下载地址 http://download.dre.vanderbilt.edu/ ,我选取的是ACE+TAO.tar.gz Full下的HTTP版本。
OpenDDS下载地址 http://download.ociweb.com/OpenDDS/,我选取的是OpenDDS-3.13.tar.gz版本。
在home/pi目录下新建OpenDDS目录,将两个压缩包解压在OpenDDS目录下。
1.2 设置相关的环境变量
$ cd ~
$ ls -al #会看到有.bashrc文件
$ gedit .bashrc
在.bashrc末尾添加如下的环境变量:
export ACE_ROOT=/home/pi/OpenDDS/ACE_wrappers
export TAO_ROOT=$ACE_ROOT/TAO
export DDS_ROOT=/home/pi/OpenDDS/DDS
export PATH=$ACE_ROOT/bin:$DDS_ROOT/bin:$PATH
export LD_LIBRARY_PATH=$ACE_ROOT/lib:$DDS_ROOT/lib:$LD_LIBRARY_PATH
1.3新建config.h与platform_macros.GNU
新建 $ACE_ROOT/ace/config.h, 内容如下:
#include "ace/config-linux.h"
新建$ACE_ROOT/include/makeinclude/platform_macros.GNU, 内容如下:
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
1.5 分别编译ACE,TAO,OpenDDS
有几点需要注意:
- 可能会存在相关目录下没有GNUmakefile文件的情况,这时需要自己去生成GNUmakefile文件。
- ACE.mwc,TAO_ACE.MWC,DDS.MWC/DDS_no_tests.mwc,使用命令 mwc.pl XXX.mwc -type gnuace则会生成相应的GNUmakefile文件。
- 本人在编译OpenDDS时,放弃编译tests目录,选取了DDS_no-tests.mwc,个人则针对实际情况选择。
cd $ACE_ROOT
make clean
make
cd $TAO_ROOT
make clean
make
cd $DDS_ROOT
make clean
make
问题:DDS_ROOT目录下编译过程中,由于部分core相关的cpp文件过大导致无法编译通过,编译直接卡住几次,经常是由于初试配置时swap为100M,太小。

1.6 运行测试脚本:
$ cd $DDS_ROOT/example/DCPS/Messenger_Imr
$ run_test.pl
显示 test PASSED ,测试成功,表示OpenDDS环境已经搭建成功。
2:编写DDS发布订阅程序。
相关文件代码直接拷贝$DDS_ROOT/DevGuideExamples/DCPS/Messenger目录下文件即可
2.1 定义IDL文件,编写MPC文件。
module Messenger {
#pragma DCPS_DATA_TYPE "Messenger::Message"
#pragma DCPS_DATA_KEY "Messenger::Message subject_id"
struct Message {
string from;
string subject;
long subject_id;
string text;
long count;
};
};
project(*idl): dcps {
requires += no_opendds_safety_profile
TypeSupport_Files {
Messenger.idl
}
custom_only = 1
}
2.2 生成GNUmakefile文件并编译。
mwc.pl -type gnuace
make
3.3 生成相关的DDS接口相关的文件。

3.4改写MPC文件,加入DDS实体
加入publisher,subscriber,datareaderlistener实体,同时添加publisher,subscriber的源文件和DataReaderListenerIlmpl的头文件和源文件,再次编译。

3.5 进行DDS发布/订阅。
添加rtps.ini 文件。
[common]
DCPSGlobalTransportConfig=$file
DCPSDefaultDiscovery=DEFAULT_RTPS
[transport/the_rtps_transport]
transport_type=rtps_udp
输入指令./subscriber -DCPSConfigFile rtps.ini和./publisher -DCPSConfigFile rtps.ini

至此完成的DDS的发布/订阅。
基本步骤如上所示,同时有需要交流的朋友可以加我QQ420516520,一起交流,一起进步!
更多推荐
所有评论(0)