diff --git a/robomaster_pi/__pycache__/conn_odom.cpython-38.pyc b/robomaster_pi/__pycache__/conn_odom.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4fe185aeeeace4ac346957341d9d85f6aa7b8357
Binary files /dev/null and b/robomaster_pi/__pycache__/conn_odom.cpython-38.pyc differ
diff --git a/robomaster_pi/__pycache__/connection.cpython-38.pyc b/robomaster_pi/__pycache__/connection.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..91b94c78b37487969761e2ff0570898e1485dfe1
Binary files /dev/null and b/robomaster_pi/__pycache__/connection.cpython-38.pyc differ
diff --git a/robomaster_pi/__pycache__/robot_ros_odom.cpython-38.pyc b/robomaster_pi/__pycache__/robot_ros_odom.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..760245cbfb7632722b06e3d96968b1b219c6a731
Binary files /dev/null and b/robomaster_pi/__pycache__/robot_ros_odom.cpython-38.pyc differ
diff --git a/robomaster_pi/conn_odom.py b/robomaster_pi/conn_odom.py
index 7fe1a2d099a3be6136c035ad7b40de025339d163..b5616d63d1a22523798516c34a0de2ce8db02bb8 100644
--- a/robomaster_pi/conn_odom.py
+++ b/robomaster_pi/conn_odom.py
@@ -5,39 +5,82 @@ import math
 import numpy as np
 import robomaster
 from robomaster import robot
+import tf2_ros
+import tf2_geometry_msgs
+from geometry_msgs.msg import TransformStamped, Quaternion
 
 class OdometryPublisher(Node):
+    zWinkel = 0.0
     
     def __init__(self):
         super().__init__('odometry_publisher')
         self.publisher_ = self.create_publisher(Odometry, 'odometry', 10)
+        self.tf_broadcaster_ = tf2_ros.StaticTransformBroadcaster(self)
+        self.transform_stamped_ = TransformStamped()
+        self.transform_stamped_.header.frame_id = "odom"
+        self.transform_stamped_.child_frame_id = "base_footprint"
         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
+        ep_chassis.sub_position(freq=50, callback=self.sub_position_handler)
+        ep_chassis.sub_imu(freq=50, callback=self.sub_imu_info_handler)
+        
+
+    def sub_imu_info_handler(self, imu_info):
+        acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z = imu_info
+        if(self.zWinkel + (gyro_z /50)* (180 / math.pi) < 195 and self.zWinkel + (gyro_z /50)* (180 / math.pi) >= -165):
+            self.zWinkel = self.zWinkel + (gyro_z /50)* (180 / math.pi)
+        else:
+            if(self.zWinkel + (gyro_z /50)* (180 / math.pi) > 195):
+                self.zWinkel = self.zWinkel + (gyro_z /50)* (180 / math.pi) - 360
+            if(self.zWinkel + (gyro_z /50)* (180 / math.pi) <= -165):
+                self.zWinkel = self.zWinkel + (gyro_z /50)* (180 / math.pi) + 360
+        
+
+            
+        
+
+        
 
     def sub_position_handler(self, position_info):
         self.x, self.y, self.z = position_info
-        print("chassis position: x:{0}, y:{1}, z:{2}".format(self.x, self.y, self.z))
+        print("chassis position: x:{0}, y:{1}, z:{2}".format(self.x, self.y, self.zWinkel))
         self.publish_odometry()
+        self.publish_transform()
+ 
 
     def publish_odometry(self):
-        print("ja")
-        q = self.quaternion_from_euler(0, 0, -self.z* math.pi/180)
+        
+        q = self.quaternion_from_euler(0, 0, -self.zWinkel / (180 / math.pi))
         msg = Odometry()
         msg.header.stamp = self.get_clock().now().to_msg()
-        msg.pose.pose.position.x = self.x
+        msg.pose.pose.position.x = -self.x
         msg.pose.pose.position.y = self.y
-        msg.pose.pose.position.z = 0
-        msg.pose.pose.orientation.x = 0
-        msg.pose.pose.orientation.y = 0
+        msg.pose.pose.position.z = 0.0
+        msg.pose.pose.orientation.x = 0.0
+        msg.pose.pose.orientation.y = 0.0
         msg.pose.pose.orientation.z = q[2]
-        msg.pose.pose.orientation.w = 0
+        msg.pose.pose.orientation.w = 0.0
+        
         self.publisher_.publish(msg)
 
+    def publish_transform(self):
+        self.transform_stamped_.header.stamp = self.get_clock().now().to_msg()
+        self.transform_stamped_.transform.translation.x = -self.x
+        self.transform_stamped_.transform.translation.y = self.y
+        self.transform_stamped_.transform.translation.z = 0.0
+        q = self.quaternion_from_euler(0.0, 0.0, -self.zWinkel / (180 / math.pi))
+        
+        self.transform_stamped_.transform.rotation.x = q[0]
+        self.transform_stamped_.transform.rotation.y = q[1]
+        self.transform_stamped_.transform.rotation.z = q[2]
+        self.transform_stamped_.transform.rotation.w = q[3]
+
+        
+        self.tf_broadcaster_.sendTransform(self.transform_stamped_)
+        
+
     def quaternion_from_euler(self, ai, aj, ak):
         ai /= 2.0
         aj /= 2.0
diff --git a/robomaster_pi/robot_ros_odom.py b/robomaster_pi/robot_ros_odom.py
index c68e32358b8e9b05ed90b9ad24bae910786620d0..ffc35d6d8ee4777ab233170d2423100851a3b8bf 100644
--- a/robomaster_pi/robot_ros_odom.py
+++ b/robomaster_pi/robot_ros_odom.py
@@ -1,19 +1,25 @@
-import robomaster
-from robomaster import robot
 import math
 import time
+from geometry_msgs.msg import TransformStamped
+
 import numpy as np
 import rclpy
 from rclpy.node import Node
 from tf2_ros import TransformBroadcaster
-from geometry_msgs.msg import TransformStamped
-from geometry_msgs.msg import Twist
-from tf2_ros import TransformBroadcaster
 
 
 from rclpy.node import Node
-x, y, z = 0, 0, 0
 
+ser = serial.Serial()
+ser.port = '/dev/ttyS0'
+ser.baudrate = 115200
+ser.bytesize = serial.EIGHTBITS
+ser.stopbits = serial.STOPBITS_ONE
+ser.parity = serial.PARITY_NONE
+ser.timeout = 0.2
+ser.open()
+ser.write(("command;").encode('utf-8'))
+leer = ser.readall()
 
 def quaternion_from_euler(ai, aj, ak):
     ai /= 2.0
@@ -39,62 +45,34 @@ def quaternion_from_euler(ai, aj, ak):
     return q
 
 class Robomaster_odom(Node):
+    def __init__(self):
 
-    def sub_position_handler(position_info):
-        print("handler")
-        tf_broadcaster = TransformBroadcaster()
-        t = TransformStamped()
-        t.header.stampep_chassis = time.get_clock().now().to_msg()
-        t.header.frame_id = 'odom'
-        t.child_frame_id = "base_footprint"
-        t.transform.translation.x = position_info.x
-        t.transform.translation.y = -position_info.y
-        t.transform.translation.z = 0.0
-        q = quaternion_from_euler(0, 0, -position_info.z* math.pi/180)
-        t.transform.rotation.x = q[0]
-        t.transform.rotation.y = q[1]
-        t.transform.rotation.z = q[2]
-        t.transform.rotation.w = q[3]
-        tf_broadcaster.sendTransform(t)
-        print("ok")
-
-    def __init__(self, ep_chassis):
-        super().__init__("robomaster_odom")
-        
-        def sub_position_handler(position_info):
-            print("handler")
-            tf_broadcaster = TransformBroadcaster()
+        while True:
+            super().__init__("robomaster_odom")
+            self.tf_broadcaster = TransformBroadcaster(self)
+            ser.write(("chassis position ?;").encode('utf-8'))
+            buf = ser.readall()
+            xyz = buf.decode('utf-8')
+            self.get_logger().info(xyz)
+            xyzlist = xyz.split(" ")
             t = TransformStamped()
-            t.header.stampep_chassis = time.get_clock().now().to_msg()
+            t.header.stamp = self.get_clock().now().to_msg()
             t.header.frame_id = 'odom'
-            t.child_frame_id = "base_footprint"
-            t.transform.translation.x = position_info.x
-            t.transform.translation.y = -position_info.y
+            t.child_frame_id = "base_link"
+            t.transform.translation.x = float(xyzlist[0])
+            t.transform.translation.y = float(xyzlist[1])
             t.transform.translation.z = 0.0
-            q = quaternion_from_euler(0, 0, -position_info.z* math.pi/180)
+            q = quaternion_from_euler(0, 0, float(xyzlist[2])* math.pi/180)
             t.transform.rotation.x = q[0]
             t.transform.rotation.y = q[1]
             t.transform.rotation.z = q[2]
             t.transform.rotation.w = q[3]
-            tf_broadcaster.sendTransform(t)
-            print("ok")
-        
-        ep_chassis.sub_position(freq=10, callback=sub_position_handler)
-        print("sub")
-    
-    
-
+            self.tf_broadcaster.sendTransform(t)
+            time.sleep(0.1)
 
 def main():
-    print("jo")
-    ep_robot = robot.Robot()
-    ep_robot.initialize(conn_type="rndis")
-
-    ep_chassis = ep_robot.chassis
-
     rclpy.init()
-    node = Robomaster_odom(ep_chassis)
+    node = Robomaster_odom()
+    
     rclpy.spin(node)
     rclpy.shutdown()
-
-    ep_robot.close()
\ No newline at end of file