# 无人机自动化数据采集 **Repository Path**: chengjinlai/workspace ## Basic Information - **Project Name**: 无人机自动化数据采集 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-28 - **Last Updated**: 2025-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 无人机数据集自动采集系统 ## 概述 本系统用于自动采集无人机飞行数据集,包括 RGB 图像、深度图像、IMU 数据、动作指令等。系统分为两个部分: 1. **前处理节点(preprocess_recorder.py)**:实时录制 ROS bag 包 2. **后处理脚本(postprocess_bags.py)**:处理 bag 包生成最终数据集 ## 系统要求 - ROS (已测试 ROS Melodic/Noetic) - Python 3 - 依赖包: - rospy - rosbag - cv_bridge - opencv-python - numpy ## 文件结构 ``` workspace/ ├── preprocess_recorder.py # 前处理节点 ├── postprocess_bags.py # 后处理脚本 ├── 1_rosbag/ # bag 文件存储目录 └── 2_data/ # 最终数据集输出目录 ``` ## 使用方法 ### 1. 前处理:实时录制数据 启动前处理节点(需要在 ROS 环境中运行): ```bash cd /home/chengjinlai/无人机自动化数据采集/workspace python3 preprocess_recorder.py ``` **节点功能:** - 监听 `/llm_command_json` 话题 - 当收到 `control == "body_fly"` 的指令时自动开始录制 - 监控无人机位置,满足以下条件时自动停止录制: - 位移接近目标(< 0.1 米) - 速度接近 0(< 0.05 m/s) - 或超时 30 秒 - 录制期间忽略新的指令 - bag 包自动保存到 `1_rosbag/` 目录,命名为 `traj_001.bag`, `traj_002.bag`, ... **录制的话题:** - `/llm_command_json` - 动作指令 - `/uav1/mavros/local_position/odom` - 位置、速度、姿态 - `/uav1/mavros/imu/data_raw` - IMU 原始数据 - `/uav1/mavros/setpoint_raw/local` - 设定点(位置、速度、加速度) - `/camera/color/image_raw` - RGB 图像(限制 10Hz) - `/camera/depth/image_rect_raw` - 深度图像(限制 10Hz) **注意事项:** - 前处理节点需要在无人机飞行控制系统启动后运行 - 确保所有传感器话题都在发布数据 - 每次飞行可以录制多个 bag 包(每个指令一个 bag) ### 2. 后处理:生成数据集 在无人机飞行结束后,运行后处理脚本: ```bash cd /home/chengjinlai/无人机自动化数据采集/workspace # 使用相对时间戳(推荐) python3 postprocess_bags.py --time-mode relative # 使用绝对时间戳 python3 postprocess_bags.py --time-mode absolute # 自定义路径 python3 postprocess_bags.py --bag-dir /path/to/bags --output-dir /path/to/output ``` **脚本功能:** - 批量处理 `1_rosbag/` 目录下的所有 bag 文件 - 统一时间戳(以第一帧 RGB 图像为基准) - 对图像进行降采样(保证 5-10Hz) - 匹配 RGB 和 Depth 图像 - 对齐所有传感器数据到图像帧 - 生成最终数据集和指标文档 **输出结构:** ``` 2_data/ ├── traj_001/ │ ├── cmd.json # 动作指令 │ ├── imu.csv # IMU 数据 │ ├── action.csv # 动作数据 │ ├── metrics.txt # 指标文档 │ ├── rgb/ │ │ ├── rgb.txt # RGB 图像列表(image_id,timestamp) │ │ ├── 0001.jpg │ │ ├── 0002.jpg │ │ └── ... │ └── depth/ │ ├── depth.txt # 深度图像列表(image_id,timestamp) │ ├── 0001.png # 16bit PNG │ ├── 0002.png │ └── ... ├── traj_002/ │ └── ... └── ... ``` **数据格式:** - **cmd.json**: ```json { "timestamp": 1234567890.123, "command": "front 1" } ``` - **imu.csv**: ``` step,timestamp,pos_x,pos_y,pos_z,quat_x,quat_y,quat_z,quat_w,vel_x,vel_y,vel_z,ang_vel_x,ang_vel_y,ang_vel_z,accel_x_raw,accel_y_raw,accel_z_raw,gyro_x_raw,gyro_y_raw,gyro_z_raw ``` - **action.csv**: ``` step,timestamp,pos_x,pos_y,pos_z,vel_x,vel_y,vel_z,accel_x,accel_y,accel_z,yaw,yaw_rate ``` - **rgb.txt / depth.txt**: ``` 0001,0.000000 0002,0.100000 ... ``` - **metrics.txt**: 包含每一步的时间差统计和整体统计信息 ## 数据采集规格 - **采样频率**: 5–10 Hz - **单条轨迹**: 50–300 步 - **目标数据量**: 1–2 万步(约 0.5–1 小时数据) - **RGB 图像**: JPG 格式,质量 95 - **深度图像**: 16bit PNG,无损压缩 ## 故障排查 ### 前处理节点问题 1. **节点无法启动** - 检查 ROS 环境是否正确配置 - 确保路径 `/home/chengjinlai/无人机自动化数据采集/workspace/1_rosbag` 存在 2. **收到指令但不录制** - 检查是否收到 odom 数据(`rostopic echo /uav1/mavros/local_position/odom`) - 查看节点日志了解原因 3. **录制一直不停止** - 检查无人机是否真的到达了目标位置 - 检查速度是否降到了阈值以下 - 30 秒后会自动超时停止 ### 后处理脚本问题 1. **找不到 bag 文件** - 检查 bag 文件是否在 `1_rosbag/` 目录下 - 使用 `--bag-dir` 参数指定正确的路径 2. **图像保存失败** - 检查 cv_bridge 是否正确安装 - 检查图像话题的编码格式是否正确 3. **时间戳对齐异常** - 查看 metrics.txt 文件,检查时间差统计 - 如果时间差过大(>0.1秒),可能是传感器频率不匹配 ## 参数调整 ### 前处理节点参数 在 `preprocess_recorder.py` 中修改: ```python self.position_threshold = 0.1 # 位置阈值(米) self.velocity_threshold = 0.05 # 速度阈值(m/s) self.max_recording_time = 30.0 # 最大录制时间(秒) ``` ### 后处理脚本参数 命令行参数: - `--bag-dir`: bag 文件目录 - `--output-dir`: 输出目录 - `--time-mode`: 时间戳模式(relative 或 absolute) ## 开发者信息 cjl 3011986109@qq.com ## 许可证 [待定]