相机+雷达+IMU 一键数据采集脚本

1. 创建并赋予脚本执行权限

在你的工作空间(例如 ~/ws_fastlio/)下新建一个脚本文件:

复制代码
cd ~/ws_fastlio
touch record_all.sh
chmod +x record_all.sh
gedit record_all.sh

将以下完整的脚本代码复制粘贴到 record_all.sh 中并保存:

复制代码
#!/bin/bash

# --- 1. 定义清理函数 (确保退出时不留僵尸节点) ---
function cleanup_and_exit {
    echo ""
    echo "----------------------------------------"
    echo "正在停止录制并清理后台节点..."
    
    # 杀掉各个传感器节点
    echo "关闭 RealSense 与 Livox 节点..."
    rosnode kill /camera/realsense2_camera
    rosnode kill /livox/lidar
    rosnode kill /lidar_to_camera_tf
    
    # 杀掉 rqt 可视化窗口
    kill $(jobs -p) 2>/dev/null
    
    echo "清理完成,成功退出。"
    echo "----------------------------------------"
    exit
}

# --- 2. 启动传感器节点 ---
echo "----------------------------------------"
echo "正在后台启动各传感器节点..."

# [后台启动 1] Livox Mid-360 固态雷达
roslaunch livox_ros_driver2 msg_MID360.launch &

# [后台启动 2] RealSense D435i 深度相机 (包含高频 IMU 与时间硬同步)
roslaunch realsense2_camera rs_camera.launch \
    enable_infra1:=true \
    enable_infra2:=true \
    infra_fps:=30 \
    infra_width:=640 \
    infra_height:=480 \
    infra_format:=Y8 \
    enable_accel:=true \
    enable_gyro:=true \
    gyro_fps:=400 \
    accel_fps:=250 \
    unite_imu_method:="linear_interpolation" \
    enable_sync:=true \
    emitter_enable:=0 &

echo "等待传感器硬件初始化 (8秒)..."
sleep 8

# --- 3. 强制灭灯 (规避散斑干扰) ---
rosparam set /camera/stereo_module/laser_power 0

# --- 4. 启动可视化窗口 ---
echo "正在打开图像预览窗口,请检查图像质量..."
rqt_image_view /camera/infra1/image_rect_raw &

# --- 5. 交互式等待 ---
read -p ">>> 检查无误后,请按 [回车键] 开始录制 rosbag <<<" dummy_var

echo ""
echo "===  正在录制 ==="
echo "正在将数据写入: dataset.bag"
echo ">>> 录制过程中请保持平稳移动。录制完成后,请按 Ctrl+C 结束并自动保存 <<<"

# --- 6. 开始录制  ---
# --buffsize 1024 防止高频 IMU 与点云同时并发导致缓存溢出丢包
rosbag record --buffsize 1024 -O dataset.bag \
    /livox/lidar \
    /livox/imu \
    /camera/infra1/image_rect_raw \
    /camera/infra2/image_rect_raw \
    /camera/infra1/camera_info \
    /camera/infra2/camera_info \
    /camera/imu \
    /tf_static

# 正常退出清理
cleanup_and_exit

2. 运行

复制代码
# 打开第 1 个终端
roscore

# 打开第 2 个终端
cd ~/ws_fastlio
# 运行刚才写好的脚本
./record_all.sh