CARLA
Loading...
Searching...
No Matches
CdrTopicInfo.h
Go to the documentation of this file.
1// Copyright (c) 2025 Computer Vision Center (CVC) at the Universitat Autonoma de Barcelona (UAB).
2// This work is licensed under the terms of the MIT license.
3// For a copy, see <https://opensource.org/licenses/MIT>.
4
5#pragma once
6
7#include <cstddef>
8
56
57namespace carla {
58namespace ros2 {
59
60/// Per-type metadata needed by the middleware layer.
61///
62/// type_name() — ROS2-compatible type name string used when
63/// registering the type with a DomainParticipant.
64/// Follows the "pkg::msg::dds_::TypeName_" pattern.
65///
66/// type_hash() — REP-2011 RIHS01 type hash string, placed in the
67/// DDS endpoint USER_DATA QoS policy (PID_USER_DATA,
68/// 0x002c per OMG DDSI-RTPS v2.5 §9.6.2.2.2).
69/// Format: "RIHS01_<64 lowercase hex>" (71 chars).
70/// Consumed by UserDataFormat.h to build the
71/// REP-2016 KV payload "typehash=RIHS01_<hex>;".
72/// The hash is pinned per message definition and is
73/// stable across ROS 2 distributions. A specialization
74/// may return nullptr when no hash is available for the
75/// type; UserDataFormat.h then emits an empty user_data
76/// payload and callers skip setting the QoS field.
77/// To compute the hash for a new type, use
78/// Util/ros2/compute_type_hash.sh (Docker required).
79/// Full workflow: Docs/ros2/adding_message_types.md.
80///
81/// max_serialized_size() — Initial preallocation hint for the CDR payload size
82/// in bytes, excluding the 4-byte DDS encapsulation
83/// header. Used by FastDDS to pre-allocate payload
84/// buffers. For types with variable-length fields
85/// (strings, vectors) this is a minimum hint, not a
86/// hard limit. The actual size per message instance is
87/// computed dynamically by cdr_serialized_size().
88///
89/// Primary template is intentionally undefined — only specializations are
90/// valid.
91template<typename T> struct CdrTopicInfo;
92
93// ==========================================================================
94// Specializations — ordered alphabetically by C++ type name
95// ==========================================================================
96
97template<> struct CdrTopicInfo<msg::AckermannDrive> {
98 static const char* type_name() {
99 return "ackermann_msgs::msg::dds_::AckermannDrive_";
100 }
101 static const char* type_hash() {
102 return "RIHS01_acf287a224a947dd1b0b87d6d76cdb73f497b0237b8fc73be2173b2ebbb82c99";
103 }
104 static size_t max_serialized_size() { return 20u; }
105};
106
107template<> struct CdrTopicInfo<msg::AckermannDriveStamped> {
108 static const char* type_name() {
109 return "ackermann_msgs::msg::dds_::AckermannDriveStamped_";
110 }
111 static const char* type_hash() {
112 return "RIHS01_48ca7612a08d3bb72744fd98b71b7cf2ea24c6ad50fa4e1aa0bbad963c90d8cf";
113 }
114 static size_t max_serialized_size() { return 288u; }
115};
116
117template<> struct CdrTopicInfo<msg::CameraInfo> {
118 static const char* type_name() {
119 return "sensor_msgs::msg::dds_::CameraInfo_";
120 }
121 static const char* type_hash() {
122 return "RIHS01_b3dfd68ff46c9d56c80fd3bd4ed22c7a4ddce8c8348f2f59c299e73118e7e275";
123 }
124 static size_t max_serialized_size() { return 3793u; }
125};
126
127template<> struct CdrTopicInfo<msg::CarlaCollisionEvent> {
128 static const char* type_name() {
129 return "carla_msgs::msg::dds_::CarlaCollisionEvent_";
130 }
131 static const char* type_hash() {
132 return "RIHS01_d77acb472c5effb98998bfb2e176ae3ffac0a84ce33a79f90e999544e3fcfeff";
133 }
134 static size_t max_serialized_size() { return 296u; }
135};
136
137template<> struct CdrTopicInfo<msg::CarlaEgoVehicleControl> {
138 static const char* type_name() {
139 return "carla_msgs::msg::dds_::CarlaEgoVehicleControl_";
140 }
141 static const char* type_hash() {
142 return "RIHS01_4f251fa2a554e8ed996f77eb1d5b65515af1369eceb04d5122cb5761f7801be3";
143 }
144 static size_t max_serialized_size() { return 289u; }
145};
146
147template<> struct CdrTopicInfo<msg::CarlaLineInvasion> {
148 static const char* type_name() {
149 return "carla_msgs::msg::dds_::LaneInvasionEvent_";
150 }
151 static const char* type_hash() {
152 return "RIHS01_1d81c780738761101e1b4cb165af96ed32b8aa5cd523713c9b28d1ee95af719b";
153 }
154 static size_t max_serialized_size() { return 672u; }
155};
156
157template<> struct CdrTopicInfo<msg::Clock> {
158 static const char* type_name() {
159 return "rosgraph_msgs::msg::dds_::Clock_";
160 }
161 static const char* type_hash() {
162 return "RIHS01_692f7a66e93a3c83e71765d033b60349ba68023a8c689a79e48078bcb5c58564";
163 }
164 // Clock holds one Time (8 bytes = 2 × int32).
165 static size_t max_serialized_size() { return 8u; }
166};
167
168template<> struct CdrTopicInfo<msg::Control> {
169 static const char* type_name() {
170 return "autoware_control_msgs::msg::dds_::Control_";
171 }
172 static const char* type_hash() {
173 return "RIHS01_7818be59aa790ebb777db06e55a2c15e3756de4cc35c80b1e8271afc5bab2e9d";
174 }
175 static size_t max_serialized_size() { return 74u; }
176};
177
178template<> struct CdrTopicInfo<msg::ControlModeReport> {
179 static const char* type_name() {
180 return "autoware_vehicle_msgs::msg::dds_::ControlModeReport_";
181 }
182 static const char* type_hash() {
183 return "RIHS01_968feaa6441be3c3b161f2eb65972a4b15394d0a7ddc4664318551280d1ff222";
184 }
185 static size_t max_serialized_size() { return 9u; }
186};
187
188template<> struct CdrTopicInfo<msg::Engage> {
189 static const char* type_name() {
190 return "autoware_vehicle_msgs::msg::dds_::Engage_";
191 }
192 static const char* type_hash() {
193 return "RIHS01_a865a0a669052a5bb45be203266058660ae8b3be8d080c4567f78d8174f4849e";
194 }
195 static size_t max_serialized_size() { return 9u; }
196};
197
198template<> struct CdrTopicInfo<msg::Float32> {
199 static const char* type_name() {
200 return "std_msgs::msg::dds_::Float32_";
201 }
202 static const char* type_hash() {
203 return "RIHS01_7170d3d8f841f7be3172ce5f4f59f3a4d7f63b0447e8b33327601ad64d83d6e2";
204 }
205 static size_t max_serialized_size() { return 4u; }
206};
207
208template<> struct CdrTopicInfo<msg::GearCommand> {
209 static const char* type_name() {
210 return "autoware_vehicle_msgs::msg::dds_::GearCommand_";
211 }
212 static const char* type_hash() {
213 return "RIHS01_4aa982c6505fafa9bdca2d243d0a71e46ff9a1e7013767f13a533d0a5d30a1a6";
214 }
215 static size_t max_serialized_size() { return 9u; }
216};
217
218template<> struct CdrTopicInfo<msg::GearReport> {
219 static const char* type_name() {
220 return "autoware_vehicle_msgs::msg::dds_::GearReport_";
221 }
222 static const char* type_hash() {
223 return "RIHS01_4d14bc3f186c1a6af6a732bb5ebd540cdd742a56770012f4c3cb9e762de8f391";
224 }
225 static size_t max_serialized_size() { return 9u; }
226};
227
228template<> struct CdrTopicInfo<msg::HazardLightsCommand> {
229 static const char* type_name() {
230 return "autoware_vehicle_msgs::msg::dds_::HazardLightsCommand_";
231 }
232 static const char* type_hash() {
233 return "RIHS01_ad2386a78a210625f1fb35f8043ef4e78da58cf01f33c340fa9468e5e8cdd0bc";
234 }
235 static size_t max_serialized_size() { return 9u; }
236};
237
238template<> struct CdrTopicInfo<msg::HazardLightsReport> {
239 static const char* type_name() {
240 return "autoware_vehicle_msgs::msg::dds_::HazardLightsReport_";
241 }
242 static const char* type_hash() {
243 return "RIHS01_01ce3b4293a5c2799fd7483b2d62a790e26fe8f2b5d60e48149163475685f28a";
244 }
245 static size_t max_serialized_size() { return 9u; }
246};
247
248template<> struct CdrTopicInfo<msg::Header> {
249 static const char* type_name() {
250 return "std_msgs::msg::dds_::Header_";
251 }
252 static const char* type_hash() {
253 return "RIHS01_f49fb3ae2cf070f793645ff749683ac6b06203e41c891e17701b1cb597ce6a01";
254 }
255 static size_t max_serialized_size() { return 268u; }
256};
257
258template<> struct CdrTopicInfo<msg::Image> {
259 static const char* type_name() {
260 return "sensor_msgs::msg::dds_::Image_";
261 }
262 static const char* type_hash() {
263 return "RIHS01_d31d41a9a4c4bc8eae9be757b0beed306564f7526c88ea6a4588fb9582527d47";
264 }
265 static size_t max_serialized_size() { return 648u; }
266};
267
268template<> struct CdrTopicInfo<msg::Imu> {
269 static const char* type_name() {
270 return "sensor_msgs::msg::dds_::Imu_";
271 }
272 static const char* type_hash() {
273 return "RIHS01_7d9a00ff131080897a5ec7e26e315954b8eae3353c3f995c55faf71574000b5b";
274 }
275 static size_t max_serialized_size() { return 568u; }
276};
277
278template<> struct CdrTopicInfo<msg::Lateral> {
279 static const char* type_name() {
280 return "autoware_control_msgs::msg::dds_::Lateral_";
281 }
282 static const char* type_hash() {
283 return "RIHS01_94d39634041a92db4e460dae93def564fbeb89142e9c64f9c2ed540a182935a1";
284 }
285 static size_t max_serialized_size() { return 25u; }
286};
287
288template<> struct CdrTopicInfo<msg::Longitudinal> {
289 static const char* type_name() {
290 return "autoware_control_msgs::msg::dds_::Longitudinal_";
291 }
292 static const char* type_hash() {
293 return "RIHS01_4ac4a6b5085ee6bb12067b763568abbf68ec3f2baf64b49e1da360aa6413edc1";
294 }
295 static size_t max_serialized_size() { return 30u; }
296};
297
298template<> struct CdrTopicInfo<msg::NavSatFix> {
299 static const char* type_name() {
300 return "sensor_msgs::msg::dds_::NavSatFix_";
301 }
302 static const char* type_hash() {
303 return "RIHS01_62223ab3fe210a15976021da7afddc9e200dc9ec75231c1b6a557fc598a65404";
304 }
305 static size_t max_serialized_size() { return 369u; }
306};
307
308template<> struct CdrTopicInfo<msg::NavSatStatus> {
309 static const char* type_name() {
310 return "sensor_msgs::msg::dds_::NavSatStatus_";
311 }
312 static const char* type_hash() {
313 return "RIHS01_d1ed3befa628e09571bd273b888ba1c1fd187c9a5e0006b385d7e5e9095a3204";
314 }
315 static size_t max_serialized_size() { return 4u; }
316};
317
318template<> struct CdrTopicInfo<msg::Odometry> {
319 static const char* type_name() {
320 return "nav_msgs::msg::dds_::Odometry_";
321 }
322 static const char* type_hash() {
323 return "RIHS01_3cc97dc7fb7502f8714462c526d369e35b603cfc34d946e3f2eda2766dfec6e0";
324 }
325 static size_t max_serialized_size() { return 1208u; }
326};
327
328template<> struct CdrTopicInfo<msg::Point> {
329 static const char* type_name() {
330 return "geometry_msgs::msg::dds_::Point_";
331 }
332 static const char* type_hash() {
333 return "RIHS01_6963084842a9b04494d6b2941d11444708d892da2f4b09843b9c43f42a7f6881";
334 }
335 static size_t max_serialized_size() { return 24u; }
336};
337
338template<> struct CdrTopicInfo<msg::Point32> {
339 static const char* type_name() {
340 return "geometry_msgs::msg::dds_::Point32_";
341 }
342 static const char* type_hash() {
343 return "RIHS01_2fc4db7cae16a4582c79a56b66173a8d48d52c7dc520ddc55a0d4bcf2a4bfdbc";
344 }
345 static size_t max_serialized_size() { return 12u; }
346};
347
348template<> struct CdrTopicInfo<msg::PointCloud2> {
349 static const char* type_name() {
350 return "sensor_msgs::msg::dds_::PointCloud2_";
351 }
352 static const char* type_hash() {
353 return "RIHS01_9198cabf7da3796ae6fe19c4cb3bdd3525492988c70522628af5daa124bae2b5";
354 }
355 static size_t max_serialized_size() { return 27597u; }
356};
357
358template<> struct CdrTopicInfo<msg::PointField> {
359 static const char* type_name() {
360 return "sensor_msgs::msg::dds_::PointField_";
361 }
362 static const char* type_hash() {
363 return "RIHS01_5c6a4750728c2bcfbbf7037225b20b02d4429634732146b742dee1726637ef01";
364 }
365 static size_t max_serialized_size() { return 272u; }
366};
367
368template<> struct CdrTopicInfo<msg::Pose> {
369 static const char* type_name() {
370 return "geometry_msgs::msg::dds_::Pose_";
371 }
372 static const char* type_hash() {
373 return "RIHS01_d501954e9476cea2996984e812054b68026ae0bfae789d9a10b23daf35cc90fa";
374 }
375 static size_t max_serialized_size() { return 56u; }
376};
377
378template<> struct CdrTopicInfo<msg::PoseStamped> {
379 static const char* type_name() {
380 return "geometry_msgs::msg::dds_::PoseStamped_";
381 }
382 static const char* type_hash() {
383 return "RIHS01_10f3786d7d40fd2b54367835614bff85d4ad3b5dab62bf8bca0cc232d73b4cd8";
384 }
385 // Header(268) + Pose(56).
386 static size_t max_serialized_size() { return 324u; }
387};
388
389template<> struct CdrTopicInfo<msg::PoseWithCovariance> {
390 static const char* type_name() {
391 return "geometry_msgs::msg::dds_::PoseWithCovariance_";
392 }
393 static const char* type_hash() {
394 return "RIHS01_9a7c0fd234b7f45c6098745ecccd773ca1085670e64107135397aee31c02e1bb";
395 }
396 static size_t max_serialized_size() { return 344u; }
397};
398
399template<> struct CdrTopicInfo<msg::PoseWithCovarianceStamped> {
400 static const char* type_name() {
401 return "geometry_msgs::msg::dds_::PoseWithCovarianceStamped_";
402 }
403 static const char* type_hash() {
404 return "RIHS01_26432f9803e43727d3c8f668d1fdb3c630f548af631e2f4e31382371bfea3b6e";
405 }
406 // Header(268) + PoseWithCovariance(344).
407 static size_t max_serialized_size() { return 612u; }
408};
409
410template<> struct CdrTopicInfo<msg::Quaternion> {
411 static const char* type_name() {
412 return "geometry_msgs::msg::dds_::Quaternion_";
413 }
414 static const char* type_hash() {
415 return "RIHS01_8a765f66778c8ff7c8ab94afcc590a2ed5325a1d9a076ffff38fbce36f458684";
416 }
417 static size_t max_serialized_size() { return 32u; }
418};
419
420template<> struct CdrTopicInfo<msg::RegionOfInterest> {
421 static const char* type_name() {
422 return "sensor_msgs::msg::dds_::RegionOfInterest_";
423 }
424 static const char* type_hash() {
425 return "RIHS01_ad16bcba5f9131dcdba6fbded19f726f5440e3c513b4fb586dd3027eeed8abb1";
426 }
427 static size_t max_serialized_size() { return 17u; }
428};
429
430template<> struct CdrTopicInfo<msg::SteeringReport> {
431 static const char* type_name() {
432 return "autoware_vehicle_msgs::msg::dds_::SteeringReport_";
433 }
434 static const char* type_hash() {
435 return "RIHS01_aa3acc9ca95ebc4daf9dec0ecf87911ad9c196392857c3026bfead589db65a94";
436 }
437 static size_t max_serialized_size() { return 12u; }
438};
439
440template<> struct CdrTopicInfo<msg::String> {
441 static const char* type_name() {
442 return "std_msgs::msg::dds_::String_";
443 }
444 static const char* type_hash() {
445 return "RIHS01_df668c740482bbd48fb39d76a70dfd4bd59db1288021743503259e948f6b1a18";
446 }
447 static size_t max_serialized_size() { return 260u; }
448};
449
450template<> struct CdrTopicInfo<msg::TF2Error> {
451 static const char* type_name() {
452 return "tf2_msgs::msg::dds_::TF2Error_";
453 }
454 static const char* type_hash() {
455 return "RIHS01_db2485e7d6a0ec75bf087e058ee45df682acc3a621ca7780503d10aac141809a";
456 }
457 static size_t max_serialized_size() { return 264u; }
458};
459
460template<> struct CdrTopicInfo<msg::TFMessage> {
461 static const char* type_name() {
462 return "tf2_msgs::msg::dds_::TFMessage_";
463 }
464 static const char* type_hash() {
465 return "RIHS01_e369d0f05a23ae52508854b66f6aa0437f3449d652e8cbf22d5abe85d020f087";
466 }
467 static size_t max_serialized_size() { return 58408u; }
468};
469
470template<> struct CdrTopicInfo<msg::Time> {
471 static const char* type_name() {
472 return "builtin_interfaces::msg::dds_::Time_";
473 }
474 static const char* type_hash() {
475 return "RIHS01_b106235e25a4c5ed35098aa0a61a3ee9c9b18d197f398b0e4206cea9acf9c197";
476 }
477 static size_t max_serialized_size() { return 8u; }
478};
479
480template<> struct CdrTopicInfo<msg::Transform> {
481 static const char* type_name() {
482 return "geometry_msgs::msg::dds_::Transform_";
483 }
484 static const char* type_hash() {
485 return "RIHS01_beb83fbe698636351461f6f35d1abb20010c43d55374d81bd041f1ba2581fddc";
486 }
487 static size_t max_serialized_size() { return 56u; }
488};
489
490template<> struct CdrTopicInfo<msg::TransformStamped> {
491 static const char* type_name() {
492 return "geometry_msgs::msg::dds_::TransformStamped_";
493 }
494 static const char* type_hash() {
495 return "RIHS01_0a241f87d04668d94099cbb5ba11691d5ad32c2f29682e4eb5653424bd275206";
496 }
497 static size_t max_serialized_size() { return 584u; }
498};
499
500template<> struct CdrTopicInfo<msg::TurnIndicatorsCommand> {
501 static const char* type_name() {
502 return "autoware_vehicle_msgs::msg::dds_::TurnIndicatorsCommand_";
503 }
504 static const char* type_hash() {
505 return "RIHS01_657d7f761a9b02c543e4bf3e0000405906b6169dc0bbfd6637c64fe00d98cec7";
506 }
507 static size_t max_serialized_size() { return 9u; }
508};
509
510template<> struct CdrTopicInfo<msg::TurnIndicatorsReport> {
511 static const char* type_name() {
512 return "autoware_vehicle_msgs::msg::dds_::TurnIndicatorsReport_";
513 }
514 static const char* type_hash() {
515 return "RIHS01_c05a54cd244f1c9d683613b11c87a5b3ef816eed7a5f207368301221731a0964";
516 }
517 static size_t max_serialized_size() { return 9u; }
518};
519
520template<> struct CdrTopicInfo<msg::Twist> {
521 static const char* type_name() {
522 return "geometry_msgs::msg::dds_::Twist_";
523 }
524 static const char* type_hash() {
525 return "RIHS01_9c45bf16fe0983d80e3cfe750d6835843d265a9a6c46bd2e609fcddde6fb8d2a";
526 }
527 static size_t max_serialized_size() { return 48u; }
528};
529
530template<> struct CdrTopicInfo<msg::TwistWithCovariance> {
531 static const char* type_name() {
532 return "geometry_msgs::msg::dds_::TwistWithCovariance_";
533 }
534 static const char* type_hash() {
535 return "RIHS01_49f574f033f095d8b6cd1beaca5ca7925e296e84af1716d16c89d38b059c8c18";
536 }
537 static size_t max_serialized_size() { return 336u; }
538};
539
540template<> struct CdrTopicInfo<msg::Vector3> {
541 static const char* type_name() {
542 return "geometry_msgs::msg::dds_::Vector3_";
543 }
544 static const char* type_hash() {
545 return "RIHS01_cc12fe83e4c02719f1ce8070bfd14aecd40f75a96696a67a2a1f37f7dbb0765d";
546 }
547 static size_t max_serialized_size() { return 24u; }
548};
549
550template<> struct CdrTopicInfo<msg::VehicleEmergencyStamped> {
551 static const char* type_name() {
552 return "tier4_vehicle_msgs::msg::dds_::VehicleEmergencyStamped_";
553 }
554 static const char* type_hash() {
555 return "RIHS01_017801df5493a599ad735d55f3e93ea132c46f8f630bce94a5f3eb2dc4a4bb3c";
556 }
557 static size_t max_serialized_size() { return 9u; }
558};
559
560template<> struct CdrTopicInfo<msg::VelocityReport> {
561 static const char* type_name() {
562 return "autoware_vehicle_msgs::msg::dds_::VelocityReport_";
563 }
564 static const char* type_hash() {
565 return "RIHS01_9052adda949c32f4a98500abc1fb5bd23f2560e321eebdfbb25318d6108d4ce4";
566 }
567 // Header(268) + 3 x float32.
568 static size_t max_serialized_size() { return 280u; }
569};
570
571} // namespace ros2
572} // namespace carla
This file contains definitions of common data structures used in traffic manager.
Per-type metadata needed by the middleware layer.