run_map_update.sh 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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/zip_folder"
  30. cp "$UPDATE_DATA_PATH/origin_map_folder/zip_folder/map.yaml" "$UPDATE_DATA_PATH/origin_map_folder/"
  31. safe-rm "$UPDATE_DATA_PATH/origin_map_folder"/*.zip
  32. # 检查容器启动状态
  33. if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
  34. echo "Container $CONTAINER_NAME is already running."
  35. else
  36. echo "Starting container $CONTAINER_NAME..."
  37. docker start "$CONTAINER_NAME"
  38. fi
  39. command="source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"
  40. # 容器内执行地图更新脚本
  41. nohup docker exec "$CONTAINER_NAME" /bin/bash -c "$command" > "$MAP_UPDATE_LOG_PATH" 2>&1 &
  42. # 检查地图更新是否完成
  43. tail -F "$MAP_UPDATE_LOG_PATH" | while read LINE; do
  44. # echo "$LINE"
  45. # 检查录包完成标志
  46. if echo "$LINE" | grep -q "$MAP_UPDATE_FINISH_FLAG"; then # 已完成
  47. # pgm转换为png
  48. 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"
  49. # 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"
  50. 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"
  51. # 用更新后的pgm 替换 原始地图pgm
  52. sudo cp "$UPDATE_DATA_PATH/bag_folder/update_map"/*.pgm "$UPDATE_DATA_PATH/origin_map_folder/zip_folder"/map.pgm
  53. # 打包成新的地图压缩包
  54. sudo zip -j "$UPDATE_DATA_PATH"/update.zip "$UPDATE_DATA_PATH/origin_map_folder/zip_folder"/*
  55. echo "$MAP_UPDATE_FINISH_FLAG"
  56. break
  57. fi
  58. done