跳转到内容

学习如何管理、分析和导出 USV 采集的数据。

实时系统状态数据:

  • GPS 位置
  • 速度和方向
  • 电池电量
  • 系统状态

存储格式: Time-series database (InfluxDB)

各类传感器采集的环境数据:

  • 水质参数
  • 气象数据
  • 图像/视频
  • 声呐/雷达数据

存储格式: SQLite / PostgreSQL + 文件系统

系统运行日志:

  • 系统事件
  • 错误信息
  • 用户操作
  • 任务记录

存储格式: JSON / 纯文本

data_collection:
# 遥测数据
telemetry:
enabled: true
rate: 1 # Hz
buffer_size: 1000
# 传感器数据
sensors:
water_quality:
enabled: true
rate: 0.5 # Hz
parameters:
- name: "ph"
unit: "pH"
- name: "dissolved_oxygen"
unit: "mg/L"
- name: "temperature"
unit: "°C"
camera:
enabled: true
mode: "video" # video, photo, timelapse
resolution: [1920, 1080]
fps: 30
encoding: "h264"
quality: 85
# 存储设置
storage:
local: true
cloud: true
compression: true
Terminal window
# 开始采集
jhusv data start
# 停止采集
jhusv data stop
# 查看状态
jhusv data status
~/jhusv/data/
├── telemetry/
│ ├── 2024-01-15/
│ │ ├── 10-00-00.db
│ │ └── 14-30-00.db
│ └── 2024-01-16/
├── sensors/
│ ├── water_quality/
│ │ └── 2024-01-15.csv
│ ├── images/
│ │ └── 2024-01-15/
│ └── videos/
│ └── 2024-01-15/
├── logs/
│ ├── system.log
│ └── mission.log
└── missions/
├── completed/
└── reports/

遥测数据表:

CREATE TABLE telemetry (
timestamp DATETIME,
device_id VARCHAR(50),
latitude FLOAT,
longitude FLOAT,
altitude FLOAT,
speed FLOAT,
heading FLOAT,
battery_level FLOAT,
signal_strength INT
);

传感器数据表:

CREATE TABLE sensor_readings (
id INTEGER PRIMARY KEY,
timestamp DATETIME,
device_id VARCHAR(50),
sensor_type VARCHAR(50),
parameter VARCHAR(50),
value FLOAT,
unit VARCHAR(20),
quality INT
);
Terminal window
# 查询最近的遥测数据
jhusv data query telemetry --since "1 hour ago"
# 查询特定传感器数据
jhusv data query sensors \
--type water_quality \
--parameter ph \
--start "2024-01-15 00:00" \
--end "2024-01-15 23:59"
# 导出为 CSV
jhusv data export \
--type sensors \
--format csv \
--output data.csv
from jhusv import DataManager
from datetime import datetime, timedelta
# 创建数据管理器
dm = DataManager()
# 查询遥测数据
end_time = datetime.now()
start_time = end_time - timedelta(hours=1)
telemetry = dm.query_telemetry(
device_id="USV-2024-001",
start_time=start_time,
end_time=end_time
)
# 查询传感器数据
water_data = dm.query_sensors(
device_id="USV-2024-001",
sensor_type="water_quality",
parameters=["ph", "dissolved_oxygen"],
start_time=start_time,
end_time=end_time
)
# 转换为 Pandas DataFrame
import pandas as pd
df = pd.DataFrame(water_data)
print(df.describe())
Terminal window
# 获取遥测数据
curl -X GET "http://localhost:8080/api/v1/data/telemetry?device=USV-2024-001&since=1h"
# 获取传感器数据
curl -X GET "http://localhost:8080/api/v1/data/sensors?device=USV-2024-001&type=water_quality&start=2024-01-15T00:00:00Z"
from jhusv.analysis import Statistics
stats = Statistics()
# 计算统计信息
result = stats.calculate(
data=water_data,
parameters=["ph", "dissolved_oxygen", "temperature"]
)
print(result)
# {
# "ph": {
# "mean": 7.2,
# "std": 0.3,
# "min": 6.8,
# "max": 7.6,
# "median": 7.1
# },
# ...
# }
from jhusv.visualization import Plotter
plotter = Plotter()
# 时间序列图
plotter.time_series(
data=water_data,
parameters=["ph", "dissolved_oxygen"],
title="Water Quality Over Time",
output="water_quality.png"
)
# 航迹图
plotter.track_map(
telemetry=telemetry,
waypoints=waypoints,
title="Mission Track",
output="track_map.html"
)
# 热力图
plotter.heatmap(
data=water_data,
parameter="temperature",
coordinates=telemetry[["latitude", "longitude"]],
output="temp_heatmap.html"
)
from jhusv.analysis import AnomalyDetector
detector = AnomalyDetector(
method="isolation_forest",
threshold=0.95
)
# 检测异常
anomalies = detector.detect(
data=water_data,
parameters=["ph", "dissolved_oxygen"]
)
print(f"Found {len(anomalies)} anomalies")

支持的格式:

  • CSV
  • JSON
  • Excel
  • GeoJSON
  • KML (for GPS tracks)
  • HDF5 (for large datasets)
Terminal window
# 导出为 CSV
jhusv data export \
--type sensors \
--format csv \
--output water_data.csv
# 导出为 GeoJSON(带地理信息)
jhusv data export \
--type telemetry \
--format geojson \
--output track.geojson
# 导出任务报告
jhusv mission report mission_001 \
--format pdf \
--output report.pdf
from jhusv import DataExporter
exporter = DataExporter()
# 导出传感器数据
exporter.export_sensors(
device_id="USV-2024-001",
start_time=start_time,
end_time=end_time,
format="csv",
output="data.csv"
)
# 导出航迹为 KML
exporter.export_track(
device_id="USV-2024-001",
mission_id="mission_001",
format="kml",
output="track.kml"
)
cloud_sync:
enabled: true
provider: "aws" # aws, aliyun, tencent
aws:
region: "ap-southeast-1"
bucket: "jhusv-data"
credentials:
access_key: "${AWS_ACCESS_KEY}"
secret_key: "${AWS_SECRET_KEY}"
sync:
mode: "auto" # auto, manual
interval: 3600 # 秒
compress: true
encrypt: true
# 选择性同步
include:
- "telemetry/*"
- "sensors/*"
exclude:
- "*/temp/*"
- "*.tmp"
Terminal window
# 上传数据
jhusv cloud upload --path ~/jhusv/data --recursive
# 下载数据
jhusv cloud download --path missions/mission_001 --output ./local
# 同步状态
jhusv cloud status
data_retention:
enabled: true
rules:
- type: "telemetry"
keep_days: 90
- type: "sensor_readings"
keep_days: 180
- type: "videos"
keep_days: 30
compress_after_days: 7
- type: "logs"
keep_days: 30
schedule: "0 2 * * *" # 每天凌晨2点
Terminal window
# 清理旧数据
jhusv data cleanup --older-than 90d
# 清理特定类型
jhusv data cleanup --type videos --older-than 30d
# 压缩旧数据
jhusv data compress --older-than 7d
Terminal window
# 完整备份
jhusv backup create \
--type full \
--output ~/backups/backup-2024-01-15.tar.gz
# 增量备份
jhusv backup create \
--type incremental \
--base last \
--output ~/backups/backup-incremental.tar.gz
Terminal window
jhusv backup restore ~/backups/backup-2024-01-15.tar.gz
auto_backup:
enabled: true
schedule: "0 3 * * *" # 每天凌晨3点
type: "incremental"
destination: "/mnt/backup"
retention: 7 # 保留备份天数
notification: true
Terminal window
# 任务报告
jhusv report mission \
--mission mission_001 \
--template default \
--output report.pdf
# 自定义报告
jhusv report custom \
--config report_config.yaml \
--output custom_report.pdf
report:
title: "Water Quality Survey Report"
date: "2024-01-15"
sections:
- type: "summary"
include:
- mission_info
- duration
- distance
- waypoints
- type: "data_analysis"
parameters:
- ph
- dissolved_oxygen
- temperature
charts:
- type: "time_series"
- type: "histogram"
- type: "statistics"
- type: "map"
show_waypoints: true
show_track: true
show_heatmap: true
parameter: "temperature"
- type: "appendix"
include:
- raw_data
- event_log
// 获取遥测数据
fetch('/api/v1/data/telemetry?device=USV-2024-001&since=1h')
.then(response => response.json())
.then(data => console.log(data));
// 获取传感器数据
fetch('/api/v1/data/sensors?device=USV-2024-001&type=water_quality')
.then(response => response.json())
.then(data => console.log(data));
const ws = new WebSocket('ws://localhost:8081/data/stream');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Real-time data:', data);
};
// 订阅特定数据流
ws.send(JSON.stringify({
action: 'subscribe',
device: 'USV-2024-001',
streams: ['telemetry', 'water_quality']
}));

建议:

  • 合理设置采样率(避免过高)
  • 定期校准传感器
  • 监控存储空间
  • 启用数据压缩

建议:

  • 定期备份重要数据
  • 使用云端同步
  • 实施保留策略
  • 加密敏感数据

建议:

  • 及时处理采集的数据
  • 验证数据质量
  • 生成定期报告
  • 建立数据档案