Skip to content

Commit 73fdff9

Browse files
committed
feat: Added leader evasion Python boilerplate for Task 6
1 parent 4fffd88 commit 73fdff9

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env python3
2+
3+
import rclpy
4+
from rclpy.node import Node
5+
from geometry_msgs.msg import Twist
6+
import math
7+
import time
8+
9+
class LeaderEvasionNode(Node):
10+
def __init__(self):
11+
super().__init__('leader_evasion_node')
12+
13+
# Publisher for velocity commands via MAVROS
14+
self.vel_pub = self.create_publisher(
15+
Twist,
16+
'/iris_1/mavros/setpoint_velocity/cmd_vel_unstamped',
17+
10
18+
)
19+
20+
self.timer = self.create_timer(0.1, self.timer_callback)
21+
self.start_time = time.time()
22+
self.get_logger().info("Leader Evasion Node started. Executing maneuvers...")
23+
24+
def timer_callback(self):
25+
t = time.time() - self.start_time
26+
27+
msg = Twist()
28+
# Complex figure-eight and altitude changing maneuver
29+
msg.linear.x = 2.0 * math.sin(0.5 * t)
30+
msg.linear.y = 1.5 * math.cos(0.2 * t)
31+
msg.linear.z = 0.5 * math.sin(0.3 * t)
32+
msg.angular.z = 0.5 * math.cos(0.4 * t)
33+
34+
self.vel_pub.publish(msg)
35+
36+
def main(args=None):
37+
rclpy.init(args=args)
38+
node = LeaderEvasionNode()
39+
try:
40+
rclpy.spin(node)
41+
except KeyboardInterrupt:
42+
pass
43+
finally:
44+
node.destroy_node()
45+
rclpy.shutdown()
46+
47+
if __name__ == '__main__':
48+
main()

0 commit comments

Comments
 (0)