15 #ifndef NAV2_ROS_COMMON__TF2_FACTORIES_HPP_
16 #define NAV2_ROS_COMMON__TF2_FACTORIES_HPP_
21 #include "rclcpp/version.h"
22 #include "rclcpp/rclcpp.hpp"
24 #include "tf2_ros/buffer.hpp"
25 #include "tf2_ros/create_timer_ros.hpp"
26 #include "tf2_ros/transform_listener.hpp"
27 #include "tf2_ros/transform_broadcaster.hpp"
28 #include "tf2_ros/static_transform_broadcaster.hpp"
29 #include "tf2_ros/message_filter.hpp"
37 using TransformBuffer = tf2_ros::Buffer;
44 using tf2_ros::TransformListener::TransformListener;
45 using SharedPtr = std::shared_ptr<TransformListener>;
53 using tf2_ros::TransformBroadcaster::TransformBroadcaster;
54 using SharedPtr = std::shared_ptr<TransformBroadcaster>;
62 using tf2_ros::StaticTransformBroadcaster::StaticTransformBroadcaster;
63 using SharedPtr = std::shared_ptr<StaticTransformBroadcaster>;
69 template<
typename MessageT>
72 using tf2_ros::MessageFilter<MessageT>::MessageFilter;
73 using SharedPtr = std::shared_ptr<MessageFilter<MessageT>>;
82 template<
typename NodeT>
83 inline nav2::TransformBuffer::SharedPtr create_transform_buffer(
85 rclcpp::CallbackGroup::SharedPtr callback_group =
nullptr)
87 auto buffer = std::make_shared<nav2::TransformBuffer>(node->get_clock());
88 #if RCLCPP_VERSION_GTE(30, 0, 0)
89 auto timer_interface = std::make_shared<tf2_ros::CreateTimerROS>(*node, callback_group);
91 auto timer_interface = std::make_shared<tf2_ros::CreateTimerROS>(
92 node->get_node_base_interface(), node->get_node_timers_interface(), callback_group);
94 buffer->setCreateTimerInterface(timer_interface);
103 template<
typename NodeT>
104 inline nav2::TransformBroadcaster::SharedPtr create_transform_broadcaster(
107 #if RCLCPP_VERSION_GTE(30, 0, 0)
108 return std::make_shared<nav2::TransformBroadcaster>(*node);
110 return std::make_shared<nav2::TransformBroadcaster>(node);
119 template<
typename NodeT>
120 inline nav2::StaticTransformBroadcaster::SharedPtr create_static_transform_broadcaster(
123 #if RCLCPP_VERSION_GTE(30, 0, 0)
124 return std::make_shared<nav2::StaticTransformBroadcaster>(*node);
126 return std::make_shared<nav2::StaticTransformBroadcaster>(node);
137 template<
typename NodeT>
138 inline nav2::TransformListener::SharedPtr create_transform_listener(
139 nav2::TransformBuffer & buffer,
const NodeT & node,
bool spin_thread =
true)
141 #if RCLCPP_VERSION_GTE(30, 0, 0)
142 return std::make_shared<nav2::TransformListener>(buffer, *node, spin_thread);
144 return std::make_shared<nav2::TransformListener>(buffer, node, spin_thread);
153 inline nav2::TransformListener::SharedPtr create_transform_listener(
154 nav2::TransformBuffer & buffer)
156 return std::make_shared<nav2::TransformListener>(buffer);
169 template<
typename MessageT,
typename SubscriberT,
typename NodeT>
170 inline typename nav2::MessageFilter<MessageT>::SharedPtr create_message_filter(
171 SubscriberT & sub, nav2::TransformBuffer & buffer,
172 const std::string & target_frame, uint32_t queue_size,
173 const NodeT & node, tf2::Duration tolerance)
175 #if RCLCPP_VERSION_GTE(30, 0, 0)
176 return std::make_shared<nav2::MessageFilter<MessageT>>(
177 sub, buffer, target_frame, queue_size, *node, tolerance);
179 return std::make_shared<nav2::MessageFilter<MessageT>>(
180 sub, buffer, target_frame, queue_size,
181 node->get_node_logging_interface(), node->get_node_clock_interface(), tolerance);
Nav2 type wrapper for tf2_ros::MessageFilter.