15 #ifndef SIMULATION_INTERFACE__CONVERSIONS_HPP_
16 #define SIMULATION_INTERFACE__CONVERSIONS_HPP_
18 #include <osi_common.pb.h>
19 #include <simulation_interface/builtin_interfaces.pb.h>
20 #include <simulation_interface/geometry_msgs.pb.h>
21 #include <simulation_interface/rosgraph_msgs.pb.h>
22 #include <simulation_interface/simulation_api_schema.pb.h>
23 #include <simulation_interface/std_msgs.pb.h>
24 #include <simulation_interface/traffic_simulator_msgs.pb.h>
26 #include <autoware_control_msgs/msg/control.hpp>
27 #include <autoware_vehicle_msgs/msg/gear_command.hpp>
28 #include <builtin_interfaces/msg/duration.hpp>
29 #include <builtin_interfaces/msg/time.hpp>
31 #include <geometry_msgs/msg/accel.hpp>
32 #include <geometry_msgs/msg/point.hpp>
33 #include <geometry_msgs/msg/pose.hpp>
34 #include <geometry_msgs/msg/quaternion.hpp>
35 #include <geometry_msgs/msg/twist.hpp>
36 #include <geometry_msgs/msg/vector3.hpp>
38 #include <rosgraph_msgs/msg/clock.hpp>
40 #include <std_msgs/msg/header.hpp>
42 #include <traffic_simulator_msgs/msg/action_status.hpp>
43 #include <traffic_simulator_msgs/msg/axle.hpp>
44 #include <traffic_simulator_msgs/msg/axles.hpp>
45 #include <traffic_simulator_msgs/msg/bounding_box.hpp>
46 #include <traffic_simulator_msgs/msg/entity_status.hpp>
47 #include <traffic_simulator_msgs/msg/entity_type.hpp>
48 #include <traffic_simulator_msgs/msg/lanelet_pose.hpp>
49 #include <traffic_simulator_msgs/msg/misc_object_parameters.hpp>
50 #include <traffic_simulator_msgs/msg/pedestrian_parameters.hpp>
51 #include <traffic_simulator_msgs/msg/performance.hpp>
52 #include <traffic_simulator_msgs/msg/polyline_trajectory.hpp>
53 #include <traffic_simulator_msgs/msg/vehicle_parameters.hpp>
59 template <
typename Proto>
60 zmq::message_t
toZMQ(
const Proto & proto)
63 proto.SerializeToString(&serialized_str);
65 zmq::message_t msg(serialized_str.size());
66 std::memcpy(msg.data(), serialized_str.data(), serialized_str.size());
70 template <
typename Proto>
74 proto.ParseFromArray(msg.data(),
static_cast<int>(msg.size()));
83 void toProto(
const geometry_msgs::msg::Quaternion & q, geometry_msgs::Quaternion & proto);
84 void toMsg(
const geometry_msgs::Quaternion & proto, geometry_msgs::msg::Quaternion & q);
89 void toProto(
const geometry_msgs::msg::Twist & t, geometry_msgs::Twist & proto);
90 void toMsg(
const geometry_msgs::Twist & proto, geometry_msgs::msg::Twist & t);
91 void toProto(
const geometry_msgs::msg::Accel & a, geometry_msgs::Accel & proto);
92 void toMsg(
const geometry_msgs::Accel & proto, geometry_msgs::msg::Accel & a);
100 const traffic_simulator_msgs::msg::Performance & performance,
101 traffic_simulator_msgs::Performance & proto);
103 const traffic_simulator_msgs::Performance & proto,
104 traffic_simulator_msgs::msg::Performance & performance);
105 void toProto(
const traffic_simulator_msgs::msg::Axle & axle, traffic_simulator_msgs::Axle & proto);
106 void toMsg(
const traffic_simulator_msgs::Axle & proto, traffic_simulator_msgs::msg::Axle & axle);
108 const traffic_simulator_msgs::msg::Axles & axles, traffic_simulator_msgs::Axles & proto);
109 void toMsg(
const traffic_simulator_msgs::Axles & proto, traffic_simulator_msgs::msg::Axles & axles);
111 const traffic_simulator_msgs::msg::VehicleParameters & p,
112 traffic_simulator_msgs::VehicleParameters & proto);
114 const traffic_simulator_msgs::VehicleParameters & proto,
115 traffic_simulator_msgs::msg::VehicleParameters & p);
117 const traffic_simulator_msgs::msg::PedestrianParameters & p,
118 traffic_simulator_msgs::PedestrianParameters & proto);
120 const traffic_simulator_msgs::PedestrianParameters & proto,
121 traffic_simulator_msgs::msg::PedestrianParameters & p);
123 const traffic_simulator_msgs::msg::MiscObjectParameters & p,
124 traffic_simulator_msgs::MiscObjectParameters & proto);
126 const traffic_simulator_msgs::MiscObjectParameters & proto,
127 traffic_simulator_msgs::msg::MiscObjectParameters & p);
129 const traffic_simulator_msgs::msg::ActionStatus & s,
130 traffic_simulator_msgs::ActionStatus & proto);
132 const traffic_simulator_msgs::ActionStatus & proto,
133 traffic_simulator_msgs::msg::ActionStatus & s);
163 const builtin_interfaces::msg::Duration & duration, builtin_interfaces::Duration & proto);
165 const builtin_interfaces::Duration & proto, builtin_interfaces::msg::Duration & duration);
166 void toProto(
const builtin_interfaces::msg::Time & time, builtin_interfaces::Time & proto);
167 void toMsg(
const builtin_interfaces::Time & proto, builtin_interfaces::msg::Time & time);
168 void toProto(
const rosgraph_msgs::msg::Clock & time, rosgraph_msgs::Clock & proto);
169 void toMsg(
const rosgraph_msgs::Clock & proto, rosgraph_msgs::msg::Clock & time);
170 void toProto(
const std_msgs::msg::Header & header, std_msgs::Header & proto);
171 void toMsg(
const std_msgs::Header & proto, std_msgs::msg::Header & header);
174 #define DEFINE_CONVERSION(PACKAGE, TYPENAME) \
175 auto toProto(const PACKAGE::msg::TYPENAME &, PACKAGE::TYPENAME &)->void; \
176 auto toMsg(const PACKAGE::TYPENAME &, PACKAGE::msg::TYPENAME &)->void
183 #undef DEFINE_CONVERSION
186 const std::tuple<autoware_control_msgs::msg::Control, autoware_vehicle_msgs::msg::GearCommand> &,
187 traffic_simulator_msgs::VehicleCommand &) -> void;
189 template <
typename TrafficLightBulbMessageType>
192 TrafficLightBulbMessageType & traffic_light_bulb_state) ->
void
194 using namespace simulation_api_schema;
196 auto convert_color = [](
auto color) constexpr
199 case TrafficLight_Color_RED:
200 return TrafficLightBulbMessageType::RED;
201 case TrafficLight_Color_AMBER:
202 return TrafficLightBulbMessageType::AMBER;
203 case TrafficLight_Color_GREEN:
204 return TrafficLightBulbMessageType::GREEN;
205 case TrafficLight_Color_WHITE:
206 return TrafficLightBulbMessageType::WHITE;
207 case TrafficLight_Color_UNKNOWN_COLOR:
208 return TrafficLightBulbMessageType::UNKNOWN;
210 return TrafficLightBulbMessageType::UNKNOWN;
214 auto convert_shape = [](
auto shape) constexpr
217 case TrafficLight_Shape_CIRCLE:
218 return TrafficLightBulbMessageType::CIRCLE;
219 case TrafficLight_Shape_LEFT_ARROW:
220 return TrafficLightBulbMessageType::LEFT_ARROW;
221 case TrafficLight_Shape_RIGHT_ARROW:
222 return TrafficLightBulbMessageType::RIGHT_ARROW;
223 case TrafficLight_Shape_UP_ARROW:
224 return TrafficLightBulbMessageType::UP_ARROW;
230 case TrafficLight_Shape_DOWN_ARROW:
231 return TrafficLightBulbMessageType::DOWN_ARROW;
232 case TrafficLight_Shape_DOWN_LEFT_ARROW:
233 return TrafficLightBulbMessageType::DOWN_LEFT_ARROW;
234 case TrafficLight_Shape_DOWN_RIGHT_ARROW:
235 return TrafficLightBulbMessageType::DOWN_RIGHT_ARROW;
236 case TrafficLight_Shape_CROSS:
237 return TrafficLightBulbMessageType::CROSS;
238 case TrafficLight_Shape_UNKNOWN_SHAPE:
239 return TrafficLightBulbMessageType::UNKNOWN;
241 return TrafficLightBulbMessageType::UNKNOWN;
245 auto convert_status = [](
auto status) constexpr
248 case TrafficLight_Status_SOLID_OFF:
249 return TrafficLightBulbMessageType::SOLID_OFF;
250 case TrafficLight_Status_SOLID_ON:
251 return TrafficLightBulbMessageType::SOLID_ON;
252 case TrafficLight_Status_FLASHING:
253 return TrafficLightBulbMessageType::FLASHING;
254 case TrafficLight_Status_UNKNOWN_STATUS:
255 return TrafficLightBulbMessageType::UNKNOWN;
257 return TrafficLightBulbMessageType::UNKNOWN;
261 traffic_light_bulb_state.status = convert_status(proto.status());
262 traffic_light_bulb_state.shape = convert_shape(proto.shape());
263 traffic_light_bulb_state.color = convert_color(proto.color());
264 traffic_light_bulb_state.confidence = proto.confidence();
269 -> traffic_simulator_msgs::Vertex;
271 auto toROS2Message(
const traffic_simulator_msgs::Vertex &) -> traffic_simulator_msgs::msg::Vertex;
274 -> traffic_simulator_msgs::Polyline;
277 -> traffic_simulator_msgs::msg::Polyline;
280 -> traffic_simulator_msgs::PolylineTrajectory;
282 auto toROS2Message(
const traffic_simulator_msgs::PolylineTrajectory &)
283 -> traffic_simulator_msgs::msg::PolylineTrajectory;
285 template <
typename T,
typename... Ts>
286 auto to(Ts &&...) -> T =
delete;
289 auto to<osi3::Timestamp>(
const builtin_interfaces::msg::Time &) -> osi3::Timestamp;
Definition: constants.hpp:21
auto to(Ts &&...) -> T=delete
auto toProtobufMessage(const traffic_simulator_msgs::msg::Vertex &) -> traffic_simulator_msgs::Vertex
Definition: conversions.cpp:601
void toProto(const geometry_msgs::msg::Point &p, geometry_msgs::Point &proto)
Definition: conversions.cpp:22
DEFINE_CONVERSION(autoware_control_msgs, Lateral)
void toMsg(const geometry_msgs::Point &proto, geometry_msgs::msg::Point &p)
Definition: conversions.cpp:29
auto toROS2Message(const traffic_simulator_msgs::Vertex &) -> traffic_simulator_msgs::msg::Vertex
Definition: conversions.cpp:610
geometry_msgs::msg::Pose Pose
Definition: lanelet_wrapper.hpp:70
traffic_simulator_msgs::msg::BoundingBox BoundingBox
Definition: lanelet_wrapper.hpp:65
geometry_msgs::msg::Point Point
Definition: lanelet_wrapper.hpp:69
geometry_msgs::msg::Vector3 Vector3
Definition: lanelet_wrapper.hpp:74
traffic_simulator_msgs::msg::LaneletPose LaneletPose
Definition: lanelet_pose.hpp:30
std::string string
Definition: junit5.hpp:26
Definition: conversions.hpp:58
Proto toProto(const zmq::message_t &msg)
Definition: conversions.hpp:71
zmq::message_t toZMQ(const Proto &proto)
Definition: conversions.hpp:60
traffic_simulator_msgs::EntitySubtype EntitySubtype
Definition: helper_functions.hpp:30
traffic_simulator_msgs::EntityStatus EntityStatus
Definition: helper_functions.hpp:32
traffic_simulator_msgs::EntityType EntityType
Definition: helper_functions.hpp:31
traffic_simulator::TrafficLight TrafficLight
Definition: test_traffic_light.cpp:24