View difference between Paste ID: gWmKyfk5 and 8e0Hn0X6
SHOW: | | - or go back to the newest paste.
1-
#!/usr/bin/env python
1+
2-
# -*- coding: utf-8 -*-
2+
3
from std_srvs.srv import Trigger
4
import math
5
6
rospy.init_node('flight')
7
8-
import csv
8+
9
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
10
land = rospy.ServiceProxy('land', Trigger)
11
12-
# Define service proxies
12+
def wait_arrival(tolerance=0.2):
13
    while not rospy.is_shutdown():
14
        telem = get_telemetry(frame_id='navigate_target')
15
        if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < tolerance:
16
            break
17-
def wait_arrival(tolerance=0.2, debug=False, log_writer=None):
17+
        rospy.sleep(0.2)
18-
    """
18+
19-
    Waits until the drone reaches the target position within a certain tolerance.
19+
20-
    Logs telemetry data to the provided CSV writer during the wait.
20+
# Взлетаем на высоту 2 метра
21-
    """
21+
navigate(x=0, y=0, z=2, frame_id='body', auto_arm=True)
22-
    rate = rospy.Rate(5)  # 5 Hz
22+
wait_arrival()
23
24
# Пролет по квадрату (5 метров на сторону)
25-
        distance = math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2)
25+
navigate(x=5, y=0, z=0, frame_id='body')
26-
        
26+
wait_arrival()
27-
        if debug:
27+
28-
            rospy.loginfo(f"Current distance to target: {distance}")
28+
navigate(x=0, y=5, z=0, frame_id='body')
29-
        
29+
wait_arrival()
30-
        if log_writer:
30+
31-
            global_telem = get_telemetry(frame_id='map')
31+
navigate(x=-5, y=0, z=0, frame_id='body')
32-
            log_writer.writerow([rospy.get_time(), global_telem.x, global_telem.y, global_telem.z, global_telem.yaw])
32+
wait_arrival()
33-
        
33+
34-
        if distance < tolerance:
34+
navigate(x=0, y=-5, z=0, frame_id='body')
35
wait_arrival()
36-
        rate.sleep()
36+
37
# Возвращение в исходную точку (центральную метку)
38
navigate(x=0, y=0, z=0, frame_id='body')
39-
def navigate_and_wait(x, y, z, frame_id='body', auto_arm=False, debug=False, log_writer=None):
39+
wait_arrival()
40-
    """
40+
41-
    Sends the drone to the specified coordinates and waits until arrival.
41+
# Получаем телеметрию и выводим её в консоль
42-
    """
42+
telemetry = get_telemetry()
43-
    navigate(x=x, y=y, z=z, frame_id=frame_id, auto_arm=auto_arm)
43+
print(f"Telemetry: x={telemetry.x}, y={telemetry.y}, z={telemetry.z}, yaw={telemetry.yaw}, vx={telemetry.vx}, vy={telemetry.vy}, vz={telemetry.vz}")
44-
    if debug:
44+
45-
        rospy.loginfo(f"Navigating to: x={x}, y={y}, z={z}, frame_id={frame_id}")
45+
# Посадка
46-
    wait_arrival(debug=debug, log_writer=log_writer)
46+
land()
47