core.h
Go to the documentation of this file.
1 #pragma once
2 
4 
5 #ifdef ROS2 /**********************************************************************************************************/
6 #include "rclcpp/rclcpp.hpp"
7 
8 #include <experimental/optional>
9 
10 namespace ensenso
11 {
12 namespace std
13 {
14 using ::std::bind;
15 using ::std::function;
16 using ::std::make_shared;
18 using ::std::experimental::optional;
19 } // namespace std
20 
21 namespace ros
22 {
23 template <typename T>
24 using Publisher = typename ::rclcpp::Publisher<T>::SharedPtr;
25 
26 template <typename T>
27 using Subscription = typename ::rclcpp::Subscription<T>::SharedPtr;
28 
29 template <typename T>
30 inline ensenso::ros::Publisher<T> create_publisher(ensenso::ros::NodeHandle& nh, ::std::string const& topic_name,
31  int queue_size)
32 {
33  return nh->node()->create_publisher<T>(topic_name, queue_size);
34 }
35 
36 template <typename T, typename C, typename M>
37 inline ensenso::ros::Subscription<T> create_subscription(ensenso::ros::NodeHandle& nh, ::std::string const& topic_name,
38  int queue_size, void (C::*callback)(M), C* object)
39 {
40  return nh->node()->create_subscription<T>(topic_name, queue_size,
41  ::std::bind(callback, object, ::std::placeholders::_1));
42 }
43 
44 inline ::std::string get_node_name(NodeHandle& nh)
45 {
46  return ::std::string(nh->get_base_interface()->get_name());
47 }
48 
49 template <typename T>
50 inline bool get_parameter(NodeHandle& nh, const char* name, T& parameter)
51 {
52  return nh->node()->get_parameter(name, parameter);
53 }
54 
55 template <typename T>
56 inline bool get_parameter(NodeHandle& nh, ::std::string const& name, T& parameter)
57 {
58  return nh->node()->get_parameter(name, parameter);
59 }
60 
61 inline bool ok()
62 {
63  return rclcpp::ok();
64 }
65 } // namespace ros
66 } // namespace ensenso
67 
68 #include <rcpputils/asserts.hpp>
69 #define ENSENSO_ASSERT(cond) rcpputils::assert_true(cond)
70 
71 #else /*****ROS1*******************************************************************************************************/
72 #include <boost/optional.hpp>
73 #include <boost/bind.hpp>
74 #include <boost/function.hpp>
75 #include <boost/make_shared.hpp>
76 #include <memory>
77 
78 #include <ros/ros.h>
79 namespace ensenso
80 {
81 namespace std
82 {
83 using boost::bind;
84 using boost::function;
85 using boost::make_shared;
86 using boost::optional;
87 
88 template <typename T>
90 
91 template <typename T, typename... Args>
92 ::std::unique_ptr<T> make_unique(Args&&... args)
93 {
94  return ::std::unique_ptr<T>(new T(::std::forward<Args>(args)...));
95 }
96 
97 /* Source for do_release and to_std:
98  * https://stackoverflow.com/questions/6326757/conversion-from-boostshared-ptr-to-stdshared-ptr
99  */
100 template <typename T>
101 void do_release(typename boost::shared_ptr<T> const&, T*)
102 {
103 }
104 
105 template <typename T>
106 typename std::shared_ptr<T> to_std(typename boost::shared_ptr<T> const& p)
107 {
108  return std::shared_ptr<T>(p.get(), boost::bind(&do_release<T>, p, _1));
109 }
110 } // namespace std
111 
112 namespace ros
113 {
114 template <typename T>
115 using Publisher = ::std::unique_ptr< ::ros::Publisher>;
116 
117 template <typename T>
119 
120 template <typename T>
121 inline ensenso::ros::Publisher<T> create_publisher(ensenso::ros::NodeHandle& nh, ::std::string const& topic_name,
122  int queue_size)
123 {
124  return ensenso::std::make_unique< ::ros::Publisher>(nh.advertise<T>(topic_name, queue_size));
125 }
126 
127 template <typename T, typename C, typename M>
129  int queue_size, void (C::*callback)(M), C* object)
130 {
131  return nh.subscribe(topic_name, queue_size, callback, object);
132 }
133 
134 inline ::std::string get_node_name(NodeHandle& nh)
135 {
136  (void)nh;
137  return ::ros::this_node::getName();
138 }
139 
140 template <typename T>
141 inline bool get_parameter(NodeHandle& nh, const char* name, T& parameter)
142 {
143  return nh.getParam(name, parameter);
144 }
145 
146 template <typename T>
147 inline bool get_parameter(NodeHandle& nh, const ::std::string& name, T& parameter)
148 {
149  return nh.getParam(name, parameter);
150 }
151 
152 inline bool ok()
153 {
154  return ros::ok();
155 }
156 } // namespace ros
157 } // namespace ensenso
158 
159 #define ENSENSO_ASSERT(cond) ROS_ASSERT(cond)
160 #endif
::std::unique_ptr< T > make_unique(Args &&... args)
Definition: core.h:92
::ros::Subscriber Subscription
Definition: core.h:118
ensenso::ros::Publisher< T > create_publisher(ensenso::ros::NodeHandle &nh, ::std::string const &topic_name, int queue_size)
Definition: core.h:121
::std::shared_ptr< T > shared_ptr
Definition: core.h:89
::ros::NodeHandle NodeHandle
Definition: node.h:214
bool get_parameter(NodeHandle &nh, const ::std::string &name, T &parameter)
Definition: core.h:147
bool ok()
Definition: core.h:152
::std::unique_ptr< ::ros::Publisher > Publisher
Definition: core.h:115
std::shared_ptr< T > to_std(typename boost::shared_ptr< T > const &p)
Definition: core.h:106
inline ::std::string get_node_name(NodeHandle &nh)
Definition: core.h:134
ensenso::ros::Subscription< T > create_subscription(ensenso::ros::NodeHandle &nh, ::std::string const &topic_name, int queue_size, void(C::*callback)(M), C *object)
Definition: core.h:128
void do_release(typename boost::shared_ptr< T > const &, T *)
Definition: core.h:101


ensenso_camera
Author(s): Ensenso
autogenerated on Sat Jun 3 2023 02:17:04