Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 20 additions & 39 deletions ros_package_template/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,52 +9,25 @@ 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(Eigen3 REQUIRED)
find_package(Boost REQUIRED)
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()

###########
## 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}
ament_auto_add_library(${PROJECT_NAME} SHARED
src/algorithm.cpp
src/ros_package_template.cpp
)

## Declare a cpp library
add_library(${PROJECT_NAME}_core
src/Algorithm.cpp
)
target_compile_features(${PROJECT_NAME}_core INTERFACE cxx_std_14)

## Declare cpp executables
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}
rclcpp_components_register_node(${PROJECT_NAME}
PLUGIN ${PROJECT_NAME}::RosPackageTemplate
EXECUTABLE ${PROJECT_NAME}_node
)

#############
Expand All @@ -66,4 +39,12 @@ if(BUILD_TESTING)
ament_lint_auto_find_test_dependencies()
endif()

ament_package()
#############
## Install ##
#############

ament_auto_package(
INSTALL_TO_SHARE
config
launch
)
1 change: 0 additions & 1 deletion ros_package_template/config/default.yaml

This file was deleted.

3 changes: 3 additions & 0 deletions ros_package_template/config/template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/template_node:
ros__parameters:
use_sim_time: false
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
#pragma once

#include <eigen3/Eigen/Eigen>
#include <memory>

#include <Eigen/Core>

namespace ros_package_template {
namespace ros_package_template
{

/*!
* Class containing the algorithmic part of the package.
*/
class Algorithm
{
public:
public:
/*!
* Constructor.
*/
Expand All @@ -32,21 +32,20 @@ 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.
* @return the average of the data.
*/
double getAverage() const;

private:

private:
//! Forward declared structure that will contain the data
struct Data;

//! Pointer to data (pimpl)
std::unique_ptr<Data> data_;
};

} /* namespace */
} // namespace ros_package_template
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
#pragma once

#include "ros_package_template/Algorithm.hpp"
#include "ros_package_template/algorithm.hpp"

// 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 rclcpp::NodeOptions & options);

/*!
/*!
* Destructor.
*/
virtual ~RosPackageTemplate();
virtual ~RosPackageTemplate();
};

} /* namespace */
} // namespace ros_package_template
8 changes: 0 additions & 8 deletions ros_package_template/launch/ros_package_template.launch

This file was deleted.

22 changes: 22 additions & 0 deletions ros_package_template/launch/ros_package_template.launch.py
Original file line number Diff line number Diff line change
@@ -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])

This file was deleted.

2 changes: 2 additions & 0 deletions ros_package_template/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
<!-- build_depend: dependencies only used in source files -->
<build_depend>boost</build_depend>
<!-- depend: build, export, and execution dependency -->
<depend>rclcpp</depend>
<depend>rclcpp_components</depend>
<depend>eigen</depend>
<depend>sensor_msgs</depend>

Expand Down
39 changes: 0 additions & 39 deletions ros_package_template/src/Algorithm.cpp

This file was deleted.

15 changes: 0 additions & 15 deletions ros_package_template/src/RosPackageTemplate.cpp

This file was deleted.

33 changes: 33 additions & 0 deletions ros_package_template/src/algorithm.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#include "ros_package_template/algorithm.hpp"

#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/count.hpp>
#include <boost/accumulators/statistics/mean.hpp>
#include <utility>

namespace ros_package_template
{

using namespace boost::accumulators;

struct Algorithm::Data
{
accumulator_set<double, features<tag::mean, tag::count>> acc;
};

Algorithm::Algorithm() {data_ = std::make_unique<Data>();}

Algorithm::~Algorithm() = default;

void Algorithm::addData(const double data) {data_->acc(data);}

void Algorithm::addData(const Eigen::VectorXd & data)
{
for (auto i = 0; i < data.size(); ++i) {
addData(data[i]);
}
}

double Algorithm::getAverage() const {return count(data_->acc) ? mean(data_->acc) : 0;}

} // namespace ros_package_template
24 changes: 24 additions & 0 deletions ros_package_template/src/ros_package_template.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#include "ros_package_template/ros_package_template.hpp"

// STD
#include <string>

namespace ros_package_template
{

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)
16 changes: 0 additions & 16 deletions ros_package_template/src/ros_package_template_node.cpp

This file was deleted.

6 changes: 3 additions & 3 deletions ros_package_template/test/AlgorithmTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,18 @@ 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)
{
size_t nMeasurements = 100;
std::vector<double> inputData(nMeasurements);
double sum = 0.0;
for (auto& data : inputData) {
for (auto & data : inputData) {
data = 100.0 * (double)rand() / RAND_MAX;
sum += data;
}
Expand Down
Loading