@@ -408,9 +408,38 @@ bool NavSatTransform::fromLLCallback(
408
408
const std::shared_ptr<robot_localization::srv::FromLL::Request> request,
409
409
std::shared_ptr<robot_localization::srv::FromLL::Response> response)
410
410
{
411
- double altitude = request->ll_point .altitude ;
412
- double longitude = request->ll_point .longitude ;
413
- double latitude = request->ll_point .latitude ;
411
+ try {
412
+ response->map_point = fromLL (request->ll_point );
413
+ }
414
+ catch (const std::runtime_error& e) {
415
+ return false ;
416
+ }
417
+
418
+ return true ;
419
+ }
420
+
421
+ bool NavSatTransform::fromLLArrayCallback (
422
+ const std::shared_ptr<robot_localization::srv::FromLLArray::Request> request,
423
+ std::shared_ptr<robot_localization::srv::FromLLArray::Response> response)
424
+ {
425
+ for (auto it = request->ll_points .begin (); it != request->ll_points .end (); ++it) {
426
+ try {
427
+ response->map_points .push_back (fromLL (*it));
428
+ }
429
+ catch (const std::runtime_error& e) {
430
+ return false ;
431
+ }
432
+ }
433
+
434
+ return true ;
435
+ }
436
+
437
+ geometry_msgs::msg::Point NavSatTransform::fromLL (
438
+ const geographic_msgs::msg::GeoPoint& geo_point)
439
+ {
440
+ double altitude = geo_point.altitude ;
441
+ double longitude = geo_point.longitude ;
442
+ double latitude = geo_point.latitude ;
414
443
415
444
tf2::Transform cartesian_pose;
416
445
@@ -438,67 +467,11 @@ bool NavSatTransform::fromLLCallback(
438
467
439
468
cartesian_pose.setOrigin (tf2::Vector3 (cartesian_x, cartesian_y, altitude));
440
469
441
- nav_msgs::msg::Odometry gps_odom;
442
-
443
470
if (!transform_good_) {
444
- return false ;
471
+ throw std::runtime_error ( " Invalid transform. " ) ;
445
472
}
446
473
447
- response->map_point = cartesianToMap (cartesian_pose).pose .pose .position ;
448
-
449
- return true ;
450
- }
451
-
452
- bool NavSatTransform::fromLLArrayCallback (
453
- const std::shared_ptr<robot_localization::srv::FromLLArray::Request> request,
454
- std::shared_ptr<robot_localization::srv::FromLLArray::Response> response)
455
- {
456
- double altitude, longitude, latitude;
457
- double cartesian_x {};
458
- double cartesian_y {};
459
- double cartesian_z {};
460
- tf2::Transform cartesian_pose;
461
- std::string utm_zone_tmp;
462
- for (auto it = request->ll_points .begin (); it != request->ll_points .end (); ++it) {
463
- //
464
- altitude = it->altitude ;
465
- longitude = it->longitude ;
466
- latitude = it->latitude ;
467
- cartesian_x = 0.0 ;
468
- cartesian_y = 0.0 ;
469
- cartesian_z = 0.0 ;
470
- //
471
- if (use_local_cartesian_) {
472
- gps_local_cartesian_.Forward (
473
- latitude,
474
- longitude,
475
- altitude,
476
- cartesian_x,
477
- cartesian_y,
478
- cartesian_z);
479
- } else {
480
-
481
- navsat_conversions::LLtoUTM (
482
- latitude,
483
- longitude,
484
- cartesian_y,
485
- cartesian_x,
486
- utm_zone_tmp);
487
- }
488
-
489
- cartesian_pose.setOrigin (tf2::Vector3 (cartesian_x, cartesian_y, altitude));
490
-
491
- // nav_msgs::msg::Odometry gps_odom; // it's unused?
492
-
493
- if (!transform_good_) {
494
- return false ;
495
- }
496
-
497
- response->map_points .push_back (cartesianToMap (cartesian_pose).pose .pose .position );
498
-
499
- }
500
-
501
- return true ;
474
+ return cartesianToMap (cartesian_pose).pose .pose .position ;
502
475
}
503
476
504
477
nav_msgs::msg::Odometry NavSatTransform::cartesianToMap (
0 commit comments