start_container.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/bin/bash
  2. # 检查到未定义的变量则停止执行并报错
  3. set -u
  4. ## 检查参数数量
  5. #if [ "$#" -ne 6 ]; then
  6. # echo "Error: Incorrect number of arguments"
  7. # echo "Usage: $0 IMAGE_NAME CONTAINER_NAME WORLD_NAME MAP_PGM_NAME MAP_YAML_NAME MAP_BAG_NAME"
  8. # exit 1
  9. #fi
  10. #
  11. #IMAGE_NAME=$1
  12. #CONTAINER_NAME=$2
  13. #WORLD_NAME=$3
  14. #MAP_PGM_NAME=$4
  15. #MAP_YAML_NAME=$5
  16. #MAP_BAG_NAME=$6
  17. # 检查参数数量
  18. if [ "$#" -ne 2 ]; then
  19. echo "Error: Incorrect number of arguments"
  20. echo "Usage: $0 IMAGE_NAME CONTAINER_NAME"
  21. exit 1
  22. fi
  23. IMAGE_NAME=$1
  24. CONTAINER_NAME=$2
  25. WORLD_NAME="map.world"
  26. MAP_PGM_NAME="map.pgm"
  27. MAP_YAML_NAME="map.yaml"
  28. MAP_BAG_NAME="origin_map.bag"
  29. SIMULATION_PATH="/home/cicv/work/pji_desktop/simulation"
  30. # 检查容器是否存在
  31. container_id=$(docker ps -aqf name=^"${CONTAINER_NAME}"$)
  32. if [ -n "$container_id" ]; then
  33. echo "Container $CONTAINER_NAME already exists,removing..."
  34. docker rm -f "$container_id"
  35. echo "Container removed"
  36. fi
  37. # 开启容器
  38. echo "Start container..."
  39. ## 创建容器
  40. docker run -itd --name "$CONTAINER_NAME" --net=host -v "$SIMULATION_PATH"/data/pjirobot/data:/root/pjirobot/data "$IMAGE_NAME" /bin/bash
  41. ## 检查容器是否已启动
  42. container_id=$(docker ps -aqf name=^"${CONTAINER_NAME}"$)
  43. if [ -n "$container_id" ]; then
  44. echo "Container $CONTAINER_NAME started"
  45. fi
  46. # 容器依赖服务配置
  47. ## 激活conda环境
  48. source activate simulation
  49. ## 默认起点配置
  50. python "$SIMULATION_PATH"/catkin_ws/src/goal_publish/script/send_initial_pos_0521.py \
  51. "$SIMULATION_PATH"/data/map_bag/"$MAP_BAG_NAME" \
  52. "$SIMULATION_PATH"/catkin_ws/src/SimulationEnvs/launch/env_node.launch \
  53. "$SIMULATION_PATH"/catkin_ws/src/Navigation/launch/amcl.launch
  54. ## 启动仿真环境
  55. ### 选择场景文件
  56. #### 修改env_node.launch中的world_name参数
  57. xmlstarlet ed -u "/launch/include/arg[@name='world_name']/@value" \
  58. -v '$(find SimulationEnvs)/worlds/'"$WORLD_NAME" "$SIMULATION_PATH"/catkin_ws/src/SimulationEnvs/launch/env_node.launch | sponge "$SIMULATION_PATH"/catkin_ws/src/SimulationEnvs/launch/env_node.launch # -v后面如果有$必须为单引号才会被当作字符串
  59. ### 选择地图
  60. #### 修改map_server.launch中的map参数
  61. xmlstarlet ed -u "/launch/arg[@name='map']/@default" \
  62. -v "$MAP_YAML_NAME" "$SIMULATION_PATH"/catkin_ws/src/Navigation/launch/map_server.launch | sponge "$SIMULATION_PATH"/catkin_ws/src/Navigation/launch/map_server.launch
  63. #### 修改map.yaml中的pgm路径
  64. MAP_PGM_PATH="$SIMULATION_PATH"/catkin_ws/src/Navigation/map/"$MAP_PGM_NAME"
  65. #echo '.image = '\""$map_pgm_path"\"
  66. yq e '.image = '\""$MAP_PGM_PATH"\" -i "$SIMULATION_PATH"/catkin_ws/src/Navigation/map/"$MAP_YAML_NAME"
  67. ### 启动仿真
  68. cd "$SIMULATION_PATH"/catkin_ws
  69. rm -r build devel
  70. catkin_make
  71. source devel/setup.bash
  72. #### 清除过时任务
  73. pkill -f "gazebo"
  74. pkill -f "rviz"
  75. rosnode kill --all
  76. sleep 1
  77. nohup roslaunch SimulationEnvs env_node.launch > "$SIMULATION_PATH"/logs/env_node.launch.log 2>&1 &
  78. sleep 1
  79. disown
  80. nohup roslaunch Navigation navigation.launch > "$SIMULATION_PATH"/logs/navigation.launch.log 2>&1 &
  81. disown
  82. sleep 1
  83. ##roslaunch SimulationEnvs env_node.launch
  84. #roslaunch Navigation navigation.launch
  85. # 容器初始配置
  86. # 容器内路径参数
  87. MAP_SERVICE_PATH="/home/load_map_service"
  88. PJI_NAV_PATH="/home/pji_nav"
  89. PJI_ENGINE_PATH="/home/pji_engine"
  90. # 启动加载地图服务
  91. command="cd $MAP_SERVICE_PATH && source devel/setup.bash && nohup rosrun load_map load_map >/dev/null 2>&1 &"
  92. docker exec "$CONTAINER_NAME" /bin/bash -c "$command"
  93. sleep 0.5
  94. # 启动导航节点
  95. command="cd $PJI_NAV_PATH && source install/setup.bash && nohup roslaunch pji_navigation navigation.launch >/dev/null 2>&1 &"
  96. docker exec "$CONTAINER_NAME" /bin/bash -c "$command"
  97. sleep 0.5
  98. # 启动engine节点
  99. command="cd $PJI_ENGINE_PATH && source install/setup.bash && nohup roslaunch pji_launch pji_engine.launch >/dev/null 2>&1 &"
  100. docker exec "$CONTAINER_NAME" /bin/bash -c "$command"
  101. sleep 0.5
  102. echo "done"