问题描述
在一个较大的ros项目中,完整的启动所有节点,需要使用多个终端窗口分别启动不同的节点。这样的操作非常繁琐,所以编写了一个脚本启动所有的节点并在Ubuntu的桌面上创建了一个快捷方式点击即可运行。
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #!/bin/bash
echo "usage: run_sim.sh [USE_BAG_FILE] [START_TYPE]" echo " USE_BAG_FILE: 是否使用bag文件, true or false, 默认为true" echo " START_TYPE: 启动类型, 0: 使用bash终端运行, 1: 使用xterm, 2: 使用gnome-terminal, 默认为1"
USE_BAG_FILE="${1:-true}" START_TYPE="${2:-1}"
PROJ_DIR="$(realpath $(dirname "${BASH_SOURCE[0]}")/..)"
if [ "$USE_BAG_FILE" = "true" ]; then echo "Starting roscore..." roscore & sleep 1
echo "Playing rosbag..." rosbag play "$PROJ_DIR/data/lidar_imu_2024-03-13.bag" & sleep 1 fi
start_node() { local package="$1" local launch_file="$2" case $START_TYPE in 0) source "$PROJ_DIR/devel/setup.bash"; roslaunch "$package" "$launch_file" & ;; 1) xterm -e "source $PROJ_DIR/devel/setup.bash; roslaunch $package $launch_file" & ;; 2) gnome-terminal --tab --title="$launch_file" -- bash -c "source $PROJ_DIR/devel/setup.bash; roslaunch $package $launch_file" & ;; *) echo "Invalid START_TYPE: $START_TYPE" exit 1 ;; esac sleep 1 }
stop_ros_nodes() { echo "Stopping all ROS nodes..." killall roscore rosmaster rosbag roslaunch }
trap 'stop_ros_nodes' SIGINT
start_node "rslidar_sdk" "start.launch" start_node "ros_mscl" "microstrain.launch" start_node "lidar_localization" "run.launch" start_node "call_planning" "localization.launch" start_node "motion_control" "motion_control.launch" start_node "yhs_can_control" "yhs_can_control.launch"
wait
|
生成桌面快捷方式
创建一个新文件,内容如下:
1 2 3 4 5 6 7
| [Desktop Entry] Version=1.0 Type=Application Name=Your_Script_Name Exec=/path/to/your_script.sh Terminal=true Icon=/path/to/your_icon.png
|
- Name:快捷方式的名称。
- Exec:要执行的脚本文件的完整路径。
- Terminal:如果脚本需要在终端中运行,设置为 true;否则设置为 false。
- Icon:可选,快捷方式的图标文件的完整路径。
将文件保存到桌面或 ~/.local/share/applications/
目录下。如果保存到桌面,文件名需要使用 .desktop
后缀,例如 your_script.desktop
。如果保存到 ~/.local/share/applications/
目录,则无需添加 .desktop
后缀。