-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add autoware_geography_utils from autoware.universe with history #103
Closed
Closed
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
0240b75
refactor(geography_utils): prefix package and namespace with autoware…
esteve c654dda
chore(autoware_geography_utils): update maintainers (#9246)
YamatoAndo 6b1ca76
chore(package.xml): bump version to 0.38.0 (#9266) (#9284)
youtalk e6c794e
fix: fix ticket links to point to https://github.com/autowarefoundati…
esteve f949bd1
feat!: replace tier4_map_msgs with autoware_map_msgs for MapProjector…
mitsudome-r File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Changelog for package autoware_geography_utils | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
0.38.0 (2024-11-08) | ||
------------------- | ||
* unify package.xml version to 0.37.0 | ||
* refactor(geography_utils): prefix package and namespace with autoware (`#7790 <https://github.com/autowarefoundation/autoware.universe/issues/7790>`_) | ||
* refactor(geography_utils): prefix package and namespace with autoware | ||
* move headers to include/autoware/ | ||
--------- | ||
* Contributors: Esteve Fernandez, Yutaka Kondo | ||
|
||
0.26.0 (2024-04-03) | ||
------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
cmake_minimum_required(VERSION 3.14) | ||
project(autoware_geography_utils) | ||
|
||
find_package(autoware_cmake REQUIRED) | ||
autoware_package() | ||
|
||
# GeographicLib | ||
find_package(PkgConfig) | ||
find_path(GeographicLib_INCLUDE_DIR GeographicLib/Config.h | ||
PATH_SUFFIXES GeographicLib | ||
) | ||
set(GeographicLib_INCLUDE_DIRS ${GeographicLib_INCLUDE_DIR}) | ||
find_library(GeographicLib_LIBRARIES NAMES Geographic) | ||
|
||
ament_auto_add_library(${PROJECT_NAME} SHARED | ||
src/height.cpp | ||
src/projection.cpp | ||
src/lanelet2_projector.cpp | ||
) | ||
|
||
target_link_libraries(${PROJECT_NAME} | ||
${GeographicLib_LIBRARIES} | ||
) | ||
|
||
if(BUILD_TESTING) | ||
find_package(ament_cmake_ros REQUIRED) | ||
|
||
file(GLOB_RECURSE test_files test/*.cpp) | ||
|
||
ament_add_ros_isolated_gtest(test_${PROJECT_NAME} ${test_files}) | ||
|
||
target_link_libraries(test_${PROJECT_NAME} | ||
${PROJECT_NAME} | ||
) | ||
endif() | ||
|
||
ament_auto_package() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# geography_utils | ||
|
||
## Purpose | ||
|
||
This package contains geography-related functions used by other packages, so please refer to them as needed. |
33 changes: 33 additions & 0 deletions
33
common/autoware_geography_utils/include/autoware/geography_utils/height.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2023 TIER IV, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#ifndef AUTOWARE__GEOGRAPHY_UTILS__HEIGHT_HPP_ | ||
#define AUTOWARE__GEOGRAPHY_UTILS__HEIGHT_HPP_ | ||
|
||
#include <string> | ||
|
||
namespace autoware::geography_utils | ||
{ | ||
|
||
typedef double (*HeightConversionFunction)( | ||
const double height, const double latitude, const double longitude); | ||
double convert_wgs84_to_egm2008(const double height, const double latitude, const double longitude); | ||
double convert_egm2008_to_wgs84(const double height, const double latitude, const double longitude); | ||
double convert_height( | ||
const double height, const double latitude, const double longitude, | ||
const std::string & source_vertical_datum, const std::string & target_vertical_datum); | ||
|
||
} // namespace autoware::geography_utils | ||
|
||
#endif // AUTOWARE__GEOGRAPHY_UTILS__HEIGHT_HPP_ |
32 changes: 32 additions & 0 deletions
32
common/autoware_geography_utils/include/autoware/geography_utils/lanelet2_projector.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// Copyright 2023 TIER IV, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#ifndef AUTOWARE__GEOGRAPHY_UTILS__LANELET2_PROJECTOR_HPP_ | ||
#define AUTOWARE__GEOGRAPHY_UTILS__LANELET2_PROJECTOR_HPP_ | ||
|
||
#include <autoware_map_msgs/msg/map_projector_info.hpp> | ||
|
||
#include <lanelet2_io/Projection.h> | ||
|
||
#include <memory> | ||
|
||
namespace autoware::geography_utils | ||
{ | ||
using MapProjectorInfo = autoware_map_msgs::msg::MapProjectorInfo; | ||
|
||
std::unique_ptr<lanelet::Projector> get_lanelet2_projector(const MapProjectorInfo & projector_info); | ||
|
||
} // namespace autoware::geography_utils | ||
|
||
#endif // AUTOWARE__GEOGRAPHY_UTILS__LANELET2_PROJECTOR_HPP_ |
33 changes: 33 additions & 0 deletions
33
common/autoware_geography_utils/include/autoware/geography_utils/projection.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// Copyright 2023 TIER IV, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#ifndef AUTOWARE__GEOGRAPHY_UTILS__PROJECTION_HPP_ | ||
#define AUTOWARE__GEOGRAPHY_UTILS__PROJECTION_HPP_ | ||
|
||
#include <autoware_map_msgs/msg/map_projector_info.hpp> | ||
#include <geographic_msgs/msg/geo_point.hpp> | ||
#include <geometry_msgs/msg/point.hpp> | ||
|
||
namespace autoware::geography_utils | ||
{ | ||
using MapProjectorInfo = autoware_map_msgs::msg::MapProjectorInfo; | ||
using GeoPoint = geographic_msgs::msg::GeoPoint; | ||
using LocalPoint = geometry_msgs::msg::Point; | ||
|
||
LocalPoint project_forward(const GeoPoint & geo_point, const MapProjectorInfo & projector_info); | ||
GeoPoint project_reverse(const LocalPoint & local_point, const MapProjectorInfo & projector_info); | ||
|
||
} // namespace autoware::geography_utils | ||
|
||
#endif // AUTOWARE__GEOGRAPHY_UTILS__PROJECTION_HPP_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<?xml version="1.0"?> | ||
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> | ||
<package format="3"> | ||
<name>autoware_geography_utils</name> | ||
<version>0.38.0</version> | ||
<description>The autoware_geography_utils package</description> | ||
<maintainer email="[email protected]">Yamato Ando</maintainer> | ||
<maintainer email="[email protected]">Masahiro Sakamoto</maintainer> | ||
<maintainer email="[email protected]">NGUYEN Viet Anh</maintainer> | ||
<maintainer email="[email protected]">Taiki Yamada</maintainer> | ||
<maintainer email="[email protected]">Shintaro Sakoda</maintainer> | ||
<maintainer email="[email protected]">Ryu Yamamoto</maintainer> | ||
<license>Apache License 2.0</license> | ||
<author email="[email protected]">Koji Minoda</author> | ||
|
||
<buildtool_depend>ament_cmake_auto</buildtool_depend> | ||
<buildtool_depend>autoware_cmake</buildtool_depend> | ||
|
||
<depend>autoware_lanelet2_extension</depend> | ||
<depend>autoware_map_msgs</depend> | ||
<depend>geographic_msgs</depend> | ||
<depend>geographiclib</depend> | ||
<depend>geometry_msgs</depend> | ||
<depend>lanelet2_io</depend> | ||
|
||
<test_depend>ament_cmake_ros</test_depend> | ||
<test_depend>ament_lint_auto</test_depend> | ||
<test_depend>autoware_lint_common</test_depend> | ||
|
||
<export> | ||
<build_type>ament_cmake</build_type> | ||
</export> | ||
</package> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// Copyright 2023 TIER IV, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include <GeographicLib/Geoid.hpp> | ||
#include <autoware/geography_utils/height.hpp> | ||
|
||
#include <map> | ||
#include <stdexcept> | ||
#include <string> | ||
#include <utility> | ||
|
||
namespace autoware::geography_utils | ||
{ | ||
|
||
double convert_wgs84_to_egm2008(const double height, const double latitude, const double longitude) | ||
{ | ||
GeographicLib::Geoid egm2008("egm2008-1"); | ||
// cSpell: ignore ELLIPSOIDTOGEOID | ||
return egm2008.ConvertHeight(latitude, longitude, height, GeographicLib::Geoid::ELLIPSOIDTOGEOID); | ||
} | ||
|
||
double convert_egm2008_to_wgs84(const double height, const double latitude, const double longitude) | ||
{ | ||
GeographicLib::Geoid egm2008("egm2008-1"); | ||
// cSpell: ignore GEOIDTOELLIPSOID | ||
return egm2008.ConvertHeight(latitude, longitude, height, GeographicLib::Geoid::GEOIDTOELLIPSOID); | ||
} | ||
|
||
double convert_height( | ||
const double height, const double latitude, const double longitude, | ||
const std::string & source_vertical_datum, const std::string & target_vertical_datum) | ||
{ | ||
if (source_vertical_datum == target_vertical_datum) { | ||
return height; | ||
} | ||
std::map<std::pair<std::string, std::string>, HeightConversionFunction> conversion_map; | ||
conversion_map[{"WGS84", "EGM2008"}] = convert_wgs84_to_egm2008; | ||
conversion_map[{"EGM2008", "WGS84"}] = convert_egm2008_to_wgs84; | ||
|
||
auto key = std::make_pair(source_vertical_datum, target_vertical_datum); | ||
if (conversion_map.find(key) != conversion_map.end()) { | ||
return conversion_map[key](height, latitude, longitude); | ||
} else { | ||
std::string error_message = | ||
"Invalid conversion types: " + std::string(source_vertical_datum.c_str()) + " to " + | ||
std::string(target_vertical_datum.c_str()); | ||
|
||
throw std::invalid_argument(error_message); | ||
} | ||
} | ||
|
||
} // namespace autoware::geography_utils |
54 changes: 54 additions & 0 deletions
54
common/autoware_geography_utils/src/lanelet2_projector.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright 2023 TIER IV, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
#include <GeographicLib/Geoid.hpp> | ||
#include <autoware/geography_utils/lanelet2_projector.hpp> | ||
#include <autoware_lanelet2_extension/projection/mgrs_projector.hpp> | ||
#include <autoware_lanelet2_extension/projection/transverse_mercator_projector.hpp> | ||
|
||
#include <lanelet2_projection/UTM.h> | ||
|
||
namespace autoware::geography_utils | ||
{ | ||
|
||
std::unique_ptr<lanelet::Projector> get_lanelet2_projector(const MapProjectorInfo & projector_info) | ||
{ | ||
if (projector_info.projector_type == MapProjectorInfo::LOCAL_CARTESIAN_UTM) { | ||
lanelet::GPSPoint position{ | ||
projector_info.map_origin.latitude, projector_info.map_origin.longitude, | ||
projector_info.map_origin.altitude}; | ||
lanelet::Origin origin{position}; | ||
lanelet::projection::UtmProjector projector{origin}; | ||
return std::make_unique<lanelet::projection::UtmProjector>(projector); | ||
|
||
} else if (projector_info.projector_type == MapProjectorInfo::MGRS) { | ||
lanelet::projection::MGRSProjector projector{}; | ||
projector.setMGRSCode(projector_info.mgrs_grid); | ||
return std::make_unique<lanelet::projection::MGRSProjector>(projector); | ||
|
||
} else if (projector_info.projector_type == MapProjectorInfo::TRANSVERSE_MERCATOR) { | ||
lanelet::GPSPoint position{ | ||
projector_info.map_origin.latitude, projector_info.map_origin.longitude, | ||
projector_info.map_origin.altitude}; | ||
lanelet::Origin origin{position}; | ||
lanelet::projection::TransverseMercatorProjector projector{origin}; | ||
return std::make_unique<lanelet::projection::TransverseMercatorProjector>(projector); | ||
} | ||
const std::string error_msg = | ||
"Invalid map projector type: " + projector_info.projector_type + | ||
". Currently supported types: MGRS, LocalCartesianUTM, and TransverseMercator"; | ||
throw std::invalid_argument(error_msg); | ||
} | ||
|
||
} // namespace autoware::geography_utils |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we want to maintain the commit history, we’ll need to add a commit to reassign version numbers. This is troublesome. As @xmfcx suggested, copying might be a better option...