#!/bin/bash # 检查到未定义的变量则停止执行并报错 set -u # 检查参数数量 if [ "$#" -ne 2 ]; then echo "Error: Incorrect number of arguments" echo "Usage: $0 CONTAINER_NAME DOWNLOAD_FILE_PATH" exit 1 fi CONTAINER_NAME=$1 DOWNLOAD_FILE_PATH=$2 MAP_UPDATE_PATH="/home/cicv/work/pji_desktop/map_update" UPDATE_DATA_PATH="$MAP_UPDATE_PATH/data" MAP_UPDATE_LOG_PATH="$MAP_UPDATE_PATH/logs/map_update.log" MAP_UPDATE_FINISH_FLAG="Result JSON file created" # 容器内路径 CONTAINER_WORKSPACE="/home/cartographer_detailed_comments_ws-master" # 清除历史文件 ## 检查要删除的目录是否为空 if [[ -z "$UPDATE_DATA_PATH" ]]; then echo "Error: Variable UPDATE_DATA_PATH is not set or empty" exit 1 fi ## 删除对应目录 sudo safe-rm -rf "$UPDATE_DATA_PATH"/* # 解压地图更新对应的压缩包 unzip "$DOWNLOAD_FILE_PATH" -d "$UPDATE_DATA_PATH" # 解压原始地图 unzip "$UPDATE_DATA_PATH/origin_map_folder"/*.zip -d "$UPDATE_DATA_PATH/origin_map_folder/zip_folder" cp "$UPDATE_DATA_PATH/origin_map_folder/zip_folder/map.yaml" "$UPDATE_DATA_PATH/origin_map_folder/" safe-rm "$UPDATE_DATA_PATH/origin_map_folder"/*.zip # 检查容器启动状态 if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then echo "Container $CONTAINER_NAME is already running." else echo "Starting container $CONTAINER_NAME..." docker start "$CONTAINER_NAME" fi command="source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json" # 容器内执行地图更新脚本 nohup docker exec "$CONTAINER_NAME" /bin/bash -c "$command" > "$MAP_UPDATE_LOG_PATH" 2>&1 & # 检查地图更新是否完成 tail -F "$MAP_UPDATE_LOG_PATH" | while read LINE; do # echo "$LINE" # 检查录包完成标志 if echo "$LINE" | grep -q "$MAP_UPDATE_FINISH_FLAG"; then # 已完成 # pgm转换为png python "$MAP_UPDATE_PATH/convert_pgm_to_png.py" "$UPDATE_DATA_PATH/bag_folder/mapBuf/map.pgm" "$UPDATE_DATA_PATH/bag_folder/mapBuf/map_pre.png" # python "$MAP_UPDATE_PATH/convert_pgm_to_png.py" "$UPDATE_DATA_PATH/bag_folder/update_map"/*.pgm "$UPDATE_DATA_PATH/bag_folder/update_map/map_update.png" python "$MAP_UPDATE_PATH/convert_pgm_to_png.py" "$UPDATE_DATA_PATH/bag_folder/update_map"/*.pgm "$UPDATE_DATA_PATH/bag_folder/mapBuf/map_update.png" # 用更新后的pgm 替换 原始地图pgm sudo cp "$UPDATE_DATA_PATH/bag_folder/update_map"/*.pgm "$UPDATE_DATA_PATH/origin_map_folder/zip_folder"/map.pgm # 打包成新的地图压缩包 sudo zip -j "$UPDATE_DATA_PATH"/update.zip "$UPDATE_DATA_PATH/origin_map_folder/zip_folder"/* echo "$MAP_UPDATE_FINISH_FLAG" break fi done