15 #ifndef OPENSCENARIO_INTERPRETER__OPENSCENARIO_INTERPRETER_HPP_
16 #define OPENSCENARIO_INTERPRETER__OPENSCENARIO_INTERPRETER_HPP_
18 #include <boost/variant.hpp>
20 #include <lifecycle_msgs/msg/state.hpp>
21 #include <lifecycle_msgs/msg/transition.hpp>
30 #include <openscenario_interpreter_msgs/msg/context.hpp>
31 #include <rclcpp/rclcpp.hpp>
32 #include <rclcpp_lifecycle/lifecycle_node.hpp>
37 #define INTERPRETER_INFO_STREAM(...) \
38 RCLCPP_INFO_STREAM(get_logger(), "\x1b[32m" << __VA_ARGS__ << "\x1b[0m")
42 #define INTERPRETER_ERROR_STREAM(...) \
43 RCLCPP_INFO_STREAM(get_logger(), "\x1b[1;31m" << __VA_ARGS__ << "\x1b[0m")
51 using Context = openscenario_interpreter_msgs::msg::Context;
53 const rclcpp_lifecycle::LifecyclePublisher<Context>::SharedPtr publisher_of_context;
55 double local_frame_rate;
57 double local_real_time_factor;
63 bool publish_empty_context;
67 std::shared_ptr<OpenScenario> script;
69 std::list<std::shared_ptr<ScenarioDefinition>> scenarios;
71 std::shared_ptr<rclcpp::TimerBase> timer;
75 boost::variant<common::junit::Pass, common::junit::Failure, common::junit::Error> result;
79 using Result = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn;
81 bool waiting_for_engagement_to_be_completed =
false;
93 auto engage()
const -> void;
101 auto on_activate(
const rclcpp_lifecycle::State &) -> Result
override;
103 auto on_cleanup(
const rclcpp_lifecycle::State &) -> Result
override;
105 auto on_configure(
const rclcpp_lifecycle::State &) -> Result
override;
107 auto on_deactivate(
const rclcpp_lifecycle::State &) -> Result
override;
109 auto on_error(
const rclcpp_lifecycle::State &) -> Result
override;
111 auto on_shutdown(
const rclcpp_lifecycle::State &) -> Result
override;
115 auto reset() -> void;
117 template <
typename T,
typename... Ts>
120 result = T(std::forward<decltype(
xs)>(
xs)...);
122 results.
name = boost::filesystem::path(osc_path).parent_path().parent_path().string();
124 const auto suite_name = boost::filesystem::path(osc_path).parent_path().filename().string();
126 const auto case_name = boost::filesystem::path(osc_path).stem().string();
128 boost::apply_visitor(
131 results.
testsuite(suite_name).testcase(case_name).pass.push_back(it);
134 results.
testsuite(suite_name).testcase(case_name).failure.push_back(it);
137 results.
testsuite(suite_name).testcase(case_name).error.push_back(it);
142 (boost::filesystem::path(output_directory) /
"result.junit.xml").c_str(),
" ");
145 template <
typename ExceptionHandler,
typename Thunk>
154 set<common::junit::Pass>();
155 return handle(action);
160 set<common::junit::Failure>(
"SimulationFailure", action.what());
161 return handle(action);
164 catch (
const AutowareError & error) {
165 set<common::junit::Error>(
"AutowareError", error.what());
166 return handle(error);
169 catch (
const SemanticError & error) {
170 set<common::junit::Error>(
"SemanticError", error.what());
171 return handle(error);
174 catch (
const SimulationError & error) {
175 set<common::junit::Error>(
"SimulationError", error.what());
176 return handle(error);
179 catch (
const SyntaxError & error) {
180 set<common::junit::Error>(
"SyntaxError", error.what());
181 return handle(error);
184 catch (
const std::exception & error)
186 set<common::junit::Error>(
"InternalError", error.what());
187 return handle(error);
192 set<common::junit::Error>(
"UnknownError",
"An unknown exception has occurred");
197 template <
typename TimeoutHandler,
typename Thunk>
218 return [
this](
const auto & statistics) {
221 "Your machine is not powerful enough to run the scenario at the specified frame rate ("
222 << local_frame_rate <<
" Hz). We recommend that you reduce the frame rate to "
223 << 1000.0 / statistics.template max<std::chrono::milliseconds>().count() <<
" or less.");
Definition: openscenario_interpreter.hpp:50
auto engage() const -> void
Definition: openscenario_interpreter.cpp:138
auto on_error(const rclcpp_lifecycle::State &) -> Result override
Definition: openscenario_interpreter.cpp:270
auto currentLocalFrameRate() const -> std::chrono::milliseconds
Definition: openscenario_interpreter.cpp:56
auto on_cleanup(const rclcpp_lifecycle::State &) -> Result override
Definition: openscenario_interpreter.cpp:263
auto defaultTimeoutHandler() const
Definition: openscenario_interpreter.hpp:205
auto engageable() const -> bool
Definition: openscenario_interpreter.cpp:150
auto on_shutdown(const rclcpp_lifecycle::State &) -> Result override
Definition: openscenario_interpreter.cpp:277
auto makeCurrentConfiguration() const -> traffic_simulator::Configuration
Definition: openscenario_interpreter.cpp:66
auto engaged() const -> bool
Definition: openscenario_interpreter.cpp:163
auto publishCurrentContext() const -> void
Definition: openscenario_interpreter.cpp:286
auto withTimeoutHandler(TimeoutHandler &&handle, Thunk &&thunk) -> decltype(auto)
Definition: openscenario_interpreter.hpp:198
auto withExceptionHandler(ExceptionHandler &&handle, Thunk &&thunk) -> decltype(auto)
Definition: openscenario_interpreter.hpp:146
auto on_activate(const rclcpp_lifecycle::State &) -> Result override
Definition: openscenario_interpreter.cpp:176
OPENSCENARIO_INTERPRETER_PUBLIC Interpreter(const rclcpp::NodeOptions &)
Definition: openscenario_interpreter.cpp:36
auto on_deactivate(const rclcpp_lifecycle::State &) -> Result override
Definition: openscenario_interpreter.cpp:256
auto set(Ts &&... xs) -> void
Definition: openscenario_interpreter.hpp:118
auto currentScenarioDefinition() const -> const std::shared_ptr< ScenarioDefinition > &
Definition: openscenario_interpreter.cpp:61
~Interpreter() override
Definition: openscenario_interpreter.cpp:54
auto on_configure(const rclcpp_lifecycle::State &) -> Result override
Definition: openscenario_interpreter.cpp:85
auto reset() -> void
Definition: openscenario_interpreter.cpp:304
Definition: simulator_core.hpp:521
Definition: simulator_core.hpp:588
Definition: custom_command_action.hpp:38
Definition: execution_timer.hpp:29
auto invoke(const std::string &tag, Thunk &&thunk)
Definition: execution_timer.hpp:98
auto getStatistics(const std::string &tag) -> const auto &
Definition: execution_timer.hpp:113
std::string String
Definition: string.hpp:24
constexpr auto overload(Ts &&... xs) -> typename utility::overloaded< typename std::decay< Ts >::type... >
Definition: overload.hpp:51
Definition: escape_sequence.hpp:22
Definition: junit5.hpp:25
#define OPENSCENARIO_INTERPRETER_PUBLIC
Definition: visibility.hpp:49
Definition: junit5.hpp:88
Definition: junit5.hpp:51
Definition: junit5.hpp:34
Definition: junit5.hpp:336
xs::string name
Definition: junit5.hpp:337
auto write_to(Ts &&... xs) const
Definition: junit5.hpp:381
auto testsuite(const xs::string &name) -> auto &
Definition: junit5.hpp:341
Definition: custom_command_action.hpp:32
Definition: configuration.hpp:29