diff --git a/ros2/src/robobin/robobin/motor_control_node.py b/ros2/src/robobin/robobin/motor_control_node.py
index d049b21ffde3121eece732642070cb227fa03aa8..25786c4a14305145926601ce96e723029b42c750 100644
--- a/ros2/src/robobin/robobin/motor_control_node.py
+++ b/ros2/src/robobin/robobin/motor_control_node.py
@@ -1,13 +1,54 @@
+#!/usr/bin/env python3
 import rclpy
 from rclpy.node import Node
 from geometry_msgs.msg import Twist
+from gpiozero import PWMOutputDevice
+from time import sleep
 
-class MotorController(Node):
+class Motor:
+    def __init__(self, node, EnaA, In1A, In2A, EnaB, In1B, In2B):
+        self.node = node
+        self.pwmA = PWMOutputDevice(EnaA)
+        self.in1A = PWMOutputDevice(In1A)
+        self.in2A = PWMOutputDevice(In2A)
+        self.pwmB = PWMOutputDevice(EnaB)
+        self.in1B = PWMOutputDevice(In1B)
+        self.in2B = PWMOutputDevice(In2B)
+
+    def move(self, speed=0.0, turn=0.0):
+        speed = max(-1, min(1, speed))
+        turn = max(-1, min(1, turn))
+
+        leftSpeed = speed - turn
+        rightSpeed = speed + turn
+        '''
+        left_speed = self.desired_speed - (turn_rate * self.motor.wheel_base / 2)
+        right_speed = self.desired_speed + (turn_rate * self.motor.wheel_base / 2)
+        '''
+
+        leftSpeed = max(-1, min(1, leftSpeed))
+        rightSpeed = max(-1, min(1, rightSpeed))
+
+        self.pwmA.value = abs(leftSpeed)
+        self.in1A.value = leftSpeed <=  0
+        self.in2A.value = leftSpeed > 0
+
+        self.pwmB.value = abs(rightSpeed)
+        self.in1B.value = rightSpeed > 0
+        self.in2B.value = rightSpeed <= 0
+
+        self.node.get_logger().info(f"Left Motor: Speed={leftSpeed}, Right Motor: Speed={rightSpeed}")
+
+
+    def stop(self):
+        self.pwmA.value = 0
+        self.pwmB.value = 0
+
+class MotorControlNode(Node):
     def __init__(self):
-        super().__init__('motor_controller')
-        self.get_logger().info("Motor Controller has been started.")
-        
- 
+        super().__init__('motor_control_node')
+        self.get_logger().info("hello")
+        self.motor = Motor(self, 14, 15, 18, 17, 22, 27)
         self.subscription = self.create_subscription(
             Twist,
             'cmd_vel',
@@ -15,76 +56,18 @@ class MotorController(Node):
             10
         )
 
-        self.wheel_radius = 0.05  
-        self.wheel_base = 0.30  
-
-    
-        self.left_pwm = 0
-        self.right_pwm = 0
-
-        self.get_logger().info("hello")
-    
     def cmd_vel_callback(self, msg):
         linear_x = msg.linear.x
         angular_z = msg.angular.z
-
-        # self.get_logger().info(f"linearx: {v}, angluarz: {omega}")
-
-
-        # v_left = v - (self.wheel_base / 2.0) * omega
-        # v_right = v + (self.wheel_base / 2.0) * omega
-
-        # max_speed = 1.0
-        # # Normalize speeds to -1.0 to 1.0
-        # left_speed = max(min(v_left / max_speed, 1.0), -1.0)
-        # right_speed = max(min(v_right / max_speed, 1.0), -1.0)
-
-        # # Convert to PWM duty cycle (0 to 100)
-        # left_pwm = int((left_speed + 1.0) / 2.0 * 100)
-        # right_pwm = int((right_speed + 1.0) / 2.0 * 100)
-
-
-        if linear_x == 0.5 and angular_z == 0:
-  
-            self.left_pwm = 75
-            self.right_pwm = 75
-        elif linear_x == -0.5 and angular_z == 0:
-
-            self.left_pwm = -75
-            self.right_pwm = -75
-        elif linear_x == 0 and angular_z == 0.5:
-
-            self.left_pwm = -50
-            self.right_pwm = 50
-        elif linear_x == 0 and angular_z == -0.5:
-            # Turn right
-            self.left_pwm = 50
-            self.right_pwm = -50
-        elif linear_x == 0 and angular_z == 0:
-            # STOP
-            self.left_pwm = 0
-            self.right_pwm = 0
-            self.get_logger().info("STOP command received. Motors stopped.")
-
-        # Log the computed PWM values
-        self.get_logger().info(f"Left PWM: {self.left_pwm}, Right PWM: {self.right_pwm}")
-
-        # Set motor directions based on sign of speeds
-        # left_direction = 1 if left_speed >= 0 else 0
-        # right_direction = 1 if right_speed >= 0 else 0
-
-
+        self.motor.move(speed=linear_x, turn=angular_z)
 
 def main(args=None):
     rclpy.init(args=args)
-    node = MotorController()
-    try:
-        rclpy.spin(node)
-    except KeyboardInterrupt:
-        node.shutdown()
-    finally:
-        node.destroy_node()
-        rclpy.shutdown()
+    node = MotorControlNode()
+    rclpy.spin(node)
+    rclpy.shutdown()
 
 if __name__ == '__main__':
     main()
+
+#colcon build --symlink-install
\ No newline at end of file