apollo自动录bag包脚本(包含清理)

需求

制作一个apollo自动录包脚本,类似行车记录仪方便出问题定位。
该脚本实现以下功能:

  1. 自动创建录制文件夹
  2. 创建以日期为命名的文件夹
  3. 录制bag包
  4. 全部录制或去除点云等数据量比较大的话题进行简单录制
  5. 设置bag包最大占用空间
  6. 每隔一分钟自动计算该文件夹占用空间,大于设定值则删除时间最久的文件

脚本

#!/usr/bin/env bash

# 包自动保存路径
bag_path="/apollo/data/bag/driving_record"

DOCKER_USER="${USER}"

RECORD_MODE="luce"
# 记录模式 全部/路测
RECORD_MODES=(
    all
    luce
)

function start()
{
	# 判断是否有自动保存路径,无则自动创建
    if [ ! -d "$bag_path" ]; then
        mkdir $bag_path
    fi
    
    # 获取时间 年月日
    date=`date +%Y%m%d`
    curbag_dir="$bag_path/$date"
    echo $curbag_dir
    #创建当天文件夹
    if [ ! -d "$curbag_dir" ]; then
        mkdir $curbag_dir
        sudo chmod 777 $curbag_dir
    fi
    
    #进入并录制
    if [ "${RECORD_MODE}" == "${RECORD_MODES[0]}" ];then
    	# 录制全部
        cd $curbag_dir && source /apollo/cyber/setup.bash && nohup cyber_recorder record -a &
    fi
    
    if [ "${RECORD_MODE}" == "${RECORD_MODES[1]}" ];then
    	# 去除点云
        cd $curbag_dir && source /apollo/cyber/setup.bash && nohup cyber_recorder record -a -k /apollo/sensor/rshelios/Scan &
    fi
    
    #设置监控阈值
    MAX_G=0
    if [ $# -ge 1 ];then
        let MAX_G=$1
    else
        MAX_G=300
    fi
    let MAX_SIZE=$(($MAX_G*1024*1024))
    
    # 无显循环监控
    while ((1))
    do
    	# 计算bag_path占用空间
        let SIZE=$(du -s $bag_path | awk -F " "  '{print $1}')
        let CUR_SIZE=$(($SIZE+1))
        # 判断是否大于设定值
        if [ $CUR_SIZE -gt $MAX_SIZE ];
        then
        	# 计算大概多出多少bag包(一般全量为2G,普通的没计算)
            EXCEED=$((($SIZE - $MAX_SIZE) / 1024 / 1024 / 2))
            i=0
            # 删除
            while ((i < $EXCEED))
            do
            	# 找到最早的文件夹
                dir=$(ls $bag_path -tr | head -1 | xargs)
                # 如果为空则跳出
                if [ "${dir}" == ""];
                then
                    break
                fi
                path="$bag_path/$dir"
                # 找出年月日文件夹下最早的bag包
                record=$(ls $path -tr | head -1 | xargs)
                # 如果为空则删除该文件夹
                if [ "${record}" == "" ];then
                    rm -rf $path
                else
                	# 不为空则删除bag包
                    bag="$path/$record"
                    rm $bag
                    let i++
                fi
            done
        else
            echo "$SIZE < $MAX_SIZE"
        fi
        #延时60s
        sleep 60
    done
}

function stop() {
    #杀死所有record
    pkill -SIGINT -f record
}

case $1 in
    start)
        shift
        start $@
    ;;
    stop)
        shift
        stop $@
    ;;
    *)
        start $@
    ;;
esac

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值