forked from autowarefoundation/autoware.universe
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add autoware api mapping system (autowarefoundation#9)
* Apply api mapping to engage * Fix format * Add vehicle status API (autowarefoundation#8) * Add vehicle status API * Fix logging * Fix lint * Add vehicle command API (autowarefoundation#11) * sync main for develop (autowarefoundation#17) * Add CI (autowarefoundation#12) * Add sync-public.yaml (autowarefoundation#14) * Add sync-public.yaml Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add sync-public-develop.yaml Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Change proposal sync app ID (autowarefoundation#18) Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> * Add fail safe state API (autowarefoundation#20) * Move autoware_api_utils * Move autoware_api_mapping * Fix package depend * Move autoware_api_generator Co-authored-by: autoware-iv-sync-ci[bot] <87871706+autoware-iv-sync-ci[bot]@users.noreply.github.com> Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com>
- Loading branch information
Showing
8 changed files
with
377 additions
and
0 deletions.
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,26 @@ | ||
cmake_minimum_required(VERSION 3.5) | ||
project(autoware_api_utils) | ||
|
||
if(NOT CMAKE_CXX_STANDARD) | ||
set(CMAKE_CXX_STANDARD 17) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
set(CMAKE_CXX_EXTENSIONS OFF) | ||
endif() | ||
|
||
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") | ||
add_compile_options(-Wall -Wextra -Wpedantic -Werror) | ||
endif() | ||
|
||
find_package(ament_cmake_auto REQUIRED) | ||
ament_auto_find_build_dependencies() | ||
|
||
if(BUILD_TESTING) | ||
find_package(ament_lint_auto REQUIRED) | ||
find_package(ament_cmake_gtest REQUIRED) | ||
include_directories(include) | ||
ament_lint_auto_find_test_dependencies() | ||
ament_add_gtest(${PROJECT_NAME}_test test/test.cpp) | ||
ament_target_dependencies(${PROJECT_NAME}_test rclcpp autoware_external_api_msgs) | ||
endif() | ||
|
||
ament_auto_package() |
21 changes: 21 additions & 0 deletions
21
common/autoware_api_utils/include/autoware_api_utils/autoware_api_utils.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,21 @@ | ||
// Copyright 2021 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_API_UTILS__AUTOWARE_API_UTILS_HPP_ | ||
#define AUTOWARE_API_UTILS__AUTOWARE_API_UTILS_HPP_ | ||
|
||
#include "autoware_api_utils/rclcpp/proxy.hpp" | ||
#include "autoware_api_utils/types/response.hpp" | ||
|
||
#endif // AUTOWARE_API_UTILS__AUTOWARE_API_UTILS_HPP_ |
72 changes: 72 additions & 0 deletions
72
common/autoware_api_utils/include/autoware_api_utils/rclcpp/client.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,72 @@ | ||
// Copyright 2021 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_API_UTILS__RCLCPP__CLIENT_HPP_ | ||
#define AUTOWARE_API_UTILS__RCLCPP__CLIENT_HPP_ | ||
|
||
#include <chrono> | ||
#include <utility> | ||
#include "rclcpp/client.hpp" | ||
#include "autoware_api_utils/types/response.hpp" | ||
|
||
namespace autoware_api_utils | ||
{ | ||
|
||
template<typename ServiceT> | ||
class Client | ||
{ | ||
public: | ||
RCLCPP_SMART_PTR_DEFINITIONS(Client) | ||
|
||
using ResponseStatus = autoware_external_api_msgs::msg::ResponseStatus; | ||
using AutowareServiceResult = std::pair<ResponseStatus, typename ServiceT::Response::SharedPtr>; | ||
|
||
Client(typename rclcpp::Client<ServiceT>::SharedPtr client, rclcpp::Logger logger) | ||
: client_(client), logger_(logger) | ||
{ | ||
} | ||
|
||
AutowareServiceResult call( | ||
const typename ServiceT::Request::SharedPtr & request, | ||
const std::chrono::nanoseconds & timeout = std::chrono::seconds(2)) | ||
{ | ||
// TODO(Takagi, Isamu): use rosidl_generator_traits::to_yaml (galactic) | ||
RCLCPP_INFO(logger_, "client request"); | ||
|
||
if (!client_->service_is_ready()) { | ||
RCLCPP_INFO(logger_, "client available"); | ||
return {response_error("Internal service is not available."), nullptr}; | ||
} | ||
|
||
auto future = client_->async_send_request(request); | ||
if (future.wait_for(timeout) != std::future_status::ready) { | ||
RCLCPP_INFO(logger_, "client timeout"); | ||
return {response_error("Internal service has timed out."), nullptr}; | ||
} | ||
|
||
// TODO(Takagi, Isamu): use rosidl_generator_traits::to_yaml (galactic) | ||
RCLCPP_INFO(logger_, "client response"); | ||
return {response_success(), future.get()}; | ||
} | ||
|
||
private: | ||
RCLCPP_DISABLE_COPY(Client) | ||
|
||
typename rclcpp::Client<ServiceT>::SharedPtr client_; | ||
rclcpp::Logger logger_; | ||
}; | ||
|
||
} // namespace autoware_api_utils | ||
|
||
#endif // AUTOWARE_API_UTILS__RCLCPP__CLIENT_HPP_ |
70 changes: 70 additions & 0 deletions
70
common/autoware_api_utils/include/autoware_api_utils/rclcpp/proxy.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,70 @@ | ||
// Copyright 2021 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_API_UTILS__RCLCPP__PROXY_HPP_ | ||
#define AUTOWARE_API_UTILS__RCLCPP__PROXY_HPP_ | ||
|
||
#include <string> | ||
#include <utility> | ||
#include "rclcpp/rclcpp.hpp" | ||
#include "autoware_api_utils/rclcpp/service.hpp" | ||
#include "autoware_api_utils/rclcpp/client.hpp" | ||
|
||
namespace autoware_api_utils | ||
{ | ||
|
||
template<class NodeT> | ||
class ServiceProxyNodeInterface | ||
{ | ||
public: | ||
// Use a raw pointer because shared_from_this cannot be used in constructor. | ||
explicit ServiceProxyNodeInterface(NodeT * node) | ||
{ | ||
node_ = node; | ||
} | ||
|
||
template<typename ServiceT, typename CallbackT> | ||
typename Service<ServiceT>::SharedPtr | ||
create_service( | ||
const std::string & service_name, | ||
CallbackT && callback, | ||
const rmw_qos_profile_t & qos_profile = rmw_qos_profile_services_default, | ||
rclcpp::CallbackGroup::SharedPtr group = nullptr) | ||
{ | ||
auto wrapped_callback = Service<ServiceT>::template wrap<CallbackT>( | ||
std::forward<CallbackT>(callback), node_->get_logger()); | ||
return Service<ServiceT>::make_shared( | ||
node_->template create_service<ServiceT>( | ||
service_name, std::move(wrapped_callback), qos_profile, group)); | ||
} | ||
|
||
template<typename ServiceT> | ||
typename Client<ServiceT>::SharedPtr | ||
create_client( | ||
const std::string & service_name, | ||
const rmw_qos_profile_t & qos_profile = rmw_qos_profile_services_default, | ||
rclcpp::CallbackGroup::SharedPtr group = nullptr) | ||
{ | ||
return Client<ServiceT>::make_shared( | ||
node_->template create_client<ServiceT>( | ||
service_name, qos_profile, group), node_->get_logger()); | ||
} | ||
|
||
private: | ||
NodeT * node_; | ||
}; | ||
|
||
} // namespace autoware_api_utils | ||
|
||
#endif // AUTOWARE_API_UTILS__RCLCPP__PROXY_HPP_ |
57 changes: 57 additions & 0 deletions
57
common/autoware_api_utils/include/autoware_api_utils/rclcpp/service.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,57 @@ | ||
// Copyright 2021 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_API_UTILS__RCLCPP__SERVICE_HPP_ | ||
#define AUTOWARE_API_UTILS__RCLCPP__SERVICE_HPP_ | ||
|
||
#include "rclcpp/service.hpp" | ||
|
||
namespace autoware_api_utils | ||
{ | ||
|
||
template<typename ServiceT> | ||
class Service | ||
{ | ||
public: | ||
RCLCPP_SMART_PTR_DEFINITIONS(Service) | ||
|
||
explicit Service(typename rclcpp::Service<ServiceT>::SharedPtr service) | ||
: service_(service) | ||
{ | ||
} | ||
|
||
template<typename CallbackT> | ||
static auto wrap(CallbackT && callback, const rclcpp::Logger & logger) | ||
{ | ||
auto wrapped_callback = [logger, callback]( | ||
typename ServiceT::Request::SharedPtr request, | ||
typename ServiceT::Response::SharedPtr response) | ||
{ | ||
// TODO(Takagi, Isamu): use rosidl_generator_traits::to_yaml (galactic) | ||
RCLCPP_INFO(logger, "service request"); | ||
callback(request, response); | ||
RCLCPP_INFO(logger, "service response"); | ||
}; | ||
return wrapped_callback; | ||
} | ||
|
||
private: | ||
RCLCPP_DISABLE_COPY(Service) | ||
|
||
typename rclcpp::Service<ServiceT>::SharedPtr service_; | ||
}; | ||
|
||
} // namespace autoware_api_utils | ||
|
||
#endif // AUTOWARE_API_UTILS__RCLCPP__SERVICE_HPP_ |
72 changes: 72 additions & 0 deletions
72
common/autoware_api_utils/include/autoware_api_utils/types/response.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,72 @@ | ||
// Copyright 2021 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_API_UTILS__TYPES__RESPONSE_HPP_ | ||
#define AUTOWARE_API_UTILS__TYPES__RESPONSE_HPP_ | ||
|
||
#include <string> | ||
#include "rclcpp/rclcpp.hpp" | ||
#include "autoware_external_api_msgs/msg/response_status.hpp" | ||
|
||
namespace autoware_api_utils | ||
{ | ||
using ResponseStatus = autoware_external_api_msgs::msg::ResponseStatus; | ||
|
||
inline bool is_success(const autoware_external_api_msgs::msg::ResponseStatus & status) | ||
{ | ||
return status.code == autoware_external_api_msgs::msg::ResponseStatus::SUCCESS; | ||
} | ||
|
||
inline bool is_ignored(const autoware_external_api_msgs::msg::ResponseStatus & status) | ||
{ | ||
return status.code == autoware_external_api_msgs::msg::ResponseStatus::IGNORED; | ||
} | ||
|
||
inline bool is_warn(const autoware_external_api_msgs::msg::ResponseStatus & status) | ||
{ | ||
return status.code == autoware_external_api_msgs::msg::ResponseStatus::WARN; | ||
} | ||
|
||
inline bool is_error(const autoware_external_api_msgs::msg::ResponseStatus & status) | ||
{ | ||
return status.code == autoware_external_api_msgs::msg::ResponseStatus::ERROR; | ||
} | ||
|
||
inline ResponseStatus response_success(const std::string & message = "") | ||
{ | ||
return autoware_external_api_msgs::build<autoware_external_api_msgs::msg::ResponseStatus>() | ||
.code(autoware_external_api_msgs::msg::ResponseStatus::SUCCESS).message(message); | ||
} | ||
|
||
inline ResponseStatus response_ignored(const std::string & message = "") | ||
{ | ||
return autoware_external_api_msgs::build<autoware_external_api_msgs::msg::ResponseStatus>() | ||
.code(autoware_external_api_msgs::msg::ResponseStatus::IGNORED).message(message); | ||
} | ||
|
||
inline ResponseStatus response_warn(const std::string & message = "") | ||
{ | ||
return autoware_external_api_msgs::build<autoware_external_api_msgs::msg::ResponseStatus>() | ||
.code(autoware_external_api_msgs::msg::ResponseStatus::WARN).message(message); | ||
} | ||
|
||
inline ResponseStatus response_error(const std::string & message = "") | ||
{ | ||
return autoware_external_api_msgs::build<autoware_external_api_msgs::msg::ResponseStatus>() | ||
.code(autoware_external_api_msgs::msg::ResponseStatus::ERROR).message(message); | ||
} | ||
|
||
} // namespace autoware_api_utils | ||
|
||
#endif // AUTOWARE_API_UTILS__TYPES__RESPONSE_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,28 @@ | ||
<?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_api_utils</name> | ||
<version>0.0.0</version> | ||
<description>The autoware_api_utils package</description> | ||
<maintainer email="isamu.takagi@tier4.jp">Takagi, Isamu</maintainer> | ||
<license>Apache License 2.0</license> | ||
|
||
<buildtool_depend>ament_cmake_auto</buildtool_depend> | ||
|
||
<depend>autoware_external_api_msgs</depend> | ||
<depend>rclcpp</depend> | ||
|
||
<test_depend>ament_cmake_gtest</test_depend> | ||
<test_depend>ament_lint_auto</test_depend> | ||
<test_depend>ament_lint_common</test_depend> | ||
<test_depend>autoware_external_api_msgs</test_depend> | ||
<test_depend>rclcpp</test_depend> | ||
|
||
<member_of_group>rosidl_interface_packages</member_of_group> | ||
|
||
<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,31 @@ | ||
// Copyright 2021 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 "gtest/gtest.h" | ||
#include "rclcpp/rclcpp.hpp" | ||
#include "autoware_api_utils/autoware_api_utils.hpp" | ||
|
||
TEST(autoware_api_utils, instantiate) { | ||
rclcpp::Node node("autoware_api_utils_test"); | ||
autoware_api_utils::ServiceProxyNodeInterface proxy(&node); | ||
} | ||
|
||
int main(int argc, char ** argv) | ||
{ | ||
testing::InitGoogleTest(&argc, argv); | ||
rclcpp::init(argc, argv); | ||
bool result = RUN_ALL_TESTS(); | ||
rclcpp::shutdown(); | ||
return result; | ||
} |