Skip to content

Commit

Permalink
Generate parameters for IMU Sensor Broadcaster (#399)
Browse files Browse the repository at this point in the history
  • Loading branch information
tylerjw committed Oct 21, 2022
1 parent eccea9c commit 0cfa804
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 41 deletions.
61 changes: 31 additions & 30 deletions imu_sensor_broadcaster/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,50 +13,43 @@ endif()

set(THIS_PACKAGE_INCLUDE_DEPENDS
controller_interface
sensor_msgs
generate_parameter_library
hardware_interface
pluginlib
rclcpp
rclcpp_lifecycle
realtime_tools
sensor_msgs
)

find_package(ament_cmake REQUIRED)
foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS})
find_package(${Dependency} REQUIRED)
endforeach()

generate_parameter_library(imu_sensor_broadcaster_parameters
src/imu_sensor_broadcaster_parameters.yaml
)

add_library(
${PROJECT_NAME}
SHARED
imu_sensor_broadcaster SHARED
src/imu_sensor_broadcaster.cpp
)
target_include_directories(
${PROJECT_NAME}
PUBLIC
include
target_include_directories(imu_sensor_broadcaster
PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE $<INSTALL_INTERFACE:include>
)
ament_target_dependencies(${PROJECT_NAME} ${THIS_PACKAGE_INCLUDE_DEPENDS})
ament_target_dependencies(imu_sensor_broadcaster ${THIS_PACKAGE_INCLUDE_DEPENDS})
# Causes the visibility macros to use dllexport rather than dllimport,
# which is appropriate when building the dll but not consuming it.
target_compile_definitions(${PROJECT_NAME} PRIVATE "IMU_SENSOR_BROADCASTER_BUILDING_DLL")
target_compile_definitions(imu_sensor_broadcaster PRIVATE "IMU_SENSOR_BROADCASTER_BUILDING_DLL")
target_link_libraries(imu_sensor_broadcaster
imu_sensor_broadcaster_parameters
)

pluginlib_export_plugin_description_file(
controller_interface imu_sensor_broadcaster.xml)

install(
TARGETS
${PROJECT_NAME}
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)

install(
DIRECTORY include/
DESTINATION include
)

if(BUILD_TESTING)
find_package(ament_cmake_gmock REQUIRED)
find_package(controller_manager REQUIRED)
Expand All @@ -80,7 +73,7 @@ if(BUILD_TESTING)
)
target_include_directories(test_imu_sensor_broadcaster PRIVATE include)
target_link_libraries(test_imu_sensor_broadcaster
${PROJECT_NAME}
imu_sensor_broadcaster
)
ament_target_dependencies(test_imu_sensor_broadcaster
hardware_interface
Expand All @@ -92,14 +85,22 @@ if(BUILD_TESTING)
)
endif()

ament_export_include_directories(
include
)
ament_export_libraries(
${PROJECT_NAME}
install(
DIRECTORY include/
DESTINATION include
)
ament_export_dependencies(
${THIS_PACKAGE_INCLUDE_DEPENDS}

install(
TARGETS
imu_sensor_broadcaster
imu_sensor_broadcaster_parameters
EXPORT export_imu_sensor_broadcaster
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
INCLUDES DESTINATION include
)

ament_export_targets(export_imu_sensor_broadcaster HAS_LIBRARY_TARGET)
ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS})
ament_package()
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

#include "controller_interface/controller_interface.hpp"
#include "imu_sensor_broadcaster/visibility_control.h"
#include "imu_sensor_broadcaster_parameters.hpp"
#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
#include "rclcpp_lifecycle/state.hpp"
#include "realtime_tools/realtime_publisher.h"
Expand Down Expand Up @@ -61,8 +62,8 @@ class IMUSensorBroadcaster : public controller_interface::ControllerInterface
const rclcpp::Time & time, const rclcpp::Duration & period) override;

protected:
std::string sensor_name_;
std::string frame_id_;
std::shared_ptr<ParamListener> param_listener_;
Params params_;

std::unique_ptr<semantic_components::IMUSensor> imu_sensor_;

Expand Down
1 change: 1 addition & 0 deletions imu_sensor_broadcaster/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<buildtool_depend>ament_cmake</buildtool_depend>

<depend>controller_interface</depend>
<depend>generate_parameter_library</depend>
<depend>hardware_interface</depend>
<depend>pluginlib</depend>
<depend>rclcpp</depend>
Expand Down
18 changes: 9 additions & 9 deletions imu_sensor_broadcaster/src/imu_sensor_broadcaster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ controller_interface::CallbackReturn IMUSensorBroadcaster::on_init()
{
try
{
auto_declare<std::string>("sensor_name", "");
auto_declare<std::string>("frame_id", "");
param_listener_ = std::make_shared<ParamListener>(get_node());
params_ = param_listener_->get_params();
}
catch (const std::exception & e)
{
Expand All @@ -43,22 +43,22 @@ controller_interface::CallbackReturn IMUSensorBroadcaster::on_init()
controller_interface::CallbackReturn IMUSensorBroadcaster::on_configure(
const rclcpp_lifecycle::State & /*previous_state*/)
{
sensor_name_ = get_node()->get_parameter("sensor_name").as_string();
if (sensor_name_.empty())

params_ = param_listener_->get_params();
if (params_.sensor_name.empty())
{
RCLCPP_ERROR(get_node()->get_logger(), "'sensor_name' parameter has to be specified.");
return CallbackReturn::ERROR;
}

frame_id_ = get_node()->get_parameter("frame_id").as_string();
if (frame_id_.empty())
if (params_.frame_id.empty())
{
RCLCPP_ERROR(get_node()->get_logger(), "'frame_id' parameter has to be provided.");
return CallbackReturn::ERROR;
}

imu_sensor_ =
std::make_unique<semantic_components::IMUSensor>(semantic_components::IMUSensor(sensor_name_));
imu_sensor_ = std::make_unique<semantic_components::IMUSensor>(
semantic_components::IMUSensor(params_.sensor_name));
try
{
// register ft sensor data publisher
Expand All @@ -75,7 +75,7 @@ controller_interface::CallbackReturn IMUSensorBroadcaster::on_configure(
}

realtime_publisher_->lock();
realtime_publisher_->msg_.header.frame_id = frame_id_;
realtime_publisher_->msg_.header.frame_id = params_.frame_id;
realtime_publisher_->unlock();

RCLCPP_DEBUG(get_node()->get_logger(), "configure successful");
Expand Down
11 changes: 11 additions & 0 deletions imu_sensor_broadcaster/src/imu_sensor_broadcaster_parameters.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
imu_sensor_broadcaster:
sensor_name: {
type: string,
default_value: "",
description: "Name of the sensor used as prefix for interfaces if there are no individual interface names defined.",
}
frame_id: {
type: string,
default_value: "",
description: "Sensor's frame_id in which values are published.",
}

0 comments on commit 0cfa804

Please sign in to comment.