Fixposition SDK 0.0.0-heads/main-0-g97f6014
Collection of c++ libraries and apps for use with Fixposition products on Linux
Loading...
Searching...
No Matches
ros1.hpp
Go to the documentation of this file.
1/**
2 * \verbatim
3 * ___ ___
4 * \ \ / /
5 * \ \/ / Copyright (c) Fixposition AG
6 * / /\ \ License: see the LICENSE file
7 * /__/ \__\
8 * \endverbatim
9 *
10 * @file
11 * @brief Fixposition SDK: ROS2 types conversion from ROS1
12 *
13 * @page FPSDK_ROS2_ROS1 ROS2 types conversion from ROS1
14 *
15 * **API**: fpsdk_ros2/ros1.hpp and fpsdk::ros2::ros1
16 *
17 */
18#ifndef __FPSDK_ROS2_ROS1_HPP__
19#define __FPSDK_ROS2_ROS1_HPP__
20
21/* LIBC/STL */
22#include <algorithm>
23
24/* EXTERNAL */
25#include <fpsdk_ros2/ext/msgs.hpp>
26
27/* Fixposition SDK */
28#include <fpsdk_common/ros1.hpp>
29
30/* PACKAGE */
31
32namespace fpsdk {
33namespace ros2 {
34/**
35 * @brief ROS2 types conversion from ROS1
36 */
37namespace ros1 {
38/* ****************************************************************************************************************** */
39#ifdef _DOXYGEN_
40
41// Dummy documentation
42/**
43 * @brief Convert ROS1 message to ROS2 message
44 *
45 * Several conversions in this form are implemented. See the source code for details.
46 *
47 * @tparam Ros1MsgT ROS1 message type
48 * @tparam Ros2MsgT ROS2 message type
49 * @param[in] ros1 ROS1 message
50 * @param[out] ros2 ROS2 message
51 */
52template <typename Ros1MsgT, typename Ros2MsgT>
53void Ros1ToRos2(Ros1MsgT& ros1, Ros2MsgT& ros2);
54
55#else
56
57inline void Ros1ToRos2(const ros::Time& ros1, builtin_interfaces::msg::Time& ros2)
58{
59 ros2.sec = ros1.sec;
60 ros2.nanosec = ros1.nsec;
61}
62
63// ---------------------------------------------------------------------------------------------------------------------
64
65inline void Ros1ToRos2(const boost::array<double, 9>& ros1, std::array<double, 9>& ros2)
66{
67 for (std::size_t ix = 0; ix < 9; ix++) {
68 ros2[ix] = ros1[ix];
69 }
70}
71
72inline void Ros1ToRos2(const boost::array<double, 36>& ros1, std::array<double, 36>& ros2)
73{
74 for (std::size_t ix = 0; ix < 36; ix++) {
75 ros2[ix] = ros1[ix];
76 }
77}
78
79// ---------------------------------------------------------------------------------------------------------------------
80
81inline void Ros1ToRos2(const std_msgs::Header& ros1, std_msgs::msg::Header& ros2)
82{
83 ros2.frame_id = ros1.frame_id;
84 Ros1ToRos2(ros1.stamp, ros2.stamp);
85}
86
87// ---------------------------------------------------------------------------------------------------------------------
88
89inline void Ros1ToRos2(const geometry_msgs::Quaternion& ros1, geometry_msgs::msg::Quaternion& ros2)
90{
91 ros2.x = ros1.x;
92 ros2.y = ros1.y;
93 ros2.z = ros1.z;
94 ros2.w = ros1.w;
95}
96
97inline void Ros1ToRos2(const geometry_msgs::Vector3& ros1, geometry_msgs::msg::Vector3& ros2)
98{
99 ros2.x = ros1.x;
100 ros2.y = ros1.y;
101 ros2.z = ros1.z;
102}
103
104inline void Ros1ToRos2(const geometry_msgs::Point& ros1, geometry_msgs::msg::Point& ros2)
105{
106 ros2.x = ros1.x;
107 ros2.y = ros1.y;
108 ros2.z = ros1.z;
109}
110
111inline void Ros1ToRos2(const geometry_msgs::Pose& ros1, geometry_msgs::msg::Pose& ros2)
112{
113 Ros1ToRos2(ros1.position, ros2.position);
114 Ros1ToRos2(ros1.orientation, ros2.orientation);
115}
116
117inline void Ros1ToRos2(const geometry_msgs::Twist& ros1, geometry_msgs::msg::Twist& ros2)
118{
119 Ros1ToRos2(ros1.linear, ros2.linear);
120 Ros1ToRos2(ros1.angular, ros2.angular);
121}
122
123inline void Ros1ToRos2(const geometry_msgs::PoseWithCovariance& ros1, geometry_msgs::msg::PoseWithCovariance& ros2)
124{
125 Ros1ToRos2(ros1.pose, ros2.pose);
126 Ros1ToRos2(ros1.covariance, ros2.covariance);
127}
128
129inline void Ros1ToRos2(const geometry_msgs::TwistWithCovariance& ros1, geometry_msgs::msg::TwistWithCovariance& ros2)
130{
131 Ros1ToRos2(ros1.twist, ros2.twist);
132 Ros1ToRos2(ros1.covariance, ros2.covariance);
133}
134
135inline void Ros1ToRos2(const geometry_msgs::Transform& ros1, geometry_msgs::msg::Transform& ros2)
136{
137 Ros1ToRos2(ros1.translation, ros2.translation);
138 Ros1ToRos2(ros1.rotation, ros2.rotation);
139}
140
141inline void Ros1ToRos2(const geometry_msgs::TransformStamped& ros1, geometry_msgs::msg::TransformStamped& ros2)
142{
143 Ros1ToRos2(ros1.header, ros2.header);
144 ros2.child_frame_id = ros1.child_frame_id;
145 Ros1ToRos2(ros1.transform, ros2.transform);
146}
147
148// ---------------------------------------------------------------------------------------------------------------------
149
150inline void Ros1ToRos2(const sensor_msgs::Imu& ros1, sensor_msgs::msg::Imu& ros2)
151{
152 Ros1ToRos2(ros1.header, ros2.header);
153 Ros1ToRos2(ros1.orientation, ros2.orientation);
154 Ros1ToRos2(ros1.orientation_covariance, ros2.orientation_covariance);
155 Ros1ToRos2(ros1.angular_velocity, ros2.angular_velocity);
156 Ros1ToRos2(ros1.angular_velocity_covariance, ros2.angular_velocity_covariance);
157 Ros1ToRos2(ros1.linear_acceleration, ros2.linear_acceleration);
158 Ros1ToRos2(ros1.linear_acceleration_covariance, ros2.linear_acceleration_covariance);
159}
160
161inline void Ros1ToRos2(const sensor_msgs::Temperature& ros1, sensor_msgs::msg::Temperature& ros2)
162{
163 Ros1ToRos2(ros1.header, ros2.header);
164 ros2.temperature = ros1.temperature;
165 ros2.variance = ros1.variance;
166}
167
168inline void Ros1ToRos2(const sensor_msgs::Image& ros1, sensor_msgs::msg::Image& ros2)
169{
170 Ros1ToRos2(ros1.header, ros2.header);
171 ros2.height = ros1.height;
172 ros2.width = ros1.width;
173 ros2.encoding = ros1.encoding;
174 ros2.step = ros1.step;
175 ros2.data = ros1.data;
176}
177
178// ---------------------------------------------------------------------------------------------------------------------
179
180inline void Ros1ToRos2(const nav_msgs::Odometry& ros1, nav_msgs::msg::Odometry& ros2)
181{
182 Ros1ToRos2(ros1.header, ros2.header);
183 ros2.child_frame_id = ros1.child_frame_id;
184 Ros1ToRos2(ros1.pose, ros2.pose);
185 Ros1ToRos2(ros1.twist, ros2.twist);
186}
187
188// ---------------------------------------------------------------------------------------------------------------------
189
190inline void Ros1ToRos2(const tf2_msgs::TFMessage& ros1, tf2_msgs::msg::TFMessage& ros2)
191{
192 for (auto& tf_ros1 : ros1.transforms) {
193 geometry_msgs::msg::TransformStamped tf_ros2;
194 Ros1ToRos2(tf_ros1, tf_ros2);
195 ros2.transforms.push_back(std::move(tf_ros2));
196 }
197}
198
199#endif // !_DOXYGEN_
200/* ****************************************************************************************************************** */
201} // namespace ros1
202} // namespace ros2
203} // namespace fpsdk
204#endif // __FPSDK_ROS2_ROS1_HPP__
Fixposition SDK: ROS1 types and utils.
ROS2 types conversion from ROS1.
Definition ros1.hpp:37
void Ros1ToRos2(Ros1MsgT &ros1, Ros2MsgT &ros2)
Convert ROS1 message to ROS2 message.
Fixposition SDK: ROS2 library.
Definition doc.hpp:21
Fixposition SDK.