102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
import json
|
|
import sys
|
|
import time
|
|
import random
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from loguru import logger
|
|
|
|
from math import cos
|
|
from datetime import datetime
|
|
|
|
logger.add(sys.stderr,format = "{time}-{level}-{message}",level = "INFO")
|
|
logger.add("logs/sim_flight.log",rotation = "1 MB",retention = '7 days')
|
|
|
|
|
|
def generate_fight_data(inital_lat,initial_lon,sat_count):
|
|
|
|
# 飞机初始状态
|
|
altitude = 3.256 # 初始高度
|
|
horizontal_speed = 0.86 *100 # 初始水平速度
|
|
vertical_speed = 0.04447911 *100 # 初始竖直速度
|
|
yaw = random.uniform(0, 360) # 随机偏航角
|
|
roll = random.uniform(-1, 1) # 随机滚转角
|
|
pitch = random.uniform(-1, 1) # 随机俯仰角
|
|
armed = "false" # 解锁状态
|
|
mode = "stabilize" # 飞机模式
|
|
dist_to_home = random.uniform(0, 10) # 随机距离家
|
|
mileage = 0 # 飞行总距离
|
|
gps_signal = 4 # GPS状态
|
|
sat_count = 29 # GPS获取卫星数
|
|
voltage = round(random.uniform(24, 26), 3) # 随机电压
|
|
landing_target_x = 0 # 视觉误差x轴偏差值
|
|
landing_target_y = 0 # 视觉误差y轴偏差值
|
|
landing_target_z = 0 # 视觉误差z轴偏差值
|
|
|
|
timestamp = int(datetime.utcnow().timestamp() * 1000)
|
|
|
|
|
|
# 生成数据字典
|
|
flight_data = {
|
|
# "lon": round(initial_lon, 7),
|
|
# "lat": round(inital_lat, 7),
|
|
|
|
"lon": inital_lat,
|
|
"lat": initial_lon,
|
|
|
|
"gpssingal": gps_signal,
|
|
"satcount": sat_count,
|
|
"alt": round(altitude, 3),
|
|
"hspeed": round(horizontal_speed, 2),
|
|
"vspeed": round(vertical_speed, 8),
|
|
"ysingal": 0,
|
|
"tsingal": 0,
|
|
"voltage": round(voltage, 3),
|
|
"flytime": 0,
|
|
"datetime": timestamp,
|
|
"yaw": round(yaw, 6),
|
|
"roll": round(roll, 8),
|
|
"pitch": round(pitch, 8),
|
|
"armed": armed,
|
|
"mode": mode,
|
|
"distToHome": round(dist_to_home, 6),
|
|
"deviceid": "THJSQ03A2302KSPYGJ2G",
|
|
"mileage": str(mileage),
|
|
"altasl": round(altitude + 18, 2), # 模拟GPS1绝对高度
|
|
"altasl2": round(altitude - 24, 2), # 模拟GPS2绝对高度
|
|
"landing_target_x": landing_target_x,
|
|
"landing_target_y": landing_target_y,
|
|
"landing_target_z": landing_target_z,
|
|
}
|
|
|
|
|
|
#输出JSON格式数据
|
|
print(json.dumps(flight_data,indent=4))
|
|
logger.info("模拟飞行数据" + str(flight_data))
|
|
|
|
|
|
return flight_data
|
|
|
|
|
|
def generate_data():
|
|
while True:
|
|
# 生成一个随机数,范围在 0 到 100 之间
|
|
data = random.uniform(0, 100)
|
|
print(f"Generated data: {data:.2f}")
|
|
|
|
# 暂停 0.5 秒
|
|
time.sleep(0.5)
|
|
|
|
if __name__ == "__main__":
|
|
generate_data()
|
|
|
|
|
|
# # 设置初始经纬度
|
|
# initial_latitude = 31.8250608
|
|
# initial_longitude = 118.7630802
|
|
|
|
# # 开始生成数据
|
|
# flight_data_json = generate_fight_data(initial_latitude, initial_longitude)
|
|
|
|
|