|
| 1 | +#This code is generated by inputting "Rover goes forward 10m/s during 20 seconds" |
| 2 | +#after 'python3 generate_src.py' |
| 3 | + |
1 | 4 | import rclpy
|
2 | 5 | from rclpy.node import Node
|
3 | 6 | from geometry_msgs.msg import Twist
|
4 | 7 | from time import sleep
|
5 | 8 |
|
6 |
| -class DifferentialRoverNode(Node): |
| 9 | +class RoverController(Node): |
| 10 | + |
7 | 11 | def __init__(self):
|
8 |
| - super().__init__('differential_rover_node') |
9 |
| - self.publisher = self.create_publisher(Twist, '/cmd_vel', 10) |
10 |
| - self.create_timer(0.1, self.timer_callback) # Publish every 0.1 seconds |
11 |
| - self.movement_duration = 20 # Move for 20 seconds |
12 |
| - self.start_time = self.get_clock().now().to_msg().sec |
13 |
| - |
14 |
| - def timer_callback(self): |
15 |
| - current_time = self.get_clock().now().to_msg().sec |
16 |
| - if current_time - self.start_time < self.movement_duration: |
17 |
| - move_cmd = Twist() |
18 |
| - move_cmd.linear.x = 10.0 # Move forward at 10m/s |
19 |
| - move_cmd.angular.z = 0.0 # No rotation |
20 |
| - self.publisher.publish(move_cmd) |
21 |
| - else: |
22 |
| - self.stop_movement() |
23 |
| - |
24 |
| - def stop_movement(self): |
25 |
| - move_cmd = Twist() # Create a new message to stop the robot |
26 |
| - self.publisher.publish(move_cmd) |
27 |
| - self.get_logger().info('Stopping') |
28 |
| - self.destroy_node() |
| 12 | + super().__init__('rover_controller') |
| 13 | + self.publisher_ = self.create_publisher(Twist, '/cmd_vel', 10) |
| 14 | + self.timer = self.create_timer(0.1, self.publish_cmd_vel) |
| 15 | + self.start_time = self.get_clock().now() |
| 16 | + |
| 17 | + def publish_cmd_vel(self): |
| 18 | + current_time = self.get_clock().now() |
| 19 | + elapsed_time = (current_time - self.start_time).nanoseconds / 1e9 |
| 20 | + |
| 21 | + if elapsed_time > 20: |
| 22 | + self.timer.cancel() # Stop publishing after 20 seconds |
| 23 | + self.get_logger().info('Stopped sending velocity commands.') |
| 24 | + return |
| 25 | + |
| 26 | + cmd_vel = Twist() |
| 27 | + cmd_vel.linear.x = 10.0 # Forward speed in m/s |
| 28 | + cmd_vel.angular.z = 0.0 # No rotation |
| 29 | + |
| 30 | + self.publisher_.publish(cmd_vel) |
| 31 | + self.get_logger().info('Publishing: Linear X: %f, Angular Z: %f' % |
| 32 | + (cmd_vel.linear.x, cmd_vel.angular.z)) |
| 33 | + |
29 | 34 |
|
30 | 35 | def main(args=None):
|
31 | 36 | rclpy.init(args=args)
|
32 |
| - node = DifferentialRoverNode() |
33 |
| - rclpy.spin(node) |
| 37 | + rover_controller = RoverController() |
| 38 | + rclpy.spin(rover_controller) |
| 39 | + |
| 40 | + rover_controller.destroy_node() |
34 | 41 | rclpy.shutdown()
|
35 | 42 |
|
| 43 | + |
| 44 | +if __name__ == '__main__': |
| 45 | + main() |
0 commit comments