protobuf2ros_conversions.cc
Go to the documentation of this file.
1 /*
2 * Roboception GmbH
3 * Munich, Germany
4 * www.roboception.com
5 *
6 * Copyright (c) 2017 Roboception GmbH
7 * All rights reserved
8 *
9 * Author: Christian Emmerich
10 */
11 
13 
14 #include <boost/make_shared.hpp>
15 
16 namespace rc
17 {
18 ros::Time toRosTime(const roboception::msgs::Time& time)
19 {
20  return ros::Time(time.sec(), time.nsec());
21 }
22 
23 sensor_msgs::ImuPtr toRosImu(const roboception::msgs::Imu& imu)
24 {
25  auto rosImu = boost::make_shared<sensor_msgs::Imu>();
26  rosImu->header.frame_id = "imu";
27  rosImu->header.stamp = toRosTime(imu.timestamp());
28  rosImu->orientation_covariance[0] = -1; // we dont support orientation
29  rosImu->angular_velocity.x = imu.angular_velocity().x();
30  rosImu->angular_velocity.y = imu.angular_velocity().y();
31  rosImu->angular_velocity.z = imu.angular_velocity().z();
32  rosImu->linear_acceleration.x = imu.linear_acceleration().x();
33  rosImu->linear_acceleration.y = imu.linear_acceleration().y();
34  rosImu->linear_acceleration.z = imu.linear_acceleration().z();
35 
36  return rosImu;
37 }
38 
39 geometry_msgs::PosePtr toRosPose(const roboception::msgs::Pose& pose)
40 {
41  auto rosPose = boost::make_shared<geometry_msgs::Pose>();
42  rosPose->position.x = pose.position().x();
43  rosPose->position.y = pose.position().y();
44  rosPose->position.z = pose.position().z();
45  rosPose->orientation.x = pose.orientation().x();
46  rosPose->orientation.y = pose.orientation().y();
47  rosPose->orientation.z = pose.orientation().z();
48  rosPose->orientation.w = pose.orientation().w();
49  return rosPose;
50 }
51 
52 geometry_msgs::PoseStampedPtr toRosPoseStamped(const roboception::msgs::Frame& frame)
53 {
54  auto protoPoseStamped = frame.pose();
55  auto protoPosePose = protoPoseStamped.pose();
56 
57  auto rosPose = boost::make_shared<geometry_msgs::PoseStamped>();
58  rosPose->header.frame_id = frame.parent();
59  rosPose->header.stamp = toRosTime(protoPoseStamped.timestamp());
60  rosPose->pose.position.x = protoPosePose.position().x();
61  rosPose->pose.position.y = protoPosePose.position().y();
62  rosPose->pose.position.z = protoPosePose.position().z();
63  rosPose->pose.orientation.x = protoPosePose.orientation().x();
64  rosPose->pose.orientation.y = protoPosePose.orientation().y();
65  rosPose->pose.orientation.z = protoPosePose.orientation().z();
66  rosPose->pose.orientation.w = protoPosePose.orientation().w();
67  return rosPose;
68 }
69 
70 geometry_msgs::PoseStampedPtr toRosPoseStamped(const roboception::msgs::Pose& pose, const roboception::msgs::Time& time,
71  const std::string& frame_id)
72 {
73  auto rosPose = boost::make_shared<geometry_msgs::PoseStamped>();
74  rosPose->header.frame_id = frame_id;
75  rosPose->header.stamp = toRosTime(time);
76  rosPose->pose.position.x = pose.position().x();
77  rosPose->pose.position.y = pose.position().y();
78  rosPose->pose.position.z = pose.position().z();
79  rosPose->pose.orientation.x = pose.orientation().x();
80  rosPose->pose.orientation.y = pose.orientation().y();
81  rosPose->pose.orientation.z = pose.orientation().z();
82  rosPose->pose.orientation.w = pose.orientation().w();
83  return rosPose;
84 }
85 
86 geometry_msgs::PoseWithCovarianceStampedPtr toRosPoseWithCovarianceStamped(const roboception::msgs::Frame& frame)
87 {
88  auto protoPoseStamped = frame.pose();
89  auto protoPosePose = protoPoseStamped.pose();
90  auto protoCov = protoPosePose.covariance();
91 
92  auto rosPose = boost::make_shared<geometry_msgs::PoseWithCovarianceStamped>();
93  rosPose->header.frame_id = frame.parent();
94  rosPose->header.stamp = toRosTime(protoPoseStamped.timestamp());
95  rosPose->pose.pose.position.x = protoPosePose.position().x();
96  rosPose->pose.pose.position.y = protoPosePose.position().y();
97  rosPose->pose.pose.position.z = protoPosePose.position().z();
98  rosPose->pose.pose.orientation.x = protoPosePose.orientation().x();
99  rosPose->pose.pose.orientation.y = protoPosePose.orientation().y();
100  rosPose->pose.pose.orientation.z = protoPosePose.orientation().z();
101  rosPose->pose.pose.orientation.w = protoPosePose.orientation().w();
102  for (int i = 0; i < protoCov.size(); i++)
103  {
104  rosPose->pose.covariance[i] = protoCov.Get(i);
105  }
106  return rosPose;
107 }
108 
109 tf::Transform toRosTfTransform(const roboception::msgs::Pose& pose)
110 {
111  tf::Transform transform;
112  transform.setOrigin(tf::Vector3(pose.position().x(), pose.position().y(), pose.position().z()));
113  transform.setRotation(
114  tf::Quaternion(pose.orientation().x(), pose.orientation().y(), pose.orientation().z(), pose.orientation().w()));
115  return transform;
116 }
117 
118 tf::StampedTransform toRosTfStampedTransform(const roboception::msgs::Frame& frame)
119 {
120  return tf::StampedTransform(toRosTfTransform(frame.pose().pose()), toRosTime(frame.pose().timestamp()),
121  frame.parent(), frame.name());
122 }
123 }
geometry_msgs::PoseStampedPtr toRosPoseStamped(const roboception::msgs::Frame &frame)
TFSIMD_FORCE_INLINE void setRotation(const Quaternion &q)
tf::Transform toRosTfTransform(const roboception::msgs::Pose &pose)
sensor_msgs::ImuPtr toRosImu(const roboception::msgs::Imu &imu)
geometry_msgs::PosePtr toRosPose(const roboception::msgs::Pose &pose)
ros::Time toRosTime(const roboception::msgs::Time &time)
geometry_msgs::PoseWithCovarianceStampedPtr toRosPoseWithCovarianceStamped(const roboception::msgs::Frame &frame)
TFSIMD_FORCE_INLINE void setOrigin(const Vector3 &origin)
tf::StampedTransform toRosTfStampedTransform(const roboception::msgs::Frame &frame)


rc_visard_driver
Author(s): Heiko Hirschmueller , Christian Emmerich , Felix Ruess
autogenerated on Sat Feb 13 2021 03:42:55