ubuntu超详细esmini的源码安装与测试运行——OpenScenario播放器

在这里插入图片描述esmini可以方便的查看openscenario的xosc文件,目前已经支持到openscenario1.1,源码github仓库见https://github.com/esmini/esmini

它包含以下主要库:

RoadManager (esminiRMLib)。提供以 OpenDRIVE 格式描述的道路网络接口的库。
ScenarioEngine (esminiLib)。主要库为 OpenSCENARIO 格式中描述的交通场景提供查看器和 API 接口。该库包括 RoadManager。

以及一些可以使用或为定制解决方案提供想法的应用程序:

esmini:静态链接 esmini 模块的场景播放器应用程序。
esmini-dyn:使用 esminiLib 播放 OpenSCENARIO 文件的简约示例。
odrplot:从 OpenDRIVE 生成数据文件,用于在 Python 中绘制道路网络。
odrviewer:可视化具有填充虚拟交通的 OpenDRIVE 道路网络。
replayer:重新播放以前执行的场景。
osireceiver:一个通过 UDP 从 esmini 接收 OSI 消息的简单应用程序。

esmini版本对应关系:
esmini 支持 OpenSCENARIO v1.1(来自 esmini v2.7)和 v1.0(来自 esmini v1.5)。为了运行旧版本(即 v0.9.1),ASAM 提供了一个转换方案(migration0_9_1to1_0.xslt,OpenSCENARIO 发行包的一部分),可与用于自动迁移 XML 文件的工具一起使用。

作者安装环境Ubuntu20.04,Cmake3.16.3,esmini要求Cmake3.7以上

1. 下载源码

cd ~
git clone https://github.com/esmini/esmini.git

2. 源码编译及错误解决

编译根据官方教程进行https://github.com/esmini/esmini/blob/master/docs/BuildInstructions.md

mkdir build
cd build
cmake ..
cmake --build . --config Release --target install

2.1 OSC-ALKS-scenarios错误及解决方法

执行cmake ..时如果遇到错误

fatal: 无法访问 'https://github.com/arauschert/OSC-ALKS-scenarios.git/':Error in the HTTP2 framing layer
fatal: 无法克隆 'https://github.com/arauschert/OSC-ALKS-scenarios.git' 到子模组路径 '/home/smvic/esmini/test/OSC-ALKS-scenarios'
克隆 'test/OSC-ALKS-scenarios' 失败。按计划重试

在这里插入图片描述
说明之前的OSC-ALKS-scenarios的github网址失效了,找到新的OSC-ALKS-scenarios的github网址https://github.com/asam-oss/OSC-ALKS-scenarios

采用如下命令将其clone到本地

cd ~/esmini/test
git clone https://github.com/asam-oss/OSC-ALKS-scenarios.git

如果提示存在OSC-ALKS-scenarios文件夹并且不是空的,进入~/esmini/test路径将该文件夹删除再次执行上述命令

再次执行cmake ..成功
请添加图片描述但是上图中的osg.7z/osi.7z/sumo.7z并未成功下载,查看CMakeLists.txt,下面代码中的dropboxusercontent网址均无法访问,需要自行将对应的文件放在对应位置。

elseif (UNIX)
  set ( TIME_LIB "" )
  set ( OSG_PACKAGE_URL https://dl.dropboxusercontent.com/s/3dlev34kj94lir5/OpenSceneGraph_linux.7z?dl=0 )
  set ( OSG_DIR "${OSG_BASE_DIR}/linux" )
  set ( OSI_PACKAGE_URL https://dl.dropboxusercontent.com/s/kwtdg0c1c8pawa1/osi_linux.7z?dl=0 )
  set ( OSI_DIR "${OSI_BASE_DIR}/linux" )
  set ( SUMO_PACKAGE_URL https://dl.dropboxusercontent.com/s/gfwtqd3gf76f86a/sumo_linux.7z?dl=0 )
  set ( SUMO_DIR "${SUMO_BASE_DIR}/linux" )
  set ( GTEST_PACKAGE_URL https://dl.dropboxusercontent.com/s/si7jsjjsy5bpoym/googletest_linux.7z?dl=0 )
  set ( GTEST_DIR "${GTEST_BASE_DIR}/linux" )

之后执行cmake --build . --config Release --target install出现错误,原因即上述几个第三方软件未成功下载,需要自行排查解决

2.2 SUMO错误及问题解决

fatal error: utils/geom/PositionVector.h: 没有那个文件或目录
   19 | #include <utils/geom/PositionVector.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/build.make:157:EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/ControllerSumo.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:529:EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2

在Sumo的github仓库中找到对应文件https://github.com/eclipse/sumo
请添加图片描述将sumo仓库克隆下来,并将~/sumo/src/文件夹中的所有文件复制到~/esmini/externals/SUMO/linux/include路径下,
克隆sumo的github仓库

cd ~
 git clone --recursive https://github.com/DLR-TS/SUMOLibraries

如果下载速度较慢或不下载,使用下方码云Gitee命令

cd ~
git clone https://gitee.com/tsbc/sumo.git

拷贝完成后再次执行cmake --build . --config Release --target install该错误解决,并出现新错误

atal error: config.h: 没有那个文件或目录
   23 | #include <config.h>
      |          ^~~~~~~~~~
compilation terminated.
make[2]: *** [EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/build.make:157:EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/ControllerSumo.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:529:EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/all] 错误 2

提示找不到config.h,该文件是sumo编译文件,需要将sumo编译后复制,编译方法如下方链接所示,编译完成后将~/sumo/build/cmake-build/src/config.h复制到~/esmini/externals/SUMO/linux/include/文件夹下
SUMO仓库克隆及源码编译方法见本人另一博客https://blog.csdn.net/qq_34972053/article/details/120506007?spm=1001.2014.3001.5501

fatal error: libsumo/Simulation.h: 没有那个文件或目录
   20 | #include <libsumo/Simulation.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/build.make:157:EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/ControllerSumo.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:529:EnvironmentSimulator/Modules/Controllers/CMakeFiles/Controllers.dir/all] 错误 2

2.3 OSI错误及问题解决

fatal error: osi_sensordata.pb.h: 没有那个文件或目录
   17 | #include "osi_sensordata.pb.h"
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.

提示找不到osi_sensordata.pb.h文件,该文件对应的源码在https://github.com/OpenSimulationInterface/open-simulation-interface找到,为源码编译产生的文件
open-simulation-interface具体仓库克隆及源码编译方法见作者另一博客https://blog.csdn.net/qq_34972053/article/details/120503887?spm=1001.2014.3001.5501

编译完成后生成的lib文件及.pb.h文可以在如下路径中找到
lib文件在/usr/local/lib/osi3/
.pb.h文件在/usr/local/include/osi3/

将所有lib文件复制到~/esmini/externals/OSI/linux/lib路径下
将所有lib文件复制到~/esmini/externals/OSI/linux/include路径下

OSI问题解决

2.4 OSG错误及问题解决

出现如下错误,找不到PositionAttitudeTransform

fatal error: osg/PositionAttitudeTransform: 没有那个文件或目录
   16 | #include <osg/PositionAttitudeTransform>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [EnvironmentSimulator/Modules/PlayerBase/CMakeFiles/PlayerBase.dir/build.make:66:EnvironmentSimulator/Modules/PlayerBase/CMakeFiles/PlayerBase.dir/playerbase.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:556:EnvironmentSimulator/Modules/PlayerBase/CMakeFiles/PlayerBase.dir/all] 错误 2

在github上找到对应的OpenSceneGraph仓库https://github.com/openscenegraph/OpenSceneGraph
将该仓库克隆下来并将OpenSceneGraph文件夹下的所有内容复制到~/esmini/externals/OpenSceneGraph/linux/

cd ~
git clone https://github.com/openscenegraph/OpenSceneGraph.git

拷贝完成后再次执行cmake --build . --config Release --target install该错误解决,并出现新错误

fatal error: osg/Config: 没有那个文件或目录
   17 | #include<osg/Config>
      |         ^~~~~~~~~~~~
compilation terminated.
make[2]: *** [EnvironmentSimulator/Modules/PlayerBase/CMakeFiles/PlayerBase.dir/build.make:66:EnvironmentSimulator/Modules/PlayerBase/CMakeFiles/PlayerBase.dir/playerbase.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:556:EnvironmentSimulator/Modules/PlayerBase/CMakeFiles/PlayerBase.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2

提示找不到Config文件,该文件为编译产生的文件,所以需要对OpenSceneGraph进行编译,编译方法见https://blog.csdn.net/qq_34972053/article/details/120506682

cd ~/OpenSceneGraph
mkdir build
cd build
cmake ..
make
sudo make install

编译时间较长,请耐心等待

编译完成后将~/OpenSceneGraph/build/文件夹下的所有文件复制到~/esmini/externals/OpenSceneGraph/linux/文件夹下,如有文件夹命名冲突,将冲突文件夹合并

2.5 SUMO/OSG链接库问题

/usr/bin/c++ -fPIC -std=c++14 -pthread -fPIC -Wl,-strip-all  -shared -Wl,-soname,libesminiLib.so -o libesminiLib.so CMakeFiles/esminiLib.dir/esminiLib.cpp.o CMakeFiles/esminiLib.dir/__/__/Modules/Controllers/vehicle.cpp.o   -L/home/smvic/esmini/EnvironmentSimulator/../externals/OpenSceneGraph/linux/lib  -L/home/smvic/esmini/EnvironmentSimulator/../externals/OpenSceneGraph/linux/lib/osgPlugins-3.6.5  -L/home/smvic/esmini/EnvironmentSimulator/../externals/OSI/linux/lib  -L/home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib  -L/home/smvic/esmini/EnvironmentSimulator/../externals/googletest/linux/lib  -Wl,-rpath,/home/smvic/esmini/EnvironmentSimulator/../externals/OpenSceneGraph/linux/lib:/home/smvic/esmini/EnvironmentSimulator/../externals/OpenSceneGraph/linux/lib/osgPlugins-3.6.5:/home/smvic/esmini/EnvironmentSimulator/../externals/OSI/linux/lib:/home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib:/home/smvic/esmini/EnvironmentSimulator/../externals/googletest/linux/lib: ../../Modules/PlayerBase/libPlayerBase.a ../../Modules/ScenarioEngine/libScenarioEngine.a ../../Modules/RoadManager/libRoadManager.a ../../Modules/CommonMini/libCommonMini.a ../../Modules/Controllers/libControllers.a -lopen_simulation_interface_pic -lprotobuf -llibsumostatic -lnetload -ltraciserver -llibsumostatic -lutils_vehicle -lutils_distribution -lutils_shapes -lutils_options -lutils_xml -lutils_geom -lutils_common -lutils_iodevices -lutils_traction_wire -lutils_emissions -lmicrosim_engine -lmicrosim_lcmodels -lmicrosim_devices -lmicrosim_trigger -lmicrosim_output -lmicrosim_transportables -lmicrosim_actions -lmicrosim_traffic_lights -lmicrosim -lmesosim -lforeign_phemlight -lforeign_tcpip -lmicrosim_cfmodels -lzlibstatic -lxerces-c_3 ../../Modules/ViewerBase/libViewerBase.a -losgdb_serializers_osgsim -losgdb_serializers_osg -losgdb_osg -losgdb_jpeg -losgAnimation -losgText -losgSim -losgViewer -losgUtil -losgDB -losgGA -losg -lOpenThreads -ljpeg -lGL -lX11 -lXrandr -ldl -lz -lXinerama -lfontconfig -lnetload -ltraciserver -lutils_vehicle -lutils_distribution -lutils_shapes -lutils_options -lutils_xml -lutils_geom -lutils_common -lutils_iodevices -lutils_traction_wire -lutils_emissions -lmicrosim_engine -lmicrosim_lcmodels -lmicrosim_devices -lmicrosim_trigger -lmicrosim_output -lmicrosim_transportables -lmicrosim_actions -lmicrosim_traffic_lights -lmicrosim -lmesosim -lforeign_phemlight -lforeign_tcpip -lmicrosim_cfmodels -lzlibstatic -lxerces-c_3 -losgdb_serializers_osgsim -losgdb_serializers_osg -losgdb_osg -losgdb_jpeg -losgAnimation -losgText -losgSim -losgViewer -losgUtil -losgDB -losgGA -losg -lOpenThreads -ljpeg -lGL -lX11 -lXrandr -ldl -lz -lXinerama -lfontconfig 
/usr/bin/ld: 找不到 -llibsumostatic
/usr/bin/ld: 找不到 -lnetload
/usr/bin/ld: 找不到 -ltraciserver
/usr/bin/ld: 找不到 -llibsumostatic
/usr/bin/ld: 找不到 -lutils_vehicle
/usr/bin/ld: 找不到 -lutils_distribution
/usr/bin/ld: 找不到 -lutils_shapes
/usr/bin/ld: 找不到 -lutils_options
/usr/bin/ld: 找不到 -lutils_xml
/usr/bin/ld: 找不到 -lutils_geom
/usr/bin/ld: 找不到 -lutils_common
/usr/bin/ld: 找不到 -lutils_iodevices
/usr/bin/ld: 找不到 -lutils_traction_wire
/usr/bin/ld: 找不到 -lutils_emissions
/usr/bin/ld: 找不到 -lmicrosim_engine
/usr/bin/ld: 找不到 -lmicrosim_lcmodels
/usr/bin/ld: 找不到 -lmicrosim_devices
/usr/bin/ld: 找不到 -lmicrosim_trigger
/usr/bin/ld: 找不到 -lmicrosim_output
/usr/bin/ld: 找不到 -lmicrosim_transportables
/usr/bin/ld: 找不到 -lmicrosim_actions
/usr/bin/ld: 找不到 -lmicrosim_traffic_lights
/usr/bin/ld: 找不到 -lmicrosim
/usr/bin/ld: 找不到 -lmesosim
/usr/bin/ld: 找不到 -lforeign_phemlight
/usr/bin/ld: 找不到 -lforeign_tcpip
/usr/bin/ld: 找不到 -lmicrosim_cfmodels
/usr/bin/ld: 找不到 -lzlibstatic
/usr/bin/ld: 找不到 -lxerces-c_3
/usr/bin/ld: 找不到 -losgdb_serializers_osgsim
/usr/bin/ld: 找不到 -losgdb_serializers_osg
/usr/bin/ld: 找不到 -losgdb_osg
/usr/bin/ld: 找不到 -losgdb_jpeg
/usr/bin/ld: 找不到 -lnetload
/usr/bin/ld: 找不到 -ltraciserver
/usr/bin/ld: 找不到 -lutils_vehicle
/usr/bin/ld: 找不到 -lutils_distribution
/usr/bin/ld: 找不到 -lutils_shapes
/usr/bin/ld: 找不到 -lutils_options
/usr/bin/ld: 找不到 -lutils_xml
/usr/bin/ld: 找不到 -lutils_geom
/usr/bin/ld: 找不到 -lutils_common
/usr/bin/ld: 找不到 -lutils_iodevices
/usr/bin/ld: 找不到 -lutils_traction_wire
/usr/bin/ld: 找不到 -lutils_emissions
/usr/bin/ld: 找不到 -lmicrosim_engine
/usr/bin/ld: 找不到 -lmicrosim_lcmodels
/usr/bin/ld: 找不到 -lmicrosim_devices
/usr/bin/ld: 找不到 -lmicrosim_trigger
/usr/bin/ld: 找不到 -lmicrosim_output
/usr/bin/ld: 找不到 -lmicrosim_transportables
/usr/bin/ld: 找不到 -lmicrosim_actions
/usr/bin/ld: 找不到 -lmicrosim_traffic_lights
/usr/bin/ld: 找不到 -lmicrosim
/usr/bin/ld: 找不到 -lmesosim
/usr/bin/ld: 找不到 -lforeign_phemlight
/usr/bin/ld: 找不到 -lforeign_tcpip
/usr/bin/ld: 找不到 -lmicrosim_cfmodels
/usr/bin/ld: 找不到 -lzlibstatic
/usr/bin/ld: 找不到 -lxerces-c_3
/usr/bin/ld: 找不到 -losgdb_serializers_osgsim
/usr/bin/ld: 找不到 -losgdb_serializers_osg
/usr/bin/ld: 找不到 -losgdb_osg
/usr/bin/ld: 找不到 -losgdb_jpeg
collect2: error: ld returned 1 exit status
make[2]: *** [EnvironmentSimulator/Libraries/esminiLib/CMakeFiles/esminiLib.dir/build.make:108:EnvironmentSimulator/Libraries/esminiLib/libesminiLib.so] 错误 1
make[1]: *** [CMakeFiles/Makefile2:642:EnvironmentSimulator/Libraries/esminiLib/CMakeFiles/esminiLib.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2

sumo部分链接库将sumo文件夹~/sumo/build/cmake-build/src下搜索lib,将搜索到的所有文件拷贝至~/esmini/externals/SUMO/linux/lib文件夹下

OSG部分链接库将~/OpenSceneGraph/build/lib以及~/OpenSceneGraph/build/build拷贝到~/esmini/externals/OpenSceneGraph/linux
并且将~/esmini/externals/OpenSceneGraph/linux/lib文件夹中osgPlugins-3.7.0文件夹重命名为osgPlugins-3.6.5
然后进入这个文件夹,找到osgdb_serializers_osgsim.soosgdb_serializers_osg.soosgdb_osg.soosgdb_jpeg.so这四个文件,对其重命名,在其名称前加上lib变为libosgdb_serializers_osgsim.solibosgdb_serializers_osg.solibosgdb_osg.solibosgdb_jpeg.so

以上两部分解决了大部分的链接库问题,然后再次编译仍存在问题

/usr/bin/ld: 找不到 -lzlibstatic
/usr/bin/ld: 找不到 -lxerces-c_3

缺少zlibstatic和xerces-c_3两个链接库

2.6 缺少zlibstatic链接库

zlib官网在http://www.zlib.net/,可以在这里下载,下载下图中绿色部分源码请添加图片描述之后解压

tar -xvf zlib-1.2.11.tar.gz

或者从github上使用git clone命令,github仓库在https://github.com/madler/zlib

cd ~
git clone https://github.com/madler/zlib.git

上述操作均为zlib1.2.11版本,之后进行编译安装

cd <your zlib>你的zlib文件夹路径
./configure
make
sudo make install

请添加图片描述
将zlib文件夹中编译产生的动态库libz.so.1.2.11复制到~/esmini/externals/OpenSceneGraph/linux/lib以及~/esmini/externals/SUMO/linux/lib中,并将该文件名改为libzlibstatic.so

2.7 缺少xerces-c_3链接库

在xerces-c_3官网下载http://xerces.apache.org/xerces-c/download.cgi
下载linuxe/unix下的源程序包xerces-c-current.tar.gz

请添加图片描述tar -xzvf xerces-c-current.tar.gz
解压后复制到home路径

tar -xzvf xerces-c-current.tar.gz

终端进入xerces-c_3文件夹编译安装

cd ~/xerces-c-3.2.3
./configure --enable-static CC=gcc-4.3 CXX=g++-4.3 CFLAGS=-O3 CXXFLAGS=-O3
make
sudo make install

安装完成后会在~/xerces-c/src/.libs路径下生成libxerces-c-3.2.so动态库,将该文件拷贝至~/esmini/externals/SUMO/linux/lib/,并重命名为libxerces-c_3.so

~/esmini/build文件夹路径下再次执行

cmake --build . --config Release --target install

2.8 FOX错误及问题解决

再次出现问题undefined reference to FX::FXMutex::XXX()

MSVehicleTransfer.cpp:(.text+0x9ad): undefined reference to `FX::FXMutex::lock()'
/usr/bin/ld: MSVehicleTransfer.cpp:(.text+0x9ed): undefined reference to `FX::FXMutex::unlock()'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libmicrosim.a(MSVehicleTransfer.cpp.o): in function `MSVehicleTransfer::checkInsertions(long long)':
MSVehicleTransfer.cpp:(.text+0x18a5): undefined reference to `FX::FXMutex::lock()'
/usr/bin/ld: MSVehicleTransfer.cpp:(.text+0x18b5): undefined reference to `FX::FXMutex::unlock()'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libmicrosim.a(MSVehicleTransfer.cpp.o): in function `MSVehicleTransfer::~MSVehicleTransfer()':
MSVehicleTransfer.cpp:(.text+0x3b): undefined reference to `FX::FXMutex::~FXMutex()'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libmicrosim.a(MSVehicleTransfer.cpp.o): in function `MSVehicleTransfer::remove(MSVehicle*)':
MSVehicleTransfer.cpp:(.text+0x1a7): undefined reference to `FX::FXMutex::unlock()'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libmicrosim.a(MSVehicleTransfer.cpp.o): in function `MSVehicleTransfer::clearState()':
MSVehicleTransfer.cpp:(.text+0x2d0): undefined reference to `FX::FXMutex::unlock()'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libmicrosim_devices.a(MSDevice_Transportable.cpp.o): in function `MSDevice_Transportable::~MSDevice_Transportable()':
MSDevice_Transportable.cpp:(.text+0x12cd): undefined reference to `FX::FXMutex::~FXMutex()'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libmicrosim_devices.a(MSDevice_Transportable.cpp.o): in function `MSDevice_Transportable::MSDevice_Transportable(SUMOVehicle&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) [clone .cold]':
MSDevice_Transportable.cpp:(.text.unlikely+0x246): undefined reference to `FX::FXMutex::~FXMutex()'
collect2: error: ld returned 1 exit status
make[2]: *** [EnvironmentSimulator/Applications/esmini/CMakeFiles/esmini.dir/build.make:93:EnvironmentSimulator/Applications/esmini/esmini] 错误 1
make[1]: *** [CMakeFiles/Makefile2:702:EnvironmentSimulator/Applications/esmini/CMakeFiles/esmini.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2

该问题为缺少utils_foxtools的动态链接库

首先在github找到对应的fox-1.6的工程https://github.com/franko/fox-1.6
该版本为稳定版FOX-1.6.57,使用以下命令克隆及编译安装

cd ~
git clone https://github.com/franko/fox-1.6.git
cd fox-1.6
./configure --enable-shared
make
sudo make install

然后在~/fox-1.6/src/.libs路径下找到libFOX-1.6.so.0.0.57,将该文件拷贝至~/esmini/externals/SUMO/linux/lib/,并重命名为libutils_foxtools.so

之后打开~/esmini/EnvironmentSimulator/CMakeLists.txt,找到# GoogleTest package字段,在此之前加入如下一段代码

link_libraries("/home/smvic/esmini/externals/SUMO/linux/lib/libutils_foxtools.so")

请添加图片描述
再次编译

cmake ..
cmake --build . --config Release --target install

该问题解决

2.9 PROJ错误及问题解决

再次编译esmini时发现如下错误

/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libutils_geom.a(GeoConvHelper.cpp.o): in function `GeoConvHelper::~GeoConvHelper()':
GeoConvHelper.cpp:(.text+0x12): undefined reference to `proj_destroy'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x20): undefined reference to `proj_destroy'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x2e): undefined reference to `proj_destroy'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libutils_geom.a(GeoConvHelper.cpp.o): in function `GeoConvHelper::GeoConvHelper(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Position const&, Boundary const&, Boundary const&, double, double, bool, bool)':
GeoConvHelper.cpp:(.text+0x42d): undefined reference to `proj_create'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libutils_geom.a(GeoConvHelper.cpp.o): in function `GeoConvHelper::operator=(GeoConvHelper const&)':
GeoConvHelper.cpp:(.text+0x631): undefined reference to `proj_destroy'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x649): undefined reference to `proj_destroy'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x661): undefined reference to `proj_destroy'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x67b): undefined reference to `proj_create'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libutils_geom.a(GeoConvHelper.cpp.o): in function `GeoConvHelper::cartesian2geo(Position&) const':
GeoConvHelper.cpp:(.text+0x26b0): undefined reference to `proj_trans'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x26dc): undefined reference to `proj_todeg'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x26f0): undefined reference to `proj_todeg'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libutils_geom.a(GeoConvHelper.cpp.o): in function `GeoConvHelper::x2cartesian_const(Position&) const':
GeoConvHelper.cpp:(.text+0x2efe): undefined reference to `proj_torad'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x2f0e): undefined reference to `proj_torad'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x2f55): undefined reference to `proj_trans'
/usr/bin/ld: /home/smvic/esmini/EnvironmentSimulator/../externals/SUMO/linux/lib/libutils_geom.a(GeoConvHelper.cpp.o): in function `GeoConvHelper::x2cartesian(Position&, bool)':
GeoConvHelper.cpp:(.text+0x3900): undefined reference to `proj_trans'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x3943): undefined reference to `proj_todeg'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x3958): undefined reference to `proj_todeg'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x3e9a): undefined reference to `proj_create'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x4732): undefined reference to `proj_create'
/usr/bin/ld: GeoConvHelper.cpp:(.text+0x4744): undefined reference to `proj_create'
collect2: error: ld returned 1 exit status
make[2]: *** [EnvironmentSimulator/Applications/esmini/CMakeFiles/esmini.dir/build.make:95:EnvironmentSimulator/Applications/esmini/esmini] 错误 1
make[1]: *** [CMakeFiles/Makefile2:702:EnvironmentSimulator/Applications/esmini/CMakeFiles/esmini.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2

需要安装PROJ6,github仓库地址https://github.com/OSGeo/PROJ
版本选择6.1.1版请添加图片描述

之后进行代码克隆及编译

cd ~
git clone https://github.com/OSGeo/PROJ.git
sudo apt-get install sqlite
./configure --enable-static --enable-shared
make
sudo make install

请添加图片描述
期间如果在./configure --enable-static --enable-shared这一步时报configure: error: Please install sqlite3 binary.错误,如上图所示,说明没有装sqlite,使用如下命令安装

sudo apt-get install sqlite

编译完成后会在/usr/local/lib路径下生成libproj.so.15.1.1,将该文件拷贝至~/esmini/externals/SUMO/linux/lib/,并重命名为libproj_6_1.so

之后打开~/esmini/EnvironmentSimulator/CMakeLists.txt,找到# GoogleTest package字段,在此之前加入如下一段代码

link_libraries("/home/smvic/esmini/externals/SUMO/linux/lib/libproj_6_1.so")

请添加图片描述

再次编译

cmake ..
cmake --build . --config Release --target install

该问题解决

至此,所有问题解决,esmini成功编译请添加图片描述

3. 运行测试用例

使用以下命令进行测试

cd ~/esmini
./bin/esmini --window 60 60 800 400 --osc ./resources/xosc/cut-in.xosc

出现错误如下

./esmini: error while loading shared libraries: libosgdb_serializers_osgsim.so: cannot open shared object file: No such file or directory

提示找不到相关库文件
使用如下命令查看链接的库文件

cd bin
ldd esmini

发现以下几个我们自己修改名字的动态库文件找不到

	libosgdb_serializers_osgsim.so => not found
	libosgdb_serializers_osg.so => not found
	libosgdb_osg.so => not found
	libosgdb_jpeg.so => not found

需要制作软链接

cd /usr/local/lib/osgPlugins-3.6.5
sudo ln -s osgdb_serializers_osgsim.so libosgdb_serializers_osgsim.so
sudo ln -s osgdb_serializers_osg.so libosgdb_serializers_osg.so
sudo ln -s osgdb_osg.so libosgdb_osg.so
sudo ln -s osgdb_jpeg.so libosgdb_jpeg.so
sudo cp libosgdb_serializers_osgsim.so ..
sudo cp libosgdb_serializers_osg.so ..
sudo cp libosgdb_osg.so ..
sudo cp libosgdb_jpeg.so ..
sudo ldconfig

再次查看esmini的链接库

cd ~/esmini/bin
ldd esmini

请添加图片描述
这几个链接库都找到了,再次测试

cd ~/esmini
./bin/esmini --window 60 60 800 400 --osc ./resources/xosc/cut-in.xosc

成功运行,所有问题均解决
请添加图片描述

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HIT_Vanni

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值