From feaa1b5a10f0c0b86f92394858cd26eb3a795bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Krau=C3=9F?= <lukas.krauss@kabelbw.de> Date: Wed, 4 Dec 2024 12:41:01 +0100 Subject: [PATCH] Add double integrator --- my_double_integrator/double_integrator.py | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/my_double_integrator/double_integrator.py b/my_double_integrator/double_integrator.py index e69de29..8fe4c9c 100644 --- a/my_double_integrator/double_integrator.py +++ b/my_double_integrator/double_integrator.py @@ -0,0 +1,39 @@ +import rclpy +from rclpy.node import Node +from std_msgs.msg import Float64 +from geometry_msgs.msg import Vector3 + +class DoubleIntegratorSim(Node): + def __init__(self): + super().__init__('double_integrator_sim') + self.declare_parameter('update_rate', 50.0) + self.update_rate = self.get_parameter('update_rate').value + self.state = Vector3(x=0.0, y=0.0, z=0.0) # x=position, y=velocity, z=unused + + self.control_sub = self.create_subscription(Float64, 'control_input', self.control_callback, 10) + self.state_pub = self.create_publisher(Vector3, 'state', 10) + + self.control_input = 0.0 # Initialize control input + + self.timer = self.create_timer(1.0 / self.update_rate, self.update_state) + + def control_callback(self, msg): + self.control_input = msg.data + + def update_state(self): + dt = 1.0 / self.update_rate + self.state.y += self.control_input * dt # Update velocity + self.state.x += self.state.y * dt # Update position + self.state_pub.publish(self.state) + + +def main(args=None): + rclpy.init(args=args) + node = DoubleIntegratorSim() + rclpy.spin(node) + node.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() -- GitLab