conversions.py
Go to the documentation of this file.
1 from geometry_msgs.msg import Pose, Pose2D, Quaternion, Point
2 from nav_2d_msgs.msg import Twist2D, Path2D, Pose2DStamped, Point2D
3 from nav_msgs.msg import Path
4 from geometry_msgs.msg import Twist, PoseStamped
5 
6 try:
7  from tf.transformations import euler_from_quaternion, quaternion_from_euler
8 
9  def get_yaw(orientation):
10  rpy = euler_from_quaternion((orientation.x, orientation.y, orientation.z, orientation.w))
11  return rpy[2]
12 
13  def from_yaw(yaw):
14  q = Quaternion()
15  q.x, q.y, q.z, q.w = quaternion_from_euler(0, 0, yaw)
16  return q
17 except ImportError:
18  from math import sin, cos, atan2
19  # From https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
20 
21  def from_yaw(yaw):
22  q = Quaternion()
23  q.z = sin(yaw * 0.5)
24  q.w = cos(yaw * 0.5)
25  return q
26 
27  def get_yaw(q):
28  siny_cosp = +2.0 * (q.w * q.z + q.x * q.y)
29  cosy_cosp = +1.0 - 2.0 * (q.y * q.y + q.z * q.z)
30  return atan2(siny_cosp, cosy_cosp)
31 
32 
33 def twist2Dto3D(cmd_vel_2d):
34  cmd_vel = Twist()
35  cmd_vel.linear.x = cmd_vel_2d.x
36  cmd_vel.linear.y = cmd_vel_2d.y
37  cmd_vel.angular.z = cmd_vel_2d.theta
38  return cmd_vel
39 
40 
41 def twist3Dto2D(cmd_vel):
42  cmd_vel_2d = Twist2D()
43  cmd_vel_2d.x = cmd_vel.linear.x
44  cmd_vel_2d.y = cmd_vel.linear.y
45  cmd_vel_2d.theta = cmd_vel.angular.z
46  return cmd_vel_2d
47 
48 
49 def pointToPoint3D(point_2d):
50  point = Point()
51  point.x = point_2d.x
52  point.y = point_2d.y
53  return point
54 
55 
56 def pointToPoint2D(point):
57  point_2d = Point2D()
58  point_2d.x = point.x
59  point_2d.y = point.y
60  return point_2d
61 
62 
63 def poseToPose2D(pose):
64  pose2d = Pose2D()
65  pose2d.x = pose.position.x
66  pose2d.y = pose.position.y
67  pose2d.theta = get_yaw(pose.orientation)
68  return pose2d
69 
70 
72  pose2d = Pose2DStamped()
73  pose2d.header = pose.header
74  pose2d.pose = poseToPose2D(pose.pose)
75  return pose2d
76 
77 
78 def poseToPose2DStamped(pose, frame, stamp):
79  pose2d = Pose2DStamped()
80  pose2d.header.frame_id = frame
81  pose2d.header.stamp = stamp
82  pose2d.pose = poseToPose2D(pose)
83  return pose2d
84 
85 
86 def pose2DToPose(pose2d):
87  pose = Pose()
88  pose.position.x = pose2d.x
89  pose.position.y = pose2d.y
90  pose.orientation = from_yaw(pose2d.theta)
91  return pose
92 
93 
95  pose = PoseStamped()
96  pose.header = pose2d.header
97  pose.pose = pose2DToPose(pose2d.pose)
98  return pose
99 
100 
101 def pose2DToPoseStamped(pose2d, frame, stamp):
102  pose = PoseStamped()
103  pose.header.frame_id = frame
104  pose.header.stamp = stamp
105  pose.pose.position.x = pose2d.x
106  pose.pose.position.y = pose2d.y
107  pose.pose.orientation = from_yaw(pose2d.theta)
108  return pose
109 
110 
111 def pathToPath2D(path):
112  path2d = Path2D()
113  if len(path.poses) == 0:
114  return path
115  path2d.header.frame_id = path.poses[0].header.frame_id
116  path2d.header.stamp = path.poses[0].header.stamp
117  for pose in path.poses:
118  stamped = poseStampedToPose2DStamped(pose)
119  path2d.poses.append(stamped.pose)
120  return path2d
121 
122 
123 def path2DToPath(path2d):
124  path = Path()
125  path.header = path2d.header
126  for pose2d in path2d.poses:
127  pose = PoseStamped()
128  pose.header = path2d.header
129  pose.pose = pose2DToPose(pose2d)
130  path.poses.append(pose)
131  return path
nav_2d_utils.conversions.pointToPoint3D
def pointToPoint3D(point_2d)
Definition: conversions.py:49
nav_2d_utils.conversions.from_yaw
def from_yaw(yaw)
Definition: conversions.py:13
nav_2d_utils.conversions.poseToPose2D
def poseToPose2D(pose)
Definition: conversions.py:63
nav_2d_utils.conversions.poseStampedToPose2DStamped
def poseStampedToPose2DStamped(pose)
Definition: conversions.py:71
nav_2d_utils.conversions.twist2Dto3D
def twist2Dto3D(cmd_vel_2d)
Definition: conversions.py:33
nav_2d_utils.conversions.get_yaw
def get_yaw(orientation)
Definition: conversions.py:9
nav_2d_utils.conversions.pose2DToPose
def pose2DToPose(pose2d)
Definition: conversions.py:86
nav_2d_utils.conversions.pose2DToPoseStamped
def pose2DToPoseStamped(pose2d, frame, stamp)
Definition: conversions.py:101
nav_2d_utils.conversions.poseToPose2DStamped
def poseToPose2DStamped(pose, frame, stamp)
Definition: conversions.py:78
nav_2d_utils.conversions.pose2DStampedToPoseStamped
def pose2DStampedToPoseStamped(pose2d)
Definition: conversions.py:94
nav_2d_utils.conversions.path2DToPath
def path2DToPath(path2d)
Definition: conversions.py:123
nav_2d_utils.conversions.pathToPath2D
def pathToPath2D(path)
Definition: conversions.py:111
nav_2d_utils.conversions.pointToPoint2D
def pointToPoint2D(point)
Definition: conversions.py:56
nav_2d_utils.conversions.twist3Dto2D
def twist3Dto2D(cmd_vel)
Definition: conversions.py:41


nav_2d_utils
Author(s):
autogenerated on Sun May 18 2025 02:47:23