Skip to content

Commit

Permalink
Component node example
Browse files Browse the repository at this point in the history
  • Loading branch information
tylerjw committed Sep 6, 2022
1 parent 05622d6 commit 4c0519b
Show file tree
Hide file tree
Showing 5 changed files with 154 additions and 95 deletions.
34 changes: 26 additions & 8 deletions example/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,40 @@ cmake_minimum_required(VERSION 3.22)
project(generate_parameter_library_example)

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_lifecycle REQUIRED)
find_package(generate_parameter_library REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_components REQUIRED)

generate_parameter_library(admittance_controller_parameters
src/parameters.yaml
include/generate_parameter_library_example/example_validators.hpp
)

add_executable(test_node
src/main.cpp
add_library(minimal_publisher SHARED
src/minimal_publisher.cpp
)
target_include_directories(minimal_publisher PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(minimal_publisher
PUBLIC
admittance_controller_parameters
rclcpp::rclcpp
rclcpp_components::component
)
rclcpp_components_register_node(minimal_publisher
PLUGIN "admittance_controller::MinimalPublisher"
EXECUTABLE test_node
)

target_link_libraries(test_node PRIVATE
rclcpp::rclcpp
rclcpp_lifecycle::rclcpp_lifecycle
admittance_controller_parameters
install(DIRECTORY include/ DESTINATION include/)
install(TARGETS minimal_publisher admittance_controller_parameters
EXPORT generate_parameter_library_example_export
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)

install(
Expand Down Expand Up @@ -46,4 +63,5 @@ if(BUILD_TESTING)
target_link_libraries(test_example_gmock admittance_controller_parameters rclcpp::rclcpp)
endif()

ament_export_targets(generate_parameter_library_example_export)
ament_package()
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright 2022 PickNik Inc.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the PickNik Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

#pragma once

#include <rclcpp/rclcpp.hpp>
#include <rclcpp_components/register_node_macro.hpp>

#include <admittance_controller_parameters.hpp>

namespace admittance_controller {

class MinimalPublisher : public rclcpp::Node {
public:
MinimalPublisher(const rclcpp::NodeOptions& options = rclcpp::NodeOptions());

private:
void timer_callback();

rclcpp::TimerBase::SharedPtr timer_;
std::shared_ptr<admittance_controller::ParamListener> param_listener_;
admittance_controller::Params params_;
};

} // namespace admittance_controller

RCLCPP_COMPONENTS_REGISTER_NODE(admittance_controller::MinimalPublisher)
3 changes: 2 additions & 1 deletion example/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
<license>BSD-3-Clause</license>
<author email="paul.gesel@picknik.ai">Paul Gesel</author>

<depend>rclcpp</depend>
<depend>generate_parameter_library</depend>
<depend>rclcpp</depend>
<depend>rclcpp_components</depend>

<buildtool_depend>ament_cmake</buildtool_depend>

Expand Down
86 changes: 0 additions & 86 deletions example/src/main.cpp

This file was deleted.

74 changes: 74 additions & 0 deletions example/src/minimal_publisher.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Copyright 2022 PickNik Inc.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the PickNik Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

#include "generate_parameter_library_example/minimal_publisher.hpp"

#include <rclcpp/rclcpp.hpp>

#include <admittance_controller_parameters.hpp>

using namespace std::chrono_literals;

namespace admittance_controller {

MinimalPublisher::MinimalPublisher(const rclcpp::NodeOptions& options)
: Node("admittance_controller", options) {
timer_ = create_wall_timer(
500ms, std::bind(&MinimalPublisher::timer_callback, this));
param_listener_ =
std::make_shared<ParamListener>(get_node_parameters_interface());
params_ = param_listener_->get_params();

StackParams s_params = param_listener_->get_stack_params();

RCLCPP_INFO(get_logger(), "Initial control frame parameter is: '%s'",
params_.control.frame.id.c_str());
RCLCPP_INFO(get_logger(), "fixed string is: '%s'",
std::string{params_.fixed_string}.c_str());
const tcb::span<double> fixed_array = params_.fixed_array;
for (auto d : fixed_array) {
RCLCPP_INFO(get_logger(), "value: '%s'", std::to_string(d).c_str());
}
}

void MinimalPublisher::timer_callback() {
if (param_listener_->is_old(params_)) {
param_listener_->refresh_dynamic_parameters();
params_ = param_listener_->get_params();
RCLCPP_INFO(get_logger(), "New control frame parameter is: '%s'",
params_.control.frame.id.c_str());
RCLCPP_INFO(get_logger(), "fixed string is: '%s'",
std::string{params_.fixed_string}.c_str());
const tcb::span<double> fixed_array = params_.fixed_array;
for (auto d : fixed_array) {
RCLCPP_INFO(get_logger(), "value: '%s'", std::to_string(d).c_str());
}
}
}

} // namespace admittance_controller

0 comments on commit 4c0519b

Please sign in to comment.