Skip to content

Commit ebf1637

Browse files
tobifalkcassava
authored andcommitted
vendor: Add ESMini simulator package
1 parent 865668e commit ebf1637

File tree

9 files changed

+609
-0
lines changed

9 files changed

+609
-0
lines changed
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
src/
2+
build/
3+
4+
# Conan
5+
conan.lock
6+
conaninfo.txt
7+
conanbuildinfo.txt
8+
graph_info.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
cmake_minimum_required(VERSION 3.8)
2+
3+
project(esmini_conan
4+
LANGUAGES CXX
5+
)
6+
7+
include(${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
8+
conan_basic_setup(NO_OUTPUT_DIRS)
9+
10+
conan_set_find_paths()
11+
conan_set_find_library_paths()
12+
13+
set(CMAKE_FIND_DEBUG_MODE TRUE)
14+
15+
add_subdirectory(${CMAKE_PROJECT_SUBDIR})
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Override Makefile.package settings.
2+
override SOURCE_DIR := src
3+
override PACKAGE_CHANNEL := cloe/stable
4+
override CLEAN_SOURCE_DIR := true
5+
6+
PROJECT_ROOT := ../../../..
7+
include ${PROJECT_ROOT}/Makefile.package
+172
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
import glob
2+
import os
3+
from pathlib import Path
4+
from conans import CMake, ConanFile, RunEnvironment, tools
5+
from conans.tools import SystemPackageTool
6+
7+
8+
class ESMini(ConanFile):
9+
name = "esmini"
10+
version = "2.25.1"
11+
license = "Mozilla Public License Version 2.0"
12+
url = "https://github.com/esmini/esmini"
13+
description = "Basic OpenScenario player."
14+
topics = ("Environment Simulator", "OpenScenario", "OpenDrive")
15+
settings = "os", "compiler", "build_type", "arch"
16+
options = {
17+
"shared": [True, False],
18+
"fPIC": [True, False],
19+
"test": [True, False],
20+
"with_osg": [True, False],
21+
"with_osi": [True, False],
22+
"with_sumo": [True, False],
23+
}
24+
default_options = {
25+
"shared": True,
26+
"fPIC": True,
27+
"test": True,
28+
"with_osg": True,
29+
"with_osi": True,
30+
"with_sumo": False,
31+
}
32+
generators = "cmake"
33+
build_policy = "missing"
34+
no_copy_source = False
35+
requires = []
36+
37+
_patch_file = "patches/esmini_2_25_1.patch"
38+
39+
_pkg_scenario_dir = "scenarios"
40+
41+
exports_sources = [
42+
"CMakeLists.txt",
43+
_patch_file,
44+
f"{_pkg_scenario_dir}/*",
45+
]
46+
_git_url = "https://github.com/esmini/esmini.git"
47+
_git_dir = "esmini"
48+
_git_ref = "develop" if version == "latest" else f"v{version}"
49+
_sim_dir = "EnvironmentSimulator"
50+
_test_deps = [_sim_dir, "resources", "scripts"]
51+
_test_dir = f"{_git_dir}/{_sim_dir}/Unittest/"
52+
_lib_dir = f"{_git_dir}/{_sim_dir}/Libraries/"
53+
_bin_dir = f"{_git_dir}/{_sim_dir}/Applications/"
54+
_resources_dir = f"{_git_dir}/resources"
55+
56+
_protobuf_dyn = True
57+
58+
_cmake = None
59+
60+
def configure(self):
61+
if self.options.with_osg:
62+
self.options.with_osi = True
63+
if self.options.with_osi:
64+
self.options["open-simulation-interface"].shared = self.options.shared
65+
self.options["protobuf"].shared = self._protobuf_dyn
66+
self.options["protobuf"].debug_suffix = False
67+
68+
def source(self):
69+
git = tools.Git(folder=self._git_dir)
70+
git.clone(self._git_url, self._git_ref, shallow=True)
71+
72+
def system_requirements(self):
73+
pkg_names = None
74+
if self.options.with_osg:
75+
pkg_names = [
76+
"libfontconfig1-dev",
77+
"libgl-dev",
78+
"libxrandr-dev",
79+
"libxinerama-dev",
80+
] # TODO: add all system requirements
81+
if pkg_names:
82+
installer = SystemPackageTool()
83+
for pkg in pkg_names:
84+
installer.install([pkg])
85+
86+
def requirements(self):
87+
if self.options.with_osi:
88+
self.requires("protobuf/[~=3.15.5]", override=True)
89+
self.requires("open-simulation-interface/3.3.1@cloe/stable")
90+
91+
def _configure_cmake(self):
92+
if self._cmake:
93+
return self._cmake
94+
self._cmake = CMake(self)
95+
self._cmake.definitions["CMAKE_PROJECT_SUBDIR"] = self._git_dir
96+
self._cmake.definitions["CMAKE_PROJECT_VERSION"] = self.version
97+
self._cmake.definitions["CMAKE_EXPORT_COMPILE_COMMANDS"] = True
98+
self._cmake.definitions["BUILD_SHARED_LIBS"] = self.options.shared
99+
self._cmake.definitions["USE_OSG"] = self.options.with_osg
100+
self._cmake.definitions["USE_OSI"] = self.options.with_osi
101+
self._cmake.definitions["USE_SUMO"] = self.options.with_sumo
102+
self._cmake.definitions["USE_GTEST"] = self.options.test
103+
self._cmake.definitions["DYN_PROTOBUF"] = self._protobuf_dyn
104+
self._cmake.configure()
105+
return self._cmake
106+
107+
def build(self):
108+
trg_path = self._git_dir
109+
patch_file = self._patch_file
110+
if not self.in_local_cache:
111+
trg_path = self.source_folder + "/" + trg_path
112+
patch_file = self.recipe_folder + "/" + patch_file
113+
tools.patch(base_path=trg_path, patch_file=patch_file)
114+
115+
cmake = self._configure_cmake()
116+
cmake.build()
117+
if self.options.test:
118+
self._prepare_tests()
119+
with tools.chdir(self._test_dir):
120+
with tools.environment_append(RunEnvironment(self).vars):
121+
for test in glob.glob("*_test"):
122+
self.run(Path(test).resolve().as_posix())
123+
self._cleanup_tests()
124+
125+
def _prepare_tests(self):
126+
for d in self._test_deps:
127+
self.run(f"ln -sf {self.source_folder}/{self._git_dir}/{d}")
128+
129+
def _cleanup_tests(self):
130+
for d in self._test_deps:
131+
if os.path.islink(d):
132+
self.run(f"rm -f {d}")
133+
134+
def package(self):
135+
cmake = self._configure_cmake()
136+
cmake.install()
137+
self.copy(
138+
pattern="*.hpp",
139+
dst="include",
140+
src=f"{self.source_folder}/{self._lib_dir}",
141+
keep_path=False,
142+
)
143+
self.copy(pattern="*.so", dst="lib", src=self._lib_dir, keep_path=False)
144+
self.copy(pattern="*.a", dst="lib", src=self._lib_dir, keep_path=False)
145+
apps = os.listdir(self._bin_dir)
146+
for app in apps:
147+
self.copy(
148+
pattern=app, dst="bin", src=f"{self._bin_dir}/{app}", keep_path=False
149+
)
150+
self.copy(
151+
pattern="*",
152+
dst=self._pkg_scenario_dir,
153+
src=f"{self.source_folder}/{self._resources_dir}",
154+
)
155+
assert Path(f"{self.package_folder}/{self._pkg_scenario_dir}/xosc").exists()
156+
self.copy(
157+
"*",
158+
dst=self._pkg_scenario_dir,
159+
src=f"{self.source_folder}/{self._pkg_scenario_dir}",
160+
)
161+
162+
def package_id(self):
163+
if self.options.with_osi:
164+
self.info.requires["open-simulation-interface"].full_package_mode()
165+
166+
def package_info(self):
167+
self.cpp_info.set_property("cmake_find_mode", "both")
168+
self.cpp_info.set_property("cmake_file_name", self.name)
169+
self.cpp_info.set_property("pkg_config_name", self.name)
170+
171+
self.cpp_info.libs = tools.collect_libs(self)
172+
self.runenv_info.define("ESMINI_XOSC_PATH", f"{self.package_folder}/{self._pkg_scenario_dir}/xosc")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
diff --git a/EnvironmentSimulator/CMakeLists.txt b/EnvironmentSimulator/CMakeLists.txt
2+
index 12e7b75..20b3ed1 100644
3+
--- a/EnvironmentSimulator/CMakeLists.txt
4+
+++ b/EnvironmentSimulator/CMakeLists.txt
5+
@@ -27,7 +27,7 @@ set ( GTEST_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/googletest" )
6+
set( CMAKE_VERBOSE_MAKEFILE true )
7+
8+
if ( ${FILE_STORAGE} STREQUAL "github" )
9+
- set ( MODELS_PACKAGE_URL https://github.com/esmini/resources/raw/main/models/models.7z )
10+
+ set ( MODELS_PACKAGE_URL https://dl.dropboxusercontent.com/s/5gk8bvgzqiaaoco/models.7z?dl=0 )
11+
if (APPLE)
12+
set ( OSG_PACKAGE_URL https://github.com/esmini/resources/raw/main/libs/OpenSceneGraph_mac.7z )
13+
set ( OSI_PACKAGE_URL https://github.com/esmini/resources/raw/main/libs/osi_mac.7z )
14+
diff --git a/EnvironmentSimulator/Modules/ScenarioEngine/SourceFiles/OSIReporter.cpp b/EnvironmentSimulator/Modules/ScenarioEngine/SourceFiles/OSIReporter.cpp
15+
index 5eee886..a246b2f 100644
16+
--- a/EnvironmentSimulator/Modules/ScenarioEngine/SourceFiles/OSIReporter.cpp
17+
+++ b/EnvironmentSimulator/Modules/ScenarioEngine/SourceFiles/OSIReporter.cpp
18+
@@ -613,9 +613,9 @@ int OSIReporter::UpdateOSIMovingObject(ObjectState *objectState)
19+
obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_driver_id()->set_value((uint64_t)objectState->state_.info.ctrl_type);
20+
21+
// Set OSI Moving Object Boundingbox
22+
- obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_bbcenter_to_rear()->set_x((double)(objectState->state_.info.boundingbox.center_.x_));
23+
- obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_bbcenter_to_rear()->set_y((double)(objectState->state_.info.boundingbox.center_.y_));
24+
- obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_bbcenter_to_rear()->set_z((double)(objectState->state_.info.boundingbox.center_.z_));
25+
+ obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_bbcenter_to_rear()->set_x((double)(-1.0*objectState->state_.info.boundingbox.center_.x_));
26+
+ obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_bbcenter_to_rear()->set_y((double)(-1.0*objectState->state_.info.boundingbox.center_.y_));
27+
+ obj_osi_internal.mobj->mutable_vehicle_attributes()->mutable_bbcenter_to_rear()->set_z((double)(-1.0*objectState->state_.info.boundingbox.center_.z_));
28+
obj_osi_internal.mobj->mutable_base()->mutable_dimension()->set_height(objectState->state_.info.boundingbox.dimensions_.height_);
29+
obj_osi_internal.mobj->mutable_base()->mutable_dimension()->set_width(objectState->state_.info.boundingbox.dimensions_.width_);
30+
obj_osi_internal.mobj->mutable_base()->mutable_dimension()->set_length(objectState->state_.info.boundingbox.dimensions_.length_);
31+
diff --git a/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp b/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp
32+
index 5bfc170..79798dc 100644
33+
--- a/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp
34+
+++ b/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp
35+
@@ -265,7 +265,7 @@ TEST(GetOSIRoadLaneTest, lane_no_obj)
36+
SE_StepDT(0.001f);
37+
SE_FlushOSIFile();
38+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
39+
- EXPECT_EQ(fileStatus.st_size, 68925); // initial OSI size, including static content
40+
+ EXPECT_EQ(fileStatus.st_size, 70214); // initial OSI size, including static content
41+
42+
int road_lane_size;
43+
44+
@@ -277,12 +277,12 @@ TEST(GetOSIRoadLaneTest, lane_no_obj)
45+
SE_StepDT(0.001f); // Step for write another frame to osi file
46+
SE_FlushOSIFile();
47+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
48+
- EXPECT_EQ(fileStatus.st_size, 69388); // slight growth due to only dynamic updates
49+
+ EXPECT_EQ(fileStatus.st_size, 70829); // slight growth due to only dynamic updates
50+
51+
SE_StepDT(0.001f); // Step for write another frame to osi file
52+
SE_FlushOSIFile();
53+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
54+
- EXPECT_EQ(fileStatus.st_size, 69852); // slight growth due to only dynamic updates
55+
+ EXPECT_EQ(fileStatus.st_size, 71445); // slight growth due to only dynamic updates
56+
57+
SE_Close();
58+
}
59+
@@ -784,13 +784,13 @@ TEST(GroundTruthTests, check_GroundTruth_including_init_state)
60+
SE_Close();
61+
62+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
63+
- EXPECT_EQ(fileStatus.st_size, 19831);
64+
+ EXPECT_EQ(fileStatus.st_size, 30282);
65+
66+
// Read OSI file
67+
FILE* file = fopen("gt.osi", "rb");
68+
ASSERT_NE(file, nullptr);
69+
70+
- const int max_msg_size = 10000;
71+
+ const int max_msg_size = 10091;
72+
int msg_size;
73+
char msg_buf[max_msg_size];
74+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
diff --git a/EnvironmentSimulator/CMakeLists.txt b/EnvironmentSimulator/CMakeLists.txt
2+
index 005d33e..7cb691d 100644
3+
--- a/EnvironmentSimulator/CMakeLists.txt
4+
+++ b/EnvironmentSimulator/CMakeLists.txt
5+
@@ -1,5 +1,5 @@
6+
7+
-set ( FILE_STORAGE "github" ) # "github", "dropbox", "google" (Dropbox limited GB/Day)
8+
+set ( FILE_STORAGE "dropbox" ) # "github", "dropbox", "google" (Dropbox limited GB/Day)
9+
10+
set ( VIEWER_BASE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/ViewerBase" )
11+
set ( PLAYER_BASE_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/PlayerBase" )
12+
@@ -17,7 +17,7 @@ set ( CONTROLLERS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Modules/Controllers")
13+
# OpenSceneGraph package adapted for this project
14+
set ( OSG_VERSION "osg161" )
15+
set ( OSG_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/OpenSceneGraph" )
16+
-set ( OSI_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/OSI" )
17+
+set ( OSI_BASE_DIR "${CONAN_OPEN-SIMULATION-INTERFACE_ROOT}" )
18+
set ( SUMO_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../externals/SUMO" )
19+
20+
# GoogleTest package
21+
@@ -117,7 +117,7 @@ set ( MODELS_DIR "${MODELS_BASE_DIR}/models" )
22+
set ( MODELS_PACKAGE_FILENAME models.7z)
23+
24+
set ( OSG_DIR "${OSG_BASE_DIR}/${EXT_DIR_NAME}" )
25+
-set ( OSI_DIR "${OSI_BASE_DIR}/${EXT_DIR_NAME}" )
26+
+set ( OSI_DIR "${OSI_BASE_DIR}/" )
27+
set ( SUMO_DIR "${SUMO_BASE_DIR}/${EXT_DIR_NAME}" )
28+
set ( GTEST_DIR "${GTEST_BASE_DIR}/${EXT_DIR_NAME}" )
29+
30+
@@ -132,7 +132,7 @@ set ( OSG_LIBRARIES_PATH
31+
32+
set ( OSI_INCLUDE_DIR "${OSI_DIR}/include" )
33+
if (DYN_PROTOBUF)
34+
- set ( OSI_LIBRARIES_PATH "${OSI_DIR}/lib-dyn" )
35+
+ set ( OSI_LIBRARIES_PATH "${OSI_DIR}/lib" )
36+
else ()
37+
set ( OSI_LIBRARIES_PATH "${OSI_DIR}/lib" )
38+
endif (DYN_PROTOBUF)
39+
@@ -272,13 +272,13 @@ elseif(LINUX)
40+
41+
if (DYN_PROTOBUF)
42+
set ( OSI_LIBRARIES
43+
- optimized open_simulation_interface debug open_simulation_interfaced
44+
- optimized protobuf debug protobufd
45+
+ optimized open_simulation_interface debug open_simulation_interface
46+
+ optimized protobuf debug protobuf
47+
)
48+
else ()
49+
set ( OSI_LIBRARIES
50+
- optimized open_simulation_interface_pic debug open_simulation_interface_picd
51+
- optimized protobuf debug protobufd
52+
+ optimized open_simulation_interface_pic debug open_simulation_interface_pic
53+
+ optimized protobuf debug protobuf
54+
)
55+
endif (DYN_PROTOBUF)
56+
57+
@@ -352,8 +352,8 @@ elseif(MSVC)
58+
)
59+
60+
set ( OSI_LIBRARIES
61+
- optimized libprotobuf debug libprotobufd
62+
- optimized open_simulation_interface_pic debug open_simulation_interface_picd
63+
+ optimized libprotobuf debug libprotobuf
64+
+ optimized open_simulation_interface_pic debug open_simulation_interface_pic
65+
)
66+
67+
set ( SUMO_LIBRARIES
68+
@@ -532,9 +532,9 @@ endif()
69+
70+
# download OSI
71+
set ( OSI_PACKAGE_FILENAME "osi.7z" )
72+
-if (DEFINED OSI_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${OSI_DIR} ))
73+
- download_and_extract( ${OSI_PACKAGE_URL} ${OSI_BASE_DIR} ${OSI_PACKAGE_FILENAME} )
74+
-endif()
75+
+#if (DEFINED OSI_DIR AND (FORCE_DOWNLOAD_BINARIES OR NOT EXISTS ${OSI_DIR} ))
76+
+# download_and_extract( ${OSI_PACKAGE_URL} ${OSI_BASE_DIR} ${OSI_PACKAGE_FILENAME} )
77+
+#endif()
78+
79+
# download SUMO
80+
set ( SUMO_PACKAGE_FILENAME "sumo.7z" )
81+
diff --git a/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp b/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp
82+
index 5b5edb3..f24c99c 100644
83+
--- a/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp
84+
+++ b/EnvironmentSimulator/Unittest/ScenarioEngineDll_test.cpp
85+
@@ -332,7 +332,7 @@ TEST(GetOSIRoadLaneTest, lane_no_obj)
86+
SE_StepDT(0.001f);
87+
SE_FlushOSIFile();
88+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
89+
- EXPECT_EQ(fileStatus.st_size, 69228); // initial OSI size, including static content
90+
+ EXPECT_EQ(fileStatus.st_size, 70779); // initial OSI size, including static content
91+
92+
int road_lane_size;
93+
94+
@@ -344,12 +344,12 @@ TEST(GetOSIRoadLaneTest, lane_no_obj)
95+
SE_StepDT(0.001f); // Step for write another frame to osi file
96+
SE_FlushOSIFile();
97+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
98+
- EXPECT_EQ(fileStatus.st_size, 69691); // slight growth due to only dynamic updates
99+
+ EXPECT_EQ(fileStatus.st_size, 71394); // slight growth due to only dynamic updates
100+
101+
SE_StepDT(0.001f); // Step for write another frame to osi file
102+
SE_FlushOSIFile();
103+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
104+
- EXPECT_EQ(fileStatus.st_size, 70155); // slight growth due to only dynamic updates
105+
+ EXPECT_EQ(fileStatus.st_size, 72010); // slight growth due to only dynamic updates
106+
107+
SE_Close();
108+
}
109+
@@ -851,7 +851,7 @@ TEST(GroundTruthTests, check_GroundTruth_including_init_state)
110+
SE_Close();
111+
112+
ASSERT_EQ(stat("gt.osi", &fileStatus), 0);
113+
- EXPECT_EQ(fileStatus.st_size, 19471);
114+
+ EXPECT_EQ(fileStatus.st_size, 29760);
115+
116+
// Read OSI file
117+
FILE* file = fopen("gt.osi", "rb");

0 commit comments

Comments
 (0)