学习如何管理、分析和导出 USV 采集的数据。
1. 遥测数据 (Telemetry)
Section titled “1. 遥测数据 (Telemetry)”实时系统状态数据:
- GPS 位置
- 速度和方向
- 电池电量
- 系统状态
存储格式: Time-series database (InfluxDB)
2. 传感器数据
Section titled “2. 传感器数据”各类传感器采集的环境数据:
- 水质参数
- 气象数据
- 图像/视频
- 声呐/雷达数据
存储格式: SQLite / PostgreSQL + 文件系统
3. 日志数据
Section titled “3. 日志数据”系统运行日志:
- 系统事件
- 错误信息
- 用户操作
- 任务记录
存储格式: JSON / 纯文本
配置采集参数
Section titled “配置采集参数”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启动数据采集
Section titled “启动数据采集”# 开始采集jhusv data start
# 停止采集jhusv data stop
# 查看状态jhusv data status本地存储结构
Section titled “本地存储结构”~/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/数据库schema
Section titled “数据库schema”遥测数据表:
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);使用 CLI
Section titled “使用 CLI”# 查询最近的遥测数据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"
# 导出为 CSVjhusv data export \ --type sensors \ --format csv \ --output data.csv使用 Python API
Section titled “使用 Python API”from jhusv import DataManagerfrom 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 DataFrameimport pandas as pddf = pd.DataFrame(water_data)print(df.describe())使用 REST API
Section titled “使用 REST API”# 获取遥测数据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)
# 导出为 CSVjhusv 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.pdfPython 导出
Section titled “Python 导出”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")
# 导出航迹为 KMLexporter.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"# 上传数据jhusv cloud upload --path ~/jhusv/data --recursive
# 下载数据jhusv cloud download --path missions/mission_001 --output ./local
# 同步状态jhusv cloud status自动清理策略
Section titled “自动清理策略”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点# 清理旧数据jhusv data cleanup --older-than 90d
# 清理特定类型jhusv data cleanup --type videos --older-than 30d
# 压缩旧数据jhusv data compress --older-than 7d# 完整备份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.gzjhusv backup restore ~/backups/backup-2024-01-15.tar.gzauto_backup: enabled: true schedule: "0 3 * * *" # 每天凌晨3点 type: "incremental" destination: "/mnt/backup" retention: 7 # 保留备份天数 notification: true# 任务报告jhusv report mission \ --mission mission_001 \ --template default \ --output report.pdf
# 自定义报告jhusv report custom \ --config report_config.yaml \ --output custom_report.pdfreport: 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_logRESTful API
Section titled “RESTful API”// 获取遥测数据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));WebSocket API
Section titled “WebSocket API”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']}));✅ 建议:
- 合理设置采样率(避免过高)
- 定期校准传感器
- 监控存储空间
- 启用数据压缩
✅ 建议:
- 定期备份重要数据
- 使用云端同步
- 实施保留策略
- 加密敏感数据
✅ 建议:
- 及时处理采集的数据
- 验证数据质量
- 生成定期报告
- 建立数据档案