1. 通过gnome-terminal实现开机自启动

1.1 创建一个启动脚本

cd ~
touch start_joy.sh
chmod +x start_joy.sh

1.2 编辑脚本文件

vim start_joy.sh
#!/bin/zsh

source /opt/ros/noetic/setup.zsh
source /home/nv/ants/devel/setup.zsh

roslaunch vehicle_rea joy_control.launch

1.3 配置自动启动

  • 创建 ~/.config/autostart 目录(如果它不存在的话)
  • 使用 gnome-terminal 打开一个新的终端窗口并执行上述脚本。编辑 ~/.config/autostart 目录下的 .desktop 文件来实现这一点
mkdir -p ~/.config/autostart

创建一个新的 .desktop 文件,例如 start_joy.desktop

vim ~/.config/autostart/start_joy.desktop
[Desktop Entry]
Type=Application
Exec=gnome-terminal -- zsh -c "~/start_joy.sh; exec zsh"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Start Joy
Name=Start Joy
Comment[en_US]=Run start_joy.sh on startup
Comment=Run start_joy.sh on startup

其中zsh可以替换为bash

gnome-terminal可以替换为terminator

2. 通过systemd实现开机自启动

2.1 创建systemd服务文件

/etc/systemd/system/目录下创建.service文件来定义服务

sudo vim /etc/systemd/system/roslaunch-test.service

示例

[Unit]
Description=Auto-start ROS launch (test/test.launch)
After=network.target  # 确保网络启动后再运行(若依赖网络,如激光雷达IP通信)
Requires=roscore.service  # 可选:若需单独启动roscore,需先配置roscore.service

[Service]
User=USERNAME  # 替换为你的用户名(如 fc1),避免以root运行ROS
Group=USERNAME
WorkingDirectory=/home/USERNAME  # 工作目录(可改为ROS工作空间路径)
Environment="ROS_DISTRO=noetic"  # 替换为你的ROS版本(如 melodic/noetic/foxy)
Environment="CATKIN_WS=/home/USERNAME/catkin_ws"  # 替换为你的工作空间路径

# 核心命令:加载ROS环境并启动launch文件
ExecStart=/bin/bash -c " \
  source /opt/ros/$ROS_DISTRO/setup.bash && \
  source $CATKIN_WS/devel/setup.bash && \
  roslaunch test test.launch \
"

# 重启策略:若服务崩溃,自动重启(可选)
Restart=on-failure
RestartSec=5  # 崩溃后5秒重启

# 日志输出:默认写入systemd日志(journalctl查看)
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target  # 多用户模式下开机启动

2.2 配置与启动服务

修改.service文件后,需刷新 systemd守护进程

sudo systemctl daemon-reload

设置开机自启并启动服务

# 启用开机自启
sudo systemctl enable roslaunch-test.service

# 立即启动服务(无需重启测试)
sudo systemctl start roslaunch-test.service

2.3 验证与调试

检查服务状态

sudo systemctl status roslaunch-test.service

停止/禁用服务

# 停止当前服务
sudo systemctl stop roslaunch-test.service

# 禁用开机自启
sudo systemctl disable roslaunch-test.service