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.so
,osgdb_serializers_osg.so
,osgdb_osg.so
,osgdb_jpeg.so
这四个文件,对其重命名,在其名称前加上lib
变为libosgdb_serializers_osgsim.so
,libosgdb_serializers_osg.so
,libosgdb_osg.so
,libosgdb_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
成功运行,所有问题均解决