ROS1에서 launch 파일을 부팅시에 자동으로 실행하기

개발을 완료하고, launch 파일을 부팅시에 자동으로 실행하도록 하려면 systemd 서비스를 사용해야 한다.

먼저 실행 스크립트를 작성한다(스크립트의 위치는 임의의 위치여도 상관없음)

~/test.sh

#!/bin/bash
source /home/byeongkyu/.bashrc
source /opt/ros/noetic/setup.bash
roslaunch roscpp_tutorials talker_listener.launch

다음으로 systemd 서비스 파일을 생성한다. 서비스 파일의 위치는 /etc/systemd/system 내에 위치한다.

/etc/systemd/system/bringup_ros.service

[Unit]
Description=Bringup ROS launch Test

[Service]
ExecStart=/home/byeongkyu/test.sh
Restart=on-abort

[Install]
WantedBy=multi-user.target

이제 systemd의 데몬을 재시작해주고,

$ sudo systemctl daemon-reload

생성한 서비스를 시작한다.

$ sudo systemctl start bringup_ros.service

서비스의 상태를 확인하면,

$ sudo systemctl status bringup_ros.service
● bringup_ros.service - Bringup ROS launch Test
Loaded: loaded (/etc/systemd/system/bringup_ros.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2020-10-20 13:55:10 KST; 14s ago
Main PID: 35949 (test.sh)
Tasks: 26 (limit: 18700)
Memory: 57.9M
CGroup: /system.slice/bringup_ros.service
├─35949 /bin/bash /home/byeongkyu/test.sh
├─35982 /usr/bin/python3 /opt/ros/noetic/bin/roslaunch roscpp_tutorials talker_listener.launch
├─35990 /usr/bin/python3 /opt/ros/noetic/bin/rosmaster --core -p 11311 -w 3 __log:=/root/.ros/log/6ea0106a-1290-11eb-804a-ffcb70481544/master.log
├─36000 /opt/ros/noetic/lib/rosout/rosout __name:=rosout __log:=/root/.ros/log/6ea0106a-1290-11eb-804a-ffcb70481544/rosout-1.log
├─36003 /opt/ros/noetic/lib/roscpp_tutorials/listener __name:=listener __log:=/root/.ros/log/6ea0106a-1290-11eb-804a-ffcb70481544/listener-2.log
└─36005 /opt/ros/noetic/lib/roscpp_tutorials/talker __name:=talker __log:=/root/.ros/log/6ea0106a-1290-11eb-804a-ffcb70481544/talker-3.log
Oct 20 13:55:23 byeongkyu-XPS-15-7590 test.sh[36003]: [ INFO] [1603169722.778710976]: I heard: [hello world 116]
Oct 20 13:55:23 byeongkyu-XPS-15-7590 test.sh[36003]: [ INFO] [1603169722.878691038]: I heard: [hello world 117]
Oct 20 13:55:23 byeongkyu-XPS-15-7590 test.sh[36003]: [ INFO] [1603169722.978902069]: I heard: [hello world 118]

정상적으로 실행되고 있음을 확인할 수 있다.

이제 부팅시에 시작하도록 하려면, 서비스를 enable 해주면 끝.

$ sudo systemctl enable bringup_ros.service

이제 부팅할 때, 서비스가 자동으로 실행됨.