200 std::shared_ptr<CarlaPublisher> publisher {};
201 std::shared_ptr<CarlaTransformPublisher> transform {};
203 publisher = it_publishers->second;
205 transform = it_transforms->second;
209 const std::string string_id = std::to_string(
id);
214 if (ros_name ==
"collision__") {
217 ros_name += string_id;
220 std::shared_ptr<CarlaCollisionPublisher> new_publisher = std::make_shared<CarlaCollisionPublisher>(ros_name.c_str(), parent_ros_name.c_str());
221 if (new_publisher->Init()) {
223 publisher = new_publisher;
225 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
226 if (new_transform->Init()) {
228 transform = new_transform;
232 if (ros_name ==
"depth__") {
235 ros_name += string_id;
238 std::shared_ptr<CarlaDepthCameraPublisher> new_publisher = std::make_shared<CarlaDepthCameraPublisher>(ros_name.c_str(),
239parent_ros_name.c_str());
240 if (new_publisher->Init()) {
242 publisher = new_publisher;
244 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
245 if (new_transform->Init()) {
247 transform = new_transform;
251 if (ros_name ==
"normals__") {
254 ros_name += string_id;
257 std::shared_ptr<CarlaNormalsCameraPublisher> new_publisher = std::make_shared<CarlaNormalsCameraPublisher>(ros_name.c_str(), parent_ros_name.c_str());
258 if (new_publisher->Init()) {
260 publisher = new_publisher;
262 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
263 if (new_transform->Init()) {
265 transform = new_transform;
269 if (ros_name ==
"dvs__") {
272 ros_name += string_id;
275 std::shared_ptr<CarlaDVSCameraPublisher> new_publisher = std::make_shared<CarlaDVSCameraPublisher>(ros_name.c_str(), parent_ros_name.c_str());
276 if (new_publisher->Init()) {
278 publisher = new_publisher;
280 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
281 if (new_transform->Init()) {
283 transform = new_transform;
287 if (ros_name ==
"gnss__") {
290 ros_name += string_id;
293 std::shared_ptr<CarlaGNSSPublisher> new_publisher = std::make_shared<CarlaGNSSPublisher>(ros_name.c_str(), parent_ros_name.c_str());
294 if (new_publisher->Init()) {
296 publisher = new_publisher;
298 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
299 if (new_transform->Init()) {
301 transform = new_transform;
305 if (ros_name ==
"imu__") {
308 ros_name += string_id;
311 std::shared_ptr<CarlaIMUPublisher> new_publisher = std::make_shared<CarlaIMUPublisher>(ros_name.c_str(), parent_ros_name.c_str());
312 if (new_publisher->Init()) {
314 publisher = new_publisher;
316 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
317 if (new_transform->Init()) {
319 transform = new_transform;
323 if (ros_name ==
"lane_invasion__") {
326 ros_name += string_id;
329 std::shared_ptr<CarlaLineInvasionPublisher> new_publisher = std::make_shared<CarlaLineInvasionPublisher>(ros_name.c_str(), parent_ros_name.c_str());
330 if (new_publisher->Init()) {
332 publisher = new_publisher;
334 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
335 if (new_transform->Init()) {
337 transform = new_transform;
341 std::cerr <<
"Obstacle detection sensor does not have an available publisher" << std::endl;
344 if (ros_name ==
"optical_flow__") {
347 ros_name += string_id;
350 std::shared_ptr<CarlaOpticalFlowCameraPublisher> new_publisher = std::make_shared<CarlaOpticalFlowCameraPublisher>(ros_name.c_str(), parent_ros_name.c_str());
351 if (new_publisher->Init()) {
353 publisher = new_publisher;
355 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
356 if (new_transform->Init()) {
358 transform = new_transform;
362 if (ros_name ==
"radar__") {
365 ros_name += string_id;
368 std::shared_ptr<CarlaRadarPublisher> new_publisher = std::make_shared<CarlaRadarPublisher>(ros_name.c_str(), parent_ros_name.c_str());
369 if (new_publisher->Init()) {
371 publisher = new_publisher;
373 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
374 if (new_transform->Init()) {
376 transform = new_transform;
380 if (ros_name ==
"ray_cast_semantic__") {
383 ros_name += string_id;
386 std::shared_ptr<CarlaSemanticLidarPublisher> new_publisher = std::make_shared<CarlaSemanticLidarPublisher>(ros_name.c_str(), parent_ros_name.c_str());
387 if (new_publisher->Init()) {
389 publisher = new_publisher;
391 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
392 if (new_transform->Init()) {
394 transform = new_transform;
398 if (ros_name ==
"ray_cast__") {
401 ros_name += string_id;
404 std::shared_ptr<CarlaLidarPublisher> new_publisher = std::make_shared<CarlaLidarPublisher>(ros_name.c_str(), parent_ros_name.c_str());
405 if (new_publisher->Init()) {
407 publisher = new_publisher;
409 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
410 if (new_transform->Init()) {
412 transform = new_transform;
416 std::cerr <<
"RSS sensor does not have an available publisher" << std::endl;
419 if (ros_name ==
"rgb__") {
422 ros_name += string_id;
425 std::shared_ptr<CarlaRGBCameraPublisher> new_publisher = std::make_shared<CarlaRGBCameraPublisher>(ros_name.c_str(), parent_ros_name.c_str());
426 if (new_publisher->Init()) {
428 publisher = new_publisher;
430 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
431 if (new_transform->Init()) {
433 transform = new_transform;
437 if (ros_name ==
"semantic_segmentation__") {
440 ros_name += string_id;
443 std::shared_ptr<CarlaSSCameraPublisher> new_publisher = std::make_shared<CarlaSSCameraPublisher>(ros_name.c_str(), parent_ros_name.c_str());
444 if (new_publisher->Init()) {
446 publisher = new_publisher;
448 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
449 if (new_transform->Init()) {
451 transform = new_transform;
455 if (ros_name ==
"instance_segmentation__") {
458 ros_name += string_id;
461 std::shared_ptr<CarlaISCameraPublisher> new_publisher = std::make_shared<CarlaISCameraPublisher>(ros_name.c_str(), parent_ros_name.c_str());
462 if (new_publisher->Init()) {
464 publisher = new_publisher;
466 std::shared_ptr<CarlaTransformPublisher> new_transform = std::make_shared<CarlaTransformPublisher>(ros_name.c_str(), parent_ros_name.c_str());
467 if (new_transform->Init()) {
469 transform = new_transform;
473 std::cerr <<
"World obserser does not have an available publisher" << std::endl;
476 std::cerr <<
"Camera GBuffer uint8 does not have an available publisher" << std::endl;
479 std::cerr <<
"Camera GBuffer float does not have an available publisher" << std::endl;
482 std::cerr <<
"Unknown sensor type" << std::endl;
486 return { publisher, transform };
490 uint64_t sensor_type,
493 int W,
int H,
float Fov,
497 switch (sensor_type) {
499 log_info(
"Sensor Collision to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
503 log_info(
"Sensor DepthCamera to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
506 std::shared_ptr<CarlaDepthCameraPublisher> publisher = std::dynamic_pointer_cast<CarlaDepthCameraPublisher>(sensors.first);
511 if (!publisher->HasBeenInitialized())
512 publisher->InitInfoData(0, 0, H, W, Fov,
true);
515 publisher->Publish();
517 if (sensors.second) {
518 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
520 publisher->Publish();
525 log_info(
"Sensor NormalsCamera to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
529 std::shared_ptr<CarlaNormalsCameraPublisher> publisher = std::dynamic_pointer_cast<CarlaNormalsCameraPublisher>(sensors.first);
534 if (!publisher->HasBeenInitialized())
535 publisher->InitInfoData(0, 0, H, W, Fov,
true);
538 publisher->Publish();
540 if (sensors.second) {
541 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
543 publisher->Publish();
548 log_info(
"Sensor LaneInvasionSensor to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
552 std::shared_ptr<CarlaLineInvasionPublisher> publisher = std::dynamic_pointer_cast<CarlaLineInvasionPublisher>(sensors.first);
554 publisher->Publish();
556 if (sensors.second) {
557 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
559 publisher->Publish();
564 log_info(
"Sensor OpticalFlowCamera to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
568 std::shared_ptr<CarlaOpticalFlowCameraPublisher> publisher = std::dynamic_pointer_cast<CarlaOpticalFlowCameraPublisher>(sensors.first);
573 if (!publisher->HasBeenInitialized())
574 publisher->InitInfoData(0, 0, H, W, Fov,
true);
577 publisher->Publish();
579 if (sensors.second) {
580 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
582 publisher->Publish();
587 log_info(
"Sensor RssSensor to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
591 log_info(
"Sensor SceneCaptureCamera to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
595 std::shared_ptr<CarlaRGBCameraPublisher> publisher = std::dynamic_pointer_cast<CarlaRGBCameraPublisher>(sensors.first);
600 if (!publisher->HasBeenInitialized())
601 publisher->InitInfoData(0, 0, H, W, Fov,
true);
604 publisher->Publish();
606 if (sensors.second) {
607 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
609 publisher->Publish();
615 log_info(
"Sensor SemanticSegmentationCamera to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
619 std::shared_ptr<CarlaSSCameraPublisher> publisher = std::dynamic_pointer_cast<CarlaSSCameraPublisher>(sensors.first);
624 if (!publisher->HasBeenInitialized())
625 publisher->InitInfoData(0, 0, H, W, Fov,
true);
628 publisher->Publish();
630 if (sensors.second) {
631 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
633 publisher->Publish();
638 log_info(
"Sensor InstanceSegmentationCamera to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
642 std::shared_ptr<CarlaISCameraPublisher> publisher = std::dynamic_pointer_cast<CarlaISCameraPublisher>(sensors.first);
647 if (!publisher->HasBeenInitialized())
648 publisher->InitInfoData(0, 0, H, W, Fov,
true);
651 publisher->Publish();
653 if (sensors.second) {
654 std::shared_ptr<CarlaTransformPublisher> publisher = std::dynamic_pointer_cast<CarlaTransformPublisher>(sensors.second);
656 publisher->Publish();
661 log_info(
"Sensor WorldObserver to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
664 log_info(
"Sensor CameraGBufferUint8 to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
667 log_info(
"Sensor CameraGBufferFloat to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());
670 log_info(
"Sensor to ROS data: frame.",
_frame,
"sensor.", sensor_type,
"stream.", stream_id,
"buffer.", buffer->size());