MQTT/simulation.py

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)