generate_world.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/bin/bash
  2. # 检查到未定义的变量则停止执行并报错
  3. set -u
  4. # 检查参数数量
  5. if [ "$#" -ne 1 ]; then
  6. echo "Error: Incorrect number of arguments"
  7. echo "Usage: $0 BAG_PATH"
  8. exit 1
  9. fi
  10. BAG_PATH=$1
  11. SIMULATION_PATH="/home/cicv/work/pji_desktop/simulation"
  12. MAP2GAZEBO_LOG_PATH="$SIMULATION_PATH/logs/run_map2gazebo.log"
  13. GAZEBO_WORLD_LOG_PATH="$SIMULATION_PATH/logs/gazebo_world.log"
  14. MAP2GAZEBO_START_FLAG="map2gazebo running"
  15. GAZEBO_WORLD_END_FLAG="Exported STL"
  16. # 激活conda环境
  17. source activate simulation
  18. # 清除环境
  19. ## kill ros节点
  20. rosnode kill --all
  21. ## 删除历史日志
  22. if [ -f "$MAP2GAZEBO_LOG_PATH" ]; then
  23. rm "$MAP2GAZEBO_LOG_PATH"
  24. fi
  25. sleep 0.5
  26. # 执行命令
  27. command="cd $SIMULATION_PATH/catkin_map2gazebo && rm -r build devel && catkin_make && source devel/setup.bash && roslaunch --screen map2gazebo map2gazebo.launch"
  28. nohup script -q -c bash -c "$command" > "$MAP2GAZEBO_LOG_PATH" 2>&1 &
  29. disown
  30. # 检查脚本启动标志
  31. tail -f "$MAP2GAZEBO_LOG_PATH" | while read LINE; do
  32. # 检查脚本是否启动
  33. if echo "$LINE" | grep -q "$MAP2GAZEBO_START_FLAG"; then
  34. # 此标志输出给前端,请勿删除或修改!
  35. echo "Service map2gazebo started."
  36. sleep 0.5
  37. # 播包 (含/map话题)
  38. rosbag play "$BAG_PATH"
  39. sleep 0.5
  40. fi
  41. # 检查STL文件是否生成
  42. if echo "$LINE" | grep -q "$GAZEBO_WORLD_END_FLAG"; then
  43. # 清除环境
  44. ## kill上面启动的脚本
  45. pkill -f "map2gazebo"
  46. ## 关闭gazebo
  47. pkill -f "gazebo"
  48. echo "Service map2gazebo stopped."
  49. # 执行命令
  50. command="cd $SIMULATION_PATH/catkin_map2gazebo && rm -r build devel && catkin_make && source devel/setup.bash && roslaunch --screen map2gazebo gazebo_world.launch"
  51. nohup script -q -c bash -c "$command" > "$GAZEBO_WORLD_LOG_PATH" 2>&1 &
  52. disown
  53. fi
  54. done