run_map_update.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. # 检查到未定义的变量则停止执行并报错
  3. set -u
  4. # 检查参数数量
  5. if [ "$#" -ne 2 ]; then
  6. echo "Error: Incorrect number of arguments"
  7. echo "Usage: $0 CONTAINER_NAME DOWNLOAD_FILE_PATH"
  8. exit 1
  9. fi
  10. CONTAINER_NAME=$1
  11. DOWNLOAD_FILE_PATH=$2
  12. MAP_UPDATE_PATH="/home/cicv/work/pji_desktop/map_update"
  13. UPDATE_DATA_PATH="$MAP_UPDATE_PATH/data"
  14. MAP_UPDATE_LOG_PATH="$MAP_UPDATE_PATH/logs/map_update.log"
  15. MAP_UPDATE_FINISH_FLAG="Result JSON file created"
  16. # 容器内路径
  17. CONTAINER_WORKSPACE="/home/cartographer_detailed_comments_ws-master"
  18. # 清除历史文件
  19. ## 检查要删除的目录是否为空
  20. if [[ -z "$UPDATE_DATA_PATH" ]]; then
  21. echo "Error: Variable UPDATE_DATA_PATH is not set or empty"
  22. exit 1
  23. fi
  24. ## 删除对应目录
  25. sudo safe-rm -rf "$UPDATE_DATA_PATH"/*
  26. # 解压地图更新对应的压缩包
  27. unzip "$DOWNLOAD_FILE_PATH" -d "$UPDATE_DATA_PATH"
  28. # 解压原始地图
  29. unzip "$UPDATE_DATA_PATH/origin_map_folder"/*.zip -d "$UPDATE_DATA_PATH/origin_map_folder"
  30. safe-rm "$UPDATE_DATA_PATH/origin_map_folder"/*.zip
  31. # 检查容器启动状态
  32. if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
  33. echo "Container $CONTAINER_NAME is already running."
  34. else
  35. echo "Starting container $CONTAINER_NAME..."
  36. docker start "$CONTAINER_NAME"
  37. fi
  38. command="source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"
  39. # 容器内执行地图更新脚本
  40. nohup docker exec "$CONTAINER_NAME" /bin/bash -c "$command" > "$MAP_UPDATE_LOG_PATH" 2>&1 &
  41. # 检查地图更新是否完成
  42. tail -F "$MAP_UPDATE_LOG_PATH" | while read LINE; do
  43. # echo "$LINE"
  44. # 检查录包完成标志
  45. if echo "$LINE" | grep -q "$MAP_UPDATE_FINISH_FLAG"; then # 已完成
  46. # pgm转换为png
  47. 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"
  48. # 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"
  49. 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"
  50. # 用更新后的pgm 替换 原始地图pgm
  51. sudo cp "$UPDATE_DATA_PATH/bag_folder/update_map"/*.pgm "$UPDATE_DATA_PATH/origin_map_folder"/map.pgm
  52. # 打包成新的地图压缩包
  53. sudo zip -j "$UPDATE_DATA_PATH"/update.zip "$UPDATE_DATA_PATH/origin_map_folder"/*
  54. echo "$MAP_UPDATE_FINISH_FLAG"
  55. break
  56. fi
  57. done