ai_project_v1/middleware/entity/up_osd_info_push.py

95 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from dataclasses import dataclass
import json
from typing import Optional
import asyncio
@dataclass
class OSDInfo:
attitude_head: float
elevation: float
gimbal_pitch: float
gimbal_roll: float
gimbal_yaw: float
height: float
home_distance: float
horizontal_speed: float
latitude: float
longitude: float
speed_x: float
speed_y: float
speed_z: float
ultrasonic_height: float
vertical_speed: float
wind_direction: float
wind_speed: float
@dataclass
class OSDMessage:
data: OSDInfo
method: str
seq: int
timestamp: int
def parse_osd_message(json_str: Optional[str]) -> Optional[OSDMessage]:
if not json_str:
return None
try:
data=json_str
osd_info = OSDInfo(**data["data"])
return OSDMessage(
data=osd_info,
method=data["method"],
seq=data["seq"],
timestamp=data["timestamp"]
)
except Exception as e:
print(f"Error parsing OSD message: {e}")
return None
async def main():
# 这里应该是获取latest_osd_info的实际逻辑
latest_osd_info = '''{
"data": {
"attitude_head": -31.6,
"elevation": 100.5,
"gimbal_pitch": -46.9,
"gimbal_roll": 0,
"gimbal_yaw": -31.507293194051584,
"height": 581.8057861328125,
"home_distance": 0.045968499034643173,
"horizontal_speed": 0,
"latitude": 30.762902409980541,
"longitude": 103.99185861184533,
"speed_x": 0,
"speed_y": 0,
"speed_z": 0,
"ultrasonic_height": -1,
"vertical_speed": -0,
"wind_direction": 5,
"wind_speed": 33
},
"method": "osd_info_push",
"seq": 257050,
"timestamp": 1754910838301
}'''
message = parse_osd_message(latest_osd_info)
if message:
print(f"Latitude: {message.data.latitude}")
else:
print("Failed to parse OSD message")
if __name__ == '__main__':
# 设置Windows兼容事件循环如果需要
try:
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
except:
pass
asyncio.run(main())