Skip to content

Commit 13f9944

Browse files
committed
Refactor gimbal.py for improved readability
1 parent 61dc71d commit 13f9944

File tree

1 file changed

+60
-21
lines changed

1 file changed

+60
-21
lines changed

examples/gimbal.py

Lines changed: 60 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,30 @@
66

77

88
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
1010

1111
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+
)
1522
gimbals_found.append(gimbal)
1623
return
17-
24+
1825
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)
2028
return gimbals_found
2129
except asyncio.TimeoutError:
2230
print("Timeout: No gimbals found.")
2331

32+
2433
async def run():
2534
# Init the drone
2635
drone = System()
@@ -31,69 +40,99 @@ async def run():
3140
for gimbal in gimbals:
3241

3342
# 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+
)
3546

3647
print("Taking control of gimbal with ID", gimbal.gimbal_id)
3748
await drone.gimbal.take_control(gimbal.gimbal_id, ControlMode.PRIMARY)
3849

3950
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+
)
4154
await asyncio.sleep(2)
4255

4356
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+
)
4560
await asyncio.sleep(4)
4661

4762
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+
)
4966
await asyncio.sleep(4)
5067

5168
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+
)
5372
await asyncio.sleep(4)
5473

5574
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+
)
5778
await asyncio.sleep(4)
5879

5980
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+
)
6184
await asyncio.sleep(4)
6285

6386
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+
)
6590
await asyncio.sleep(4)
6691

6792
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+
)
6996
await asyncio.sleep(4)
7097

7198
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+
)
73102
await asyncio.sleep(4)
74103

75104
# Set the gimbal to track a region of interest (lat, lon, altitude)
76105
# 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+
)
79112
await asyncio.sleep(4)
80113

81114
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+
)
83118
await asyncio.sleep(4)
84119

85120
print("Release control of gimbal with ID", gimbal.gimbal_id)
86121
await drone.gimbal.release_control(gimbal.gimbal_id)
87122

88123
print_gimbal_position_task.cancel()
89124

125+
90126
async def print_gimbal_attitude(gimbal_id, drone):
91127
while True:
92128
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}")
94133
await asyncio.sleep(0.5)
95134

96135

97136
if __name__ == "__main__":
98137
# Run the asyncio loop
99-
asyncio.run(run())
138+
asyncio.run(run())

0 commit comments

Comments
 (0)