Skip to content

Commit

Permalink
feat(common): create booars_utils pkg and create function_timer.hpp (#10
Browse files Browse the repository at this point in the history
)

* create pkg directory

Signed-off-by: Autumn60 <[email protected]>

* create function_timer.hpp

Signed-off-by: Autumn60 <[email protected]>

---------

Signed-off-by: Autumn60 <[email protected]>
  • Loading branch information
Autumn60 authored Aug 21, 2024
1 parent 3a3d14f commit c207fce
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.5)
project(booars_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)
endif()

find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()

include_directories(include)

ament_auto_package()
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright 2024 Booars
//
// 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 BOOARS_UTILS__ROS__FUNCTION_TIMER_HPP_
#define BOOARS_UTILS__ROS__FUNCTION_TIMER_HPP_

#include <memory>
#include <rclcpp/rclcpp.hpp>
#include <utility>

namespace booars_utils::ros {

class FunctionTimer {
private:
rclcpp::TimerBase::SharedPtr timer_;

public:
using SharedPtr = std::shared_ptr<FunctionTimer>;

static SharedPtr create_function_timer(rclcpp::Node* node,
const double update_rate_hz,
std::function<void()> callback) {
return std::make_shared<FunctionTimer>(node, update_rate_hz, callback);
}

explicit FunctionTimer(rclcpp::Node* node, const double update_rate_hz,
std::function<void()> callback) {
const double dt = 1.0 / update_rate_hz;

auto period = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::duration<double>(dt));
timer_ = std::make_shared<rclcpp::GenericTimer<decltype(callback)>>(
node->get_clock(), period, std::move(callback),
node->get_node_base_interface()->get_context());
node->get_node_timers_interface()->add_timer(timer_, nullptr);
}
};

} // namespace booars_utils::ros

#endif // BOOARS_UTILS__ROS__FUNCTION_TIMER_HPP_
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>booars_utils</name>
<version>0.1.0</version>
<description>The booars_utils package</description>
<maintainer email="[email protected]">Akiro Harada</maintainer>

<license>Apache 2</license>

<buildtool_depend>ament_cmake_auto</buildtool_depend>

<depend>rclcpp</depend>

<test_depend>ament_lint_auto</test_depend>

<export>
<build_type>ament_cmake</build_type>
</export>
</package>

0 comments on commit c207fce

Please sign in to comment.