既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
10.3 如果经过以上测试,ssh并不通。应该是系统ssh服务被禁用了,行之有效的解决办法就是拔下树莓派SD卡,通过读卡器插入PC,由于SD卡里是linux文件系统,windows下打不开。那就通过虚拟机来打开。并且在boot文件夹下通过touch ssh命令新建一个空白的ssh文件。拔出SD卡再插入到树莓派上,重复10.2步骤,应该就解决了,如果还解决不了,请百度搜索“树莓派 ssh connection refused”寻求更多帮助。
也可以在windows下下载一个putty软件,选择SSH,输入IP后单击Open来测试ssh服务是否已开启。
10.4 确认ssh服务没问题后,关闭终端,以暂时退出ssh服务。
11. cd到OpenDDS上一级目录,分别执行以下命令:
tar czf OpenDDS.tar.gz OpenDDS
#该命令的目的是将OpenDDS文件夹打包为一个OpenDDS.tar.gz压缩包。
scp OpenDDS.tar.gz pi@192.168.2.112:/home/pi/DevOpenDDS
#该命令的目的是将OpenDDS.tar.gz压缩包发送到树莓派指定目录下,:后面即为目标路径
ssh pi@192.168.2.112
#该命令用于通过ssh连接树莓派
tar xzf OpenDDS.tar.gz
#该命令用于远程解压缩OpenDDS.tar.gz
- 在ssh远程模式下,进入树莓派OpenDDS所在目录,分别执行以下命令,用于设置环境变量。
export DDS_ROOT="$PWD/build/target"
export ACE_ROOT="$DDS_ROOT/ACE_wrappers"
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:"$ACE_ROOT/lib":"$DDS_ROOT/lib"
export PATH=${PATH}:"$ACE_ROOT/bin":"$DDS_ROOT/bin"
- 通过以下命令cd到DDS默认实例“Messenger”目录下,然后执行./run_test.pl。
cd $DDS_ROOT/DevGuideExamples/DCPS/Messenger
实例会分别启动一个InfoRepo, publisher, 和subscriber。类似下图所示,说明部署成功。
三、编写编译自定义工程
前面笔者讲了,网上大部分只是进行到以上步骤就结束了,没看到如何开发新的工程,生成相关文件和如何make。在经过一些试验后,笔者发现了规律,并成功实现了编译和部署。本节中,我以Demo为工程名来实现一个自定义实例,文件仍来自于前几篇所定义过的同一套文件,Demo文件夹内容如下:
关于这些文件的内容,请翻看笔者前面几篇相关介绍的博文,本篇的目的是对他们实现编译,并部署到树莓派下执行。
观察OpenDDS自带的几个实例,笔者打算采用“将Demo文件夹与原始OpenDDS实例放在一起,重新执行OpenDDS编译”的思路来解决问题。OpenDDS自带实例$DDS_ROOT/DevGuideExamples/DCPS/Messenger的文件结构,有一个CMakeLists.txt文件,其内容如下,
project(OpenDDS_DevGuide_Messenger CXX)
cmake_minimum_required(VERSION 3.8.2)
find_package(OpenDDS REQUIRED)
set(CMAKE_CXX_COMPILER ${OPENDDS_COMPILER})
set(opendds_libs
OpenDDS::Dcps # Core OpenDDS Library
OpenDDS::InfoRepoDiscovery OpenDDS::Tcp # For run_test.pl
OpenDDS::Rtps OpenDDS::Rtps_Udp # For run_test.pl --rtps
)
# Publisher
add_executable(publisher
Publisher.cpp
)
OPENDDS_TARGET_SOURCES(publisher Messenger.idl)
target_link_libraries(publisher ${opendds_libs})
# Subscriber
add_executable(subscriber
Subscriber.cpp
DataReaderListenerImpl.cpp
)
OPENDDS_TARGET_SOURCES(subscriber Messenger.idl)
target_link_libraries(subscriber ${opendds_libs})
1. 将Messenger文件夹下的CMakeLists.txt文件拷贝到自定义工程Demo文件夹下,并将以上Messenger.idl修改为Demo.idl,用来适配Demo工程。
- 删除掉之前编译好的OpenDDS文件夹,并重新解压缩一个未编译过的,按照 “二、编译OpenDDS 中第5步和第6步”的过程重新生成文件。果然build/host及build/target下的DevGuideExamples文件夹下都自动生成了一个Demo文件夹,并产生了GNUmakefile及其他相关类型文件。
- 照这个思路,按照“二、编译OpenDDS”其他步骤进行部署,最终实现了既定目标。以下展示了,树莓派启动一个Publisher实例,Windows10启动了一个Subscriber实例,由于我将配置文件路径下载了cpp中,因此这里不用写成./Publisher -DCPSConfigFile config_Pub.ini这样的形式,而是直接运行。
四、引申
1. 上一节通过run_test.pl执行实例属于集中式发现,也可以通过对等发现的方式:
cd 到Messenger目录下,执行./publisher -DCPSConfigFile rtps.ini 及 ./subscriber -DCPSConfigFile rtps.ini
2. 在上一节第9步以后,可以将OpenDDS压缩后,通过U盘拷贝到树莓派中再进行如下操作:
2.1 设置环境变量
在etc/profile最后一行添加如下环境变量,将$PWD替换为实际路径,我的实际路径为/home/pi/DevOpenDDS/OpenDDS/build/target,重启生效。
export DDS_ROOT=“
P
W
D
/
b
u
i
l
d
/
t
a
r
g
e
t
"
e
x
p
o
r
t
A
C
E
_
R
O
O
T
=
"
PWD/build/target" export ACE\_ROOT="
PWD/build/target" exportACE_ROOT="DDS_ROOT/ACE_wrappers”
export LD_LIBRARY_PATH=
L
D
_
L
I
B
R
A
R
Y
_
P
A
T
H
:
"
{LD\_LIBRARY\_PATH}:"
LD_LIBRARY_PATH:"ACE_ROOT/lib":"
D
D
S
_
R
O
O
T
/
l
i
b
"
e
x
p
o
r
t
P
A
T
H
=
DDS\_ROOT/lib" export PATH=
DDS_ROOT/lib" exportPATH={PATH}:“
A
C
E
_
R
O
O
T
/
b
i
n
"
:
"
ACE\_ROOT/bin":"
ACE_ROOT/bin":"DDS_ROOT/bin”
2.2 设置依赖库路径
在设置完环境变量以后,笔者尝试在Demo文件夹下直接运行./Publisher,出现以下错误,说明找不到可执行程序所以来的so文件。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新