MQTT/simulation.py

102 lines
3.2 KiB
Python
Raw Normal View History

2024-12-12 10:03:36 +08:00
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)