From 0db5c095c67dd0420468c3843fd6285d6be0acca Mon Sep 17 00:00:00 2001 From: eharlan <eharlan@uni-bremen.de> Date: Tue, 9 May 2023 09:41:46 +0200 Subject: [PATCH] a --- robomaster_pi/conn_odom.py | 79 +++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/robomaster_pi/conn_odom.py b/robomaster_pi/conn_odom.py index 958270d..7d85a93 100644 --- a/robomaster_pi/conn_odom.py +++ b/robomaster_pi/conn_odom.py @@ -1,48 +1,32 @@ -import asyncio -import math -import numpy as np import rclpy -from nav_msgs.msg import Odometry from rclpy.node import Node +from nav_msgs.msg import Odometry +import math +import numpy as np import robomaster from robomaster import robot - class OdometryPublisher(Node): - + def __init__(self): super().__init__('odometry_publisher') self.publisher_ = self.create_publisher(Odometry, 'odometry', 10) + ep_robot = robot.Robot() + ep_robot.initialize(conn_type="rndis") + ep_chassis = ep_robot.chassis + ep_chassis.sub_position(freq=10, callback=self.sub_position_handler) self.x = 0 self.y = 0 self.z = 0 - def quaternion_from_euler(self, ai, aj, ak): - ai /= 2.0 - aj /= 2.0 - ak /= 2.0 - ci = math.cos(ai) - si = math.sin(ai) - cj = math.cos(aj) - sj = math.sin(aj) - ck = math.cos(ak) - sk = math.sin(ak) - cc = ci * ck - cs = ci * sk - sc = si * ck - ss = si * sk - - q = np.empty((4,)) - q[0] = cj * sc - sj * cs - q[1] = cj * ss + sj * cc - q[2] = cj * cs - sj * sc - q[3] = cj * cc + sj * ss - - return q + def sub_position_handler(self, position_info): + self.x, self.y, self.z = position_info + self.publish_odometry() + print("ok") def publish_odometry(self): - print("publishing odometry") - q = self.quaternion_from_euler(0, 0, -self.z * math.pi / 180) + print("ja") + q = self.quaternion_from_euler(0, 0, -self.z* math.pi/180) msg = Odometry() msg.header.stamp = self.get_clock().now().to_msg() msg.pose.pose.position.x = self.x @@ -54,27 +38,36 @@ class OdometryPublisher(Node): msg.pose.pose.orientation.w = 0 self.publisher_.publish(msg) - async def sub_position_handler(self, position_info): - self.x = position_info.x - self.y = position_info.y - self.z = position_info.z - print("chassis position: x:{0}, y:{1}, z:{2}".format(self.x, self.y, self.z)) - self.publish_odometry() + def quaternion_from_euler(self, ai, aj, ak): + ai /= 2.0 + aj /= 2.0 + ak /= 2.0 + ci = math.cos(ai) + si = math.sin(ai) + cj = math.cos(aj) + sj = math.sin(aj) + ck = math.cos(ak) + sk = math.sin(ak) + cc = ci*ck + cs = ci*sk + sc = si*ck + ss = si*sk - async def start(self): - ep_robot = robot.Robot() - ep_robot.initialize(conn_type="rndis") - ep_chassis = ep_robot.chassis - await ep_chassis.sub_position(freq=10, callback=self.sub_position_handler) + q = np.empty((4, )) + q[0] = cj*sc - sj*cs + q[1] = cj*ss + sj*cc + q[2] = cj*cs - sj*sc + q[3] = cj*cc + sj*ss + + return q def main(args=None): rclpy.init(args=args) node = OdometryPublisher() - asyncio.run(node.start()) + rclpy.spin(node) node.destroy_node() rclpy.shutdown() - if __name__ == '__main__': main() \ No newline at end of file -- GitLab