From 229d98ddc72727b5f9ddd1e66bbc116fff393bf1 Mon Sep 17 00:00:00 2001 From: ChenJun Date: Fri, 14 Jan 2022 00:04:40 +0800 Subject: [PATCH 1/6] Using ament_cmake_auto to build & install --- ros_package_template/CMakeLists.txt | 57 +++++++++++------------------ ros_package_template/package.xml | 1 + 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/ros_package_template/CMakeLists.txt b/ros_package_template/CMakeLists.txt index fbcee1e..fc02923 100644 --- a/ros_package_template/CMakeLists.txt +++ b/ros_package_template/CMakeLists.txt @@ -9,53 +9,30 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) ## enforcing cleaner code. add_definitions(-Wall -Werror) -## Find catkin macros and libraries -find_package(ament_cmake REQUIRED) -find_package(rclcpp REQUIRED) -find_package(sensor_msgs REQUIRED) +####################### +## Find dependencies ## +####################### -## Find system libraries +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() + +# See https://github.com/ros2/eigen3_cmake_module +find_package(eigen3_cmake_module REQUIRED) find_package(Eigen3 REQUIRED) -find_package(Boost REQUIRED) ########### ## Build ## ########### -## Specify additional locations of header files -## Your package locations should be listed before other locations -include_directories( - include - ${catkin_INCLUDE_DIRS} - # Set manually because Eigen sets a non standard INCLUDE DIR - ${EIGEN3_INCLUDE_DIR} - # Set because Boost is an internal dependency, not transitive. - ${Boost_INCLUDE_DIRS} -) - -## Declare a cpp library -add_library(${PROJECT_NAME}_core - src/Algorithm.cpp +ament_auto_add_library(${PROJECT_NAME}_core + src/Algorithm.cpp ) -target_compile_features(${PROJECT_NAME}_core INTERFACE cxx_std_14) +ament_target_dependencies(${PROJECT_NAME}_core Eigen3) -## Declare cpp executables -add_executable(${PROJECT_NAME} +ament_auto_add_executable(${PROJECT_NAME} src/${PROJECT_NAME}_node.cpp src/RosPackageTemplate.cpp ) -target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_14) -ament_target_dependencies(${PROJECT_NAME} rclcpp sensor_msgs) - -############# -## Install ## -############# - -# Mark executables and/or libraries for installation -install( - TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_core - DESTINATION lib/${PROJECT_NAME} -) ############# ## Testing ## @@ -66,4 +43,12 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() endif() -ament_package() +############# +## Install ## +############# + +ament_auto_package( + INSTALL_TO_SHARE + config + launch +) \ No newline at end of file diff --git a/ros_package_template/package.xml b/ros_package_template/package.xml index c911fd5..41354b5 100644 --- a/ros_package_template/package.xml +++ b/ros_package_template/package.xml @@ -18,6 +18,7 @@ boost + rclcpp eigen sensor_msgs From 59902638bd1c0e97c91e6dc845f15e81655eacd8 Mon Sep 17 00:00:00 2001 From: ChenJun Date: Fri, 14 Jan 2022 00:09:06 +0800 Subject: [PATCH 2/6] Using ament_uncrustify to reformat cpp file --- .../ros_package_template/Algorithm.hpp | 15 ++++----- .../RosPackageTemplate.hpp | 9 +++--- ros_package_template/src/Algorithm.cpp | 32 ++++++++----------- .../src/RosPackageTemplate.cpp | 11 +++---- .../src/ros_package_template_node.cpp | 3 +- ros_package_template/test/AlgorithmTest.cpp | 6 ++-- .../test/test_ros_package_template.cpp | 4 +-- 7 files changed, 36 insertions(+), 44 deletions(-) diff --git a/ros_package_template/include/ros_package_template/Algorithm.hpp b/ros_package_template/include/ros_package_template/Algorithm.hpp index 4b8ecf9..e875311 100644 --- a/ros_package_template/include/ros_package_template/Algorithm.hpp +++ b/ros_package_template/include/ros_package_template/Algorithm.hpp @@ -1,17 +1,17 @@ #pragma once -#include - #include +#include -namespace ros_package_template { +namespace ros_package_template +{ /*! * Class containing the algorithmic part of the package. */ class Algorithm { - public: +public: /*! * Constructor. */ @@ -32,7 +32,7 @@ class Algorithm * Add multiple measurements as once. * @param data new data. */ - void addData(const Eigen::VectorXd& data); + void addData(const Eigen::VectorXd & data); /*! * Get the computed average of the data. @@ -40,8 +40,7 @@ class Algorithm */ double getAverage() const; - private: - +private: //! Forward declared structure that will contain the data struct Data; @@ -49,4 +48,4 @@ class Algorithm std::unique_ptr data_; }; -} /* namespace */ +} // namespace ros_package_template diff --git a/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp b/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp index 00daadf..62511c4 100644 --- a/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp +++ b/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp @@ -5,19 +5,20 @@ // ROS2 #include "rclcpp/rclcpp.hpp" -namespace ros_package_template { +namespace ros_package_template +{ /*! * Main class for the node to handle the ROS interfacing. */ class RosPackageTemplate : public rclcpp::Node { - public: +public: /*! * Constructor. * @param nodeHandle the ROS node handle. */ - RosPackageTemplate(const std::string& name); + RosPackageTemplate(const std::string & name); /*! * Destructor. @@ -25,4 +26,4 @@ class RosPackageTemplate : public rclcpp::Node virtual ~RosPackageTemplate(); }; -} /* namespace */ +} // namespace ros_package_template diff --git a/ros_package_template/src/Algorithm.cpp b/ros_package_template/src/Algorithm.cpp index a66c49a..baf5d6b 100644 --- a/ros_package_template/src/Algorithm.cpp +++ b/ros_package_template/src/Algorithm.cpp @@ -1,39 +1,33 @@ #include "ros_package_template/Algorithm.hpp" -#include - #include -#include #include +#include +#include -namespace ros_package_template { +namespace ros_package_template +{ using namespace boost::accumulators; -struct Algorithm::Data { +struct Algorithm::Data +{ accumulator_set> acc; }; -Algorithm::Algorithm() { - data_ = std::make_unique(); -} +Algorithm::Algorithm() {data_ = std::make_unique();} Algorithm::~Algorithm() = default; -void Algorithm::addData(const double data) -{ - data_->acc(data); -} +void Algorithm::addData(const double data) {data_->acc(data);} -void Algorithm::addData(const Eigen::VectorXd& data) +void Algorithm::addData(const Eigen::VectorXd & data) { - for(auto i = 0; i < data.size(); ++i) + for (auto i = 0; i < data.size(); ++i) { addData(data[i]); + } } -double Algorithm::getAverage() const -{ - return count(data_->acc) ? mean(data_->acc) : 0; -} +double Algorithm::getAverage() const {return count(data_->acc) ? mean(data_->acc) : 0;} -} /* namespace */ +} // namespace ros_package_template diff --git a/ros_package_template/src/RosPackageTemplate.cpp b/ros_package_template/src/RosPackageTemplate.cpp index c939067..451ef72 100644 --- a/ros_package_template/src/RosPackageTemplate.cpp +++ b/ros_package_template/src/RosPackageTemplate.cpp @@ -3,13 +3,12 @@ // STD #include -namespace ros_package_template { - -RosPackageTemplate::RosPackageTemplate(const std::string& name) - : Node(name) +namespace ros_package_template { -} + +RosPackageTemplate::RosPackageTemplate(const std::string & name) +: Node(name) {} RosPackageTemplate::~RosPackageTemplate() = default; -} /* namespace */ +} // namespace ros_package_template diff --git a/ros_package_template/src/ros_package_template_node.cpp b/ros_package_template/src/ros_package_template_node.cpp index 804595f..e1ba03b 100644 --- a/ros_package_template/src/ros_package_template_node.cpp +++ b/ros_package_template/src/ros_package_template_node.cpp @@ -1,8 +1,7 @@ #include "rclcpp/rclcpp.hpp" - #include "ros_package_template/RosPackageTemplate.hpp" -int main(int argc, char** argv) +int main(int argc, char ** argv) { rclcpp::init(argc, argv); diff --git a/ros_package_template/test/AlgorithmTest.cpp b/ros_package_template/test/AlgorithmTest.cpp index aeb10cd..3a7bc21 100644 --- a/ros_package_template/test/AlgorithmTest.cpp +++ b/ros_package_template/test/AlgorithmTest.cpp @@ -32,10 +32,10 @@ TEST(Algorithm, singleDataVector) Algorithm algorithm; Eigen::VectorXd inputData; inputData.resize(2); - inputData << inputValue, 3*inputValue; + inputData << inputValue, 3 * inputValue; algorithm.addData(inputData); const double average = algorithm.getAverage(); - EXPECT_NEAR(2*inputValue, average, 1e-10); + EXPECT_NEAR(2 * inputValue, average, 1e-10); } TEST(Algorithm, multipleDataPoints) @@ -43,7 +43,7 @@ TEST(Algorithm, multipleDataPoints) size_t nMeasurements = 100; std::vector inputData(nMeasurements); double sum = 0.0; - for (auto& data : inputData) { + for (auto & data : inputData) { data = 100.0 * (double)rand() / RAND_MAX; sum += data; } diff --git a/ros_package_template/test/test_ros_package_template.cpp b/ros_package_template/test/test_ros_package_template.cpp index 2fc9dd5..c4f1a54 100644 --- a/ros_package_template/test/test_ros_package_template.cpp +++ b/ros_package_template/test/test_ros_package_template.cpp @@ -2,9 +2,9 @@ #include // Run all the tests that were declared with TEST() -int main(int argc, char **argv) +int main(int argc, char ** argv) { testing::InitGoogleTest(&argc, argv); srand((int)time(0)); return RUN_ALL_TESTS(); -} \ No newline at end of file +} From ecbc818117621b235c9b13929f440cb70abf50b4 Mon Sep 17 00:00:00 2001 From: ChenJun Date: Fri, 14 Jan 2022 00:28:17 +0800 Subject: [PATCH 3/6] Use rclcpp components to build a node --- ros_package_template/CMakeLists.txt | 13 +++++++------ .../ros_package_template/RosPackageTemplate.hpp | 6 +++--- ros_package_template/package.xml | 1 + ros_package_template/src/RosPackageTemplate.cpp | 14 ++++++++++++-- .../src/ros_package_template_node.cpp | 15 --------------- 5 files changed, 23 insertions(+), 26 deletions(-) delete mode 100644 ros_package_template/src/ros_package_template_node.cpp diff --git a/ros_package_template/CMakeLists.txt b/ros_package_template/CMakeLists.txt index fc02923..7801a68 100644 --- a/ros_package_template/CMakeLists.txt +++ b/ros_package_template/CMakeLists.txt @@ -24,14 +24,15 @@ find_package(Eigen3 REQUIRED) ## Build ## ########### -ament_auto_add_library(${PROJECT_NAME}_core +ament_auto_add_library(${PROJECT_NAME} SHARED src/Algorithm.cpp + src/RosPackageTemplate.cpp ) -ament_target_dependencies(${PROJECT_NAME}_core Eigen3) +ament_target_dependencies(${PROJECT_NAME} Eigen3) -ament_auto_add_executable(${PROJECT_NAME} - src/${PROJECT_NAME}_node.cpp - src/RosPackageTemplate.cpp +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN ${PROJECT_NAME}::RosPackageTemplate + EXECUTABLE ${PROJECT_NAME}_node ) ############# @@ -48,7 +49,7 @@ endif() ############# ament_auto_package( - INSTALL_TO_SHARE + INSTALL_TO_SHARE config launch ) \ No newline at end of file diff --git a/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp b/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp index 62511c4..64f9bfd 100644 --- a/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp +++ b/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp @@ -18,12 +18,12 @@ class RosPackageTemplate : public rclcpp::Node * Constructor. * @param nodeHandle the ROS node handle. */ - RosPackageTemplate(const std::string & name); + RosPackageTemplate(const rclcpp::NodeOptions & options); - /*! + /*! * Destructor. */ - virtual ~RosPackageTemplate(); + virtual ~RosPackageTemplate(); }; } // namespace ros_package_template diff --git a/ros_package_template/package.xml b/ros_package_template/package.xml index 41354b5..ee74770 100644 --- a/ros_package_template/package.xml +++ b/ros_package_template/package.xml @@ -19,6 +19,7 @@ boost rclcpp + rclcpp_components eigen sensor_msgs diff --git a/ros_package_template/src/RosPackageTemplate.cpp b/ros_package_template/src/RosPackageTemplate.cpp index 451ef72..6d4a525 100644 --- a/ros_package_template/src/RosPackageTemplate.cpp +++ b/ros_package_template/src/RosPackageTemplate.cpp @@ -6,9 +6,19 @@ namespace ros_package_template { -RosPackageTemplate::RosPackageTemplate(const std::string & name) -: Node(name) {} +RosPackageTemplate::RosPackageTemplate(const rclcpp::NodeOptions & options) +: Node("RosPackageTemplateNode", options) +{ + RCLCPP_INFO(this->get_logger(), "Starting RosPackageTemplateNode!"); +} RosPackageTemplate::~RosPackageTemplate() = default; } // namespace ros_package_template + +#include "rclcpp_components/register_node_macro.hpp" + +// Register the component with class_loader. +// This acts as a sort of entry point, allowing the component to be discoverable when its library +// is being loaded into a running process. +RCLCPP_COMPONENTS_REGISTER_NODE(ros_package_template::RosPackageTemplate) \ No newline at end of file diff --git a/ros_package_template/src/ros_package_template_node.cpp b/ros_package_template/src/ros_package_template_node.cpp deleted file mode 100644 index e1ba03b..0000000 --- a/ros_package_template/src/ros_package_template_node.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "rclcpp/rclcpp.hpp" -#include "ros_package_template/RosPackageTemplate.hpp" - -int main(int argc, char ** argv) -{ - rclcpp::init(argc, argv); - - rclcpp::executors::SingleThreadedExecutor exec; - auto node = std::make_shared("ros_package_template"); - - exec.add_node(node); - exec.spin(); - rclcpp::shutdown(); - return 0; -} From 51ae7a5c2ce9f3447173ca1d32c5e68f4a69e4e8 Mon Sep 17 00:00:00 2001 From: ChenJun Date: Fri, 14 Jan 2022 00:36:12 +0800 Subject: [PATCH 4/6] Update launch file --- ros_package_template/config/default.yaml | 1 - ros_package_template/config/template.yaml | 3 +++ .../launch/ros_package_template.launch | 8 ------ .../launch/ros_package_template.launch.py | 22 +++++++++++++++ ...s_package_template_overlying_params.launch | 27 ------------------- 5 files changed, 25 insertions(+), 36 deletions(-) delete mode 100644 ros_package_template/config/default.yaml create mode 100644 ros_package_template/config/template.yaml delete mode 100644 ros_package_template/launch/ros_package_template.launch create mode 100644 ros_package_template/launch/ros_package_template.launch.py delete mode 100644 ros_package_template/launch/ros_package_template_overlying_params.launch diff --git a/ros_package_template/config/default.yaml b/ros_package_template/config/default.yaml deleted file mode 100644 index a89e5b5..0000000 --- a/ros_package_template/config/default.yaml +++ /dev/null @@ -1 +0,0 @@ -subscriber_topic: /temperature \ No newline at end of file diff --git a/ros_package_template/config/template.yaml b/ros_package_template/config/template.yaml new file mode 100644 index 0000000..42ffc65 --- /dev/null +++ b/ros_package_template/config/template.yaml @@ -0,0 +1,3 @@ +/template_node: + ros__parameters: + use_sim_time: false \ No newline at end of file diff --git a/ros_package_template/launch/ros_package_template.launch b/ros_package_template/launch/ros_package_template.launch deleted file mode 100644 index 6974a76..0000000 --- a/ros_package_template/launch/ros_package_template.launch +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/ros_package_template/launch/ros_package_template.launch.py b/ros_package_template/launch/ros_package_template.launch.py new file mode 100644 index 0000000..8c27c3f --- /dev/null +++ b/ros_package_template/launch/ros_package_template.launch.py @@ -0,0 +1,22 @@ +import os +from launch import LaunchDescription +from launch_ros.actions import Node +from ament_index_python.packages import get_package_share_directory + + +def generate_launch_description(): + config = os.path.join( + get_package_share_directory('ros_package_template'), 'config', 'default.yaml') + + template_node = Node( + name='template_node', + package='ros_package_template', + executable='ros_package_template_node', + namespace='', + output='screen', + parameters=[config], + ## Uncomment this line to change log level to DEBUG + # arguments=['--ros-args', '--log-level', 'DEBUG'], + ) + + return LaunchDescription([template_node]) diff --git a/ros_package_template/launch/ros_package_template_overlying_params.launch b/ros_package_template/launch/ros_package_template_overlying_params.launch deleted file mode 100644 index 0ac3e22..0000000 --- a/ros_package_template/launch/ros_package_template_overlying_params.launch +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - From f8dd12989c46e6035cea71061155b1d6490e010b Mon Sep 17 00:00:00 2001 From: ChenJun Date: Fri, 14 Jan 2022 18:33:20 +0800 Subject: [PATCH 5/6] Change files to under_scored --- ros_package_template/CMakeLists.txt | 4 ++-- .../ros_package_template/{Algorithm.hpp => algorithm.hpp} | 0 .../{RosPackageTemplate.hpp => ros_package_template.hpp} | 2 +- ros_package_template/src/{Algorithm.cpp => algorithm.cpp} | 2 +- .../src/{RosPackageTemplate.cpp => ros_package_template.cpp} | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename ros_package_template/include/ros_package_template/{Algorithm.hpp => algorithm.hpp} (100%) rename ros_package_template/include/ros_package_template/{RosPackageTemplate.hpp => ros_package_template.hpp} (90%) rename ros_package_template/src/{Algorithm.cpp => algorithm.cpp} (94%) rename ros_package_template/src/{RosPackageTemplate.cpp => ros_package_template.cpp} (92%) diff --git a/ros_package_template/CMakeLists.txt b/ros_package_template/CMakeLists.txt index 7801a68..f7a7972 100644 --- a/ros_package_template/CMakeLists.txt +++ b/ros_package_template/CMakeLists.txt @@ -25,8 +25,8 @@ find_package(Eigen3 REQUIRED) ########### ament_auto_add_library(${PROJECT_NAME} SHARED - src/Algorithm.cpp - src/RosPackageTemplate.cpp + src/algorithm.cpp + src/ros_package_template.cpp ) ament_target_dependencies(${PROJECT_NAME} Eigen3) diff --git a/ros_package_template/include/ros_package_template/Algorithm.hpp b/ros_package_template/include/ros_package_template/algorithm.hpp similarity index 100% rename from ros_package_template/include/ros_package_template/Algorithm.hpp rename to ros_package_template/include/ros_package_template/algorithm.hpp diff --git a/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp b/ros_package_template/include/ros_package_template/ros_package_template.hpp similarity index 90% rename from ros_package_template/include/ros_package_template/RosPackageTemplate.hpp rename to ros_package_template/include/ros_package_template/ros_package_template.hpp index 64f9bfd..617fa63 100644 --- a/ros_package_template/include/ros_package_template/RosPackageTemplate.hpp +++ b/ros_package_template/include/ros_package_template/ros_package_template.hpp @@ -1,6 +1,6 @@ #pragma once -#include "ros_package_template/Algorithm.hpp" +#include "ros_package_template/algorithm.hpp" // ROS2 #include "rclcpp/rclcpp.hpp" diff --git a/ros_package_template/src/Algorithm.cpp b/ros_package_template/src/algorithm.cpp similarity index 94% rename from ros_package_template/src/Algorithm.cpp rename to ros_package_template/src/algorithm.cpp index baf5d6b..2a9098c 100644 --- a/ros_package_template/src/Algorithm.cpp +++ b/ros_package_template/src/algorithm.cpp @@ -1,4 +1,4 @@ -#include "ros_package_template/Algorithm.hpp" +#include "ros_package_template/algorithm.hpp" #include #include diff --git a/ros_package_template/src/RosPackageTemplate.cpp b/ros_package_template/src/ros_package_template.cpp similarity index 92% rename from ros_package_template/src/RosPackageTemplate.cpp rename to ros_package_template/src/ros_package_template.cpp index 6d4a525..4c5dd8a 100644 --- a/ros_package_template/src/RosPackageTemplate.cpp +++ b/ros_package_template/src/ros_package_template.cpp @@ -1,4 +1,4 @@ -#include "ros_package_template/RosPackageTemplate.hpp" +#include "ros_package_template/ros_package_template.hpp" // STD #include From f01af465bd40c2b89adb125bbb8a3af9ff756523 Mon Sep 17 00:00:00 2001 From: ChenJun Date: Sat, 22 Jan 2022 18:49:45 +0800 Subject: [PATCH 6/6] Remove eigen in CmakeLists --- ros_package_template/CMakeLists.txt | 5 ----- .../include/ros_package_template/algorithm.hpp | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/ros_package_template/CMakeLists.txt b/ros_package_template/CMakeLists.txt index f7a7972..a1f1d47 100644 --- a/ros_package_template/CMakeLists.txt +++ b/ros_package_template/CMakeLists.txt @@ -16,10 +16,6 @@ add_definitions(-Wall -Werror) find_package(ament_cmake_auto REQUIRED) ament_auto_find_build_dependencies() -# See https://github.com/ros2/eigen3_cmake_module -find_package(eigen3_cmake_module REQUIRED) -find_package(Eigen3 REQUIRED) - ########### ## Build ## ########### @@ -28,7 +24,6 @@ ament_auto_add_library(${PROJECT_NAME} SHARED src/algorithm.cpp src/ros_package_template.cpp ) -ament_target_dependencies(${PROJECT_NAME} Eigen3) rclcpp_components_register_node(${PROJECT_NAME} PLUGIN ${PROJECT_NAME}::RosPackageTemplate diff --git a/ros_package_template/include/ros_package_template/algorithm.hpp b/ros_package_template/include/ros_package_template/algorithm.hpp index e875311..feaee74 100644 --- a/ros_package_template/include/ros_package_template/algorithm.hpp +++ b/ros_package_template/include/ros_package_template/algorithm.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include namespace ros_package_template