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