1.ros自带的启动程序

2.图形界面配置启动项

  • 在/etc/init.d/路径下创建 start.sh文件

  • 在文件内编辑要自启动的指令

  • 且修改文件权限为可执行权限

sudo chmod 777 start.sh
  • 输入指令gnome-session-properties 会出现一个配置界面,将要执行的start.sh文件的路径添加进去

3.rc.local启动

  • 首先编辑/lib/systemd/system目录下的rc-local.service文件,内容如下(sudo gedit rc-local.service)

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
  • 编辑rc.local文件,可添加指令(注意添加绝对路径)

  • 修改文件权限为可执行权限

  • sudo chmod 777 rc.local
    

  • 路径:/etc

  • 可通过

sudo systemctl enable rc-local //使能自启服务
sudo systemctl start rc-local.service //手动启动自启项服务
sudo systemctl status rc-local.service //查看启动项状态
  • 目前的启动文件如下,在循环执行的语句后面一定要加"&",这样做的原因是另应用执行一次后,转为后台执行,如果不加则可能回在系统启动界面卡住,导致进不去系统

  • #!/bin/bash -e
    
    export ROS_LOG_DIR=/home/ly/fish_ws/log #ros文件的log路径 这个必须要写 否则会报python类的错误
    
    . /opt/ros/eloquent/setup.sh  #更新ros应用 否则需要在下面的ros指令中添加绝对路径
    . /home/ly/fish_ws/install/setup.sh  #更新要执行的ros功能包路径 
    
    #ros2 launch /home/ly/fish_ws/src/topic_multi_thread/lanuch/fish_launch.py &
    #ros2 launch /home/ly/fish_ws/src/topic_multi_thread/lanuch/fish_launch.py &
    #ros2 launch topic_multi_thread fish_launch.py &
    ros2 run topic_multi_thread mt_pub_sub &  #执行ros的launch文件  
    exit 0

  • 异常问题

(1)当启动服务阶段(下面指令)出现error提示,为rc.local文件语法错误,修正后无错。报错截图后续补充

sudo systemctl start rc-local.service //手动启动自启项服务

(2)通过启动状态看到获取主目录相关错误,如下:

● rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (exited) since Mon 2022-06-20 20:21:02 PDT; 2s ago
     Docs: man:systemd-rc-local-generator(8)
  Process: 2166 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)

6月 20 20:21:02 ubuntu systemd[1]: Starting /etc/rc.local Compatibility...
6月 20 20:21:02 ubuntu systemd[1]: Started /etc/rc.local Compatibility.
6月 20 20:21:03 ubuntu rc.local[2166]: [ERROR] [rcl]: Failed to configure logging: Failed to get users home directory, at /tmp/binarydeb/ros-eloquent-rcl-logging-spdlog-0.3.3/src/rcl_logging_spdlog.cpp:90
6月 20 20:21:03 ubuntu rc.local[2166]: Failed to init: Failed to get users home directory, at /tmp/binarydeb/ros-eloquent-rcl-logging-spdlog-0.3.3/src/rcl_logging_spdlog.cpp:90

需要在rc.local添加环境变量主目录为当前用户目录,如下语句

export HOME=/home/lyzln

(3)通过启动状态看到Python相关错误,如下(错误截图待补充):

解决办法:需要在rc.local添加日志路径环境变量配置语句如下:

export ROS_LOG_DIR=/home/lyzln/fish_ws/log

Logo

更多推荐