脚本桌面快捷启动

问题描述

在一个较大的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
##
## author: ydx
## description: 运行项目
## date: 2024-03-15

# 打印用法说明
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]}")/..)"

# 如果需要使用bag文件, 则播放bag文件
if [ "$USE_BAG_FILE" = "true" ]; then
# 启动 roscore
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
}

# 函数:停止所有ROS节点
stop_ros_nodes() {
echo "Stopping all ROS nodes..."
killall roscore rosmaster rosbag roslaunch
}

# 设置Ctrl-C信号处理函数
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 后缀。