run_map_update.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
  30. echo "Container $CONTAINER_NAME is already running."
  31. else
  32. echo "Starting container $CONTAINER_NAME..."
  33. docker start "$CONTAINER_NAME"
  34. fi
  35. command="source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"
  36. # 容器内执行地图更新脚本
  37. nohup docker exec "$CONTAINER_NAME" /bin/bash -c "$command" > "$MAP_UPDATE_LOG_PATH" 2>&1 &
  38. # 检查地图更新是否完成
  39. tail -f "$MAP_UPDATE_LOG_PATH" | while read LINE; do
  40. # echo "$LINE"
  41. # 检查录包完成标志
  42. if echo "$LINE" | grep -q "$MAP_UPDATE_FINISH_FLAG"; then # 已完成
  43. # pgm转换为png
  44. 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"
  45. # 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"
  46. 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"
  47. echo "$MAP_UPDATE_FINISH_FLAG"
  48. break
  49. fi
  50. done