init repo

This commit is contained in:
Brunsmeier
2026-07-16 14:56:43 +08:00
commit 111c9bab8a
25 changed files with 4289 additions and 0 deletions

85
data_logger.py Normal file
View File

@ -0,0 +1,85 @@
import csv
import time
import os
import numpy as np
class DataLogger:
def __init__(self, filename_prefix="dataset"):
"""
初始化日志记录器
:param filename_prefix: 文件名前缀,例如 "train_batch"
"""
# 1. 自动创建 data 文件夹,保持项目目录整洁
if not os.path.exists('data'):
os.makedirs('data')
print("[Logger] Created 'data' directory.")
# 2. 生成带时间戳的文件名,防止覆盖旧数据
# 格式: data/dataset_20240105_143022.csv
timestamp = time.strftime("%Y%m%d_%H%M%S")
self.filename = f"data/{filename_prefix}_{timestamp}.csv"
# 3. 定义标准表头 (Header) - 对应你的12个力 + 3个构型 + 3个标签
# 传感器命名规则: F(手指ID)_U(单元ID)_(Fn/Ft)
sensor_headers = []
for f in range(3): # 3个手指
for u in range(1, 3): # 2个单元
sensor_headers.append(f"F{f}_U{u}_Fn")
sensor_headers.append(f"F{f}_U{u}_Ft")
# 完整的列名列表
self.header = ['Timestamp', 'Config_ID'] + sensor_headers + ['Label_X', 'Label_Y', 'Label_Theta']
# 4. 创建文件并写入第一行(表头)
try:
with open(self.filename, mode='w', newline='') as f:
writer = csv.writer(f)
writer.writerow(self.header)
print(f"[Logger] Log file initialized: {self.filename}")
except Exception as e:
print(f"[Logger] Error creating file: {e}")
def log(self, sensor_data, config_id, label_vector):
"""
写入一行数据
:param sensor_data: 12维 numpy 数组或列表 (触觉数据)
:param config_id: 整数 (0, 1, 2) (当前手指构型)
:param label_vector: [x, y, theta] (机械臂的真实偏差值)
"""
with open(self.filename, mode='a', newline='') as f:
writer = csv.writer(f)
# 拼接数据: 时间 + ID + 传感器数值 + 标签
# time.time() 获取当前精确时间戳
row = [f"{time.time():.3f}", int(config_id)] + list(sensor_data) + list(label_vector)
# 格式化: 将浮点数保留4位小数节省空间且美观
formatted_row = []
for item in row:
if isinstance(item, float):
formatted_row.append(f"{item:.4f}")
else:
formatted_row.append(item)
writer.writerow(formatted_row)
# === 单元测试 (Unit Test) ===
# 直接运行此文件,测试是否能生成 CSV
if __name__ == "__main__":
print("Testing DataLogger...")
logger = DataLogger(filename_prefix="test_data")
# 模拟写入 5 条假数据
for i in range(5):
# 模拟 12 个传感器数据 (0-10之间)
fake_sensor = np.random.rand(12) * 10
# 模拟机械臂偏差 (Label)
fake_label = [0.0, 5.5, -2.0]
logger.log(sensor_data=fake_sensor, config_id=0, label_vector=fake_label)
print(f"Logged row {i + 1}")
time.sleep(0.1)
print("Test done. Please check the 'data' folder.")