Skip to content

05sec/ulogo

Repository files navigation

ulogo

ulogo 是 PX4 ULog 的 Go 解析库,目标是复刻 PX4/pyulog 的核心库能力和常用 CLI,让 Go 项目可以直接读取、分析和导出 .ulg 飞行日志。

当前状态

这是项目初始化版本,已经具备可运行的 V0 骨架:

  • ulogo.Readio.Reader 解析 ULog,ulogo.ReadFile / ulogo.Load 作为文件路径便利入口。
  • 支持 Info、Parameter、Logging、Dropout、Format、Data message。
  • 支持嵌套 topic 格式展平为 Go Dataset
  • 支持 appended ULog 分段读取。
  • 支持 PX4 events 日志内嵌 metadata 的离线解码。
  • 提供 ulog_infoulog_messagesulog_paramsulog2csv 四个 CLI。
  • 完整保留 pyulog 上游 test/ 目录,并用真实 pyulog 生成的 oracle 做解析内容级兼容性测试。

安装

go install github.com/05sec/ulogo/cmd/ulog_info@latest
go install github.com/05sec/ulogo/cmd/ulog_messages@latest
go install github.com/05sec/ulogo/cmd/ulog_params@latest
go install github.com/05sec/ulogo/cmd/ulog2csv@latest

本地开发时可以直接运行:

go run ./cmd/ulog_info -v testdata/pyulog/sample.ulg
go run ./cmd/ulog_messages testdata/pyulog/sample.ulg
go run ./cmd/ulog2csv -m sensor_combined -o /tmp testdata/pyulog/sample.ulg

Go API 示例

package main

import (
	"fmt"
	"log"
	"os"

	"github.com/05sec/ulogo"
)

func main() {
	file, err := os.Open("flight.ulg")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	ulog, err := ulogo.Read(file)
	if err != nil {
		log.Fatal(err)
	}

	if sysName, ok := ulog.Info["sys_name"].StringValue(); ok {
		fmt.Println("system:", sysName)
	}
	if dataset, ok := ulog.Dataset("sensor_combined", 0); ok {
		fmt.Println("sensor_combined rows:", len(dataset.Rows))
	}
}

Read 接受任意 io.Reader。当输入同时实现 io.ReadSeeker 时会直接解析; 否则会先在内存中缓存后解析,因此可以支持网络、压缩包、对象存储下载流等不落盘输入。

文档

验证

go test ./...
go vet ./...
sh scripts/check_root_coverage.sh

解析正确性测试读取 testdata/pyulog/oracle_summary.json。该文件由真实 PX4/pyulog 生成,比较的是解析内容:参数、info、dropout、topic schema、 dataset 行数、首尾 timestamp 和逐字段字节哈希;CLI 展示格式另由 golden output 测试覆盖。

scripts/check_root_coverage.sh 默认要求根包覆盖率不低于 80%。可以通过 ROOT_COVERAGE_THRESHOLD=85 sh scripts/check_root_coverage.sh 调整门槛。

License

本仓库使用 GPL-3.0。testdata/pyulog 中的样例文件来自 PX4/pyulog,保留其 BSD-3-Clause 许可证说明。

About

go pkg for ULog files

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors