6
6
7
7
8
8
async def get_gimbals (drone , timeout = 10 ):
9
- gimbals_found = [] # List to store all gimbals found
9
+ gimbals_found = [] # List to store all gimbals found
10
10
11
11
async def fetch_gimbals ():
12
- async for gimbal_list in drone .gimbal .gimbal_list (): # gimbal_list is a GimbalList object
13
- for gimbal in gimbal_list .gimbals : # gimbal_list.gimbals contains GimbalItem objects
14
- print (f"Found Gimbal: ID={ gimbal .gimbal_id } , Model={ gimbal .model_name } , Vendor={ gimbal .vendor_name } , Device ID={ gimbal .gimbal_device_id } " )
12
+ # gimbal_list is a GimbalList object
13
+ async for gimbal_list in drone .gimbal .gimbal_list ():
14
+ # gimbal_list.gimbals contains GimbalItem objects
15
+ for gimbal in gimbal_list .gimbals :
16
+ print (
17
+ f"Found Gimbal: ID={ gimbal .gimbal_id } , "
18
+ f"Model={ gimbal .model_name } , "
19
+ f"Vendor={ gimbal .vendor_name } , "
20
+ f"Device ID={ gimbal .gimbal_device_id } "
21
+ )
15
22
gimbals_found .append (gimbal )
16
23
return
17
-
24
+
18
25
try :
19
- await asyncio .wait_for (fetch_gimbals (), timeout = timeout ) # Apply timeout to async loop
26
+ # Apply timeout to async loop
27
+ await asyncio .wait_for (fetch_gimbals (), timeout = timeout )
20
28
return gimbals_found
21
29
except asyncio .TimeoutError :
22
30
print ("Timeout: No gimbals found." )
23
31
32
+
24
33
async def run ():
25
34
# Init the drone
26
35
drone = System ()
@@ -31,69 +40,99 @@ async def run():
31
40
for gimbal in gimbals :
32
41
33
42
# Start printing gimbal position updates
34
- print_gimbal_position_task = asyncio .create_task (print_gimbal_attitude (gimbal .gimbal_id , drone ))
43
+ print_gimbal_position_task = asyncio .create_task (
44
+ print_gimbal_attitude (gimbal .gimbal_id , drone )
45
+ )
35
46
36
47
print ("Taking control of gimbal with ID" , gimbal .gimbal_id )
37
48
await drone .gimbal .take_control (gimbal .gimbal_id , ControlMode .PRIMARY )
38
49
39
50
print ("Look forward with gimbal ID" , gimbal .gimbal_id )
40
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
51
+ await drone .gimbal .set_angles (
52
+ gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
53
+ )
41
54
await asyncio .sleep (2 )
42
55
43
56
print ("Look down with gimbal ID" , gimbal .gimbal_id )
44
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , - 90 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
57
+ await drone .gimbal .set_angles (
58
+ gimbal .gimbal_id , 0 , - 90 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
59
+ )
45
60
await asyncio .sleep (4 )
46
61
47
62
print ("Back to horizontal with gimbal ID" , gimbal .gimbal_id )
48
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
63
+ await drone .gimbal .set_angles (
64
+ gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
65
+ )
49
66
await asyncio .sleep (4 )
50
67
51
68
print ("Slowly look up with gimbal ID" , gimbal .gimbal_id )
52
- await drone .gimbal .set_angular_rates (gimbal .gimbal_id , 0 , 5 , 0 , GimbalMode .YAW_FOLLOW , SendMode .STREAM )
69
+ await drone .gimbal .set_angular_rates (
70
+ gimbal .gimbal_id , 0 , 5 , 0 , GimbalMode .YAW_FOLLOW , SendMode .STREAM
71
+ )
53
72
await asyncio .sleep (4 )
54
73
55
74
print ("Back to horizontal with gimbal ID" , gimbal .gimbal_id )
56
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
75
+ await drone .gimbal .set_angles (
76
+ gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
77
+ )
57
78
await asyncio .sleep (4 )
58
79
59
80
print ("Look right with gimbal ID" , gimbal .gimbal_id )
60
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 90 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
81
+ await drone .gimbal .set_angles (
82
+ gimbal .gimbal_id , 0 , 0 , 90 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
83
+ )
61
84
await asyncio .sleep (4 )
62
85
63
86
print ("Look forward again with gimbal ID" , gimbal .gimbal_id )
64
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
87
+ await drone .gimbal .set_angles (
88
+ gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
89
+ )
65
90
await asyncio .sleep (4 )
66
91
67
92
print ("Slowly look to the left with gimbal ID" , gimbal .gimbal_id )
68
- await drone .gimbal .set_angular_rates (gimbal .gimbal_id , 0 , 0 , - 5 , GimbalMode .YAW_FOLLOW , SendMode .STREAM )
93
+ await drone .gimbal .set_angular_rates (
94
+ gimbal .gimbal_id , 0 , 0 , - 5 , GimbalMode .YAW_FOLLOW , SendMode .STREAM
95
+ )
69
96
await asyncio .sleep (4 )
70
97
71
98
print ("Look forward again with gimbal ID" , gimbal .gimbal_id )
72
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
99
+ await drone .gimbal .set_angles (
100
+ gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
101
+ )
73
102
await asyncio .sleep (4 )
74
103
75
104
# Set the gimbal to track a region of interest (lat, lon, altitude)
76
105
# Units are degrees and meters MSL respectively
77
- print ("Look at a ROI (region of interest) with gimbal ID" , gimbal .gimbal_id )
78
- await drone .gimbal .set_roi_location (gimbal .gimbal_id , 47.39743832 , 8.5463316 , 488 )
106
+ print (
107
+ "Look at a ROI (region of interest) with gimbal ID" ,
108
+ gimbal .gimbal_id )
109
+ await drone .gimbal .set_roi_location (
110
+ gimbal .gimbal_id , 47.39743832 , 8.5463316 , 488
111
+ )
79
112
await asyncio .sleep (4 )
80
113
81
114
print ("Back to forward again with gimbal ID" , gimbal .gimbal_id )
82
- await drone .gimbal .set_angles (gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE )
115
+ await drone .gimbal .set_angles (
116
+ gimbal .gimbal_id , 0 , 0 , 0 , GimbalMode .YAW_FOLLOW , SendMode .ONCE
117
+ )
83
118
await asyncio .sleep (4 )
84
119
85
120
print ("Release control of gimbal with ID" , gimbal .gimbal_id )
86
121
await drone .gimbal .release_control (gimbal .gimbal_id )
87
122
88
123
print_gimbal_position_task .cancel ()
89
124
125
+
90
126
async def print_gimbal_attitude (gimbal_id , drone ):
91
127
while True :
92
128
attitude = await drone .gimbal .get_attitude (gimbal_id )
93
- print (f"Gimbal ID { gimbal_id } pitch: { attitude .euler_angle_forward .pitch_deg } , yaw: { attitude .euler_angle_forward .yaw_deg } " )
129
+ print (
130
+ f"Gimbal ID { gimbal_id } "
131
+ f"pitch: { attitude .euler_angle_forward .pitch_deg } , "
132
+ f"yaw: { attitude .euler_angle_forward .yaw_deg } " )
94
133
await asyncio .sleep (0.5 )
95
134
96
135
97
136
if __name__ == "__main__" :
98
137
# Run the asyncio loop
99
- asyncio .run (run ())
138
+ asyncio .run (run ())
0 commit comments