要将ROS2节点设置为开机自启动,您可以创建一个systemd服务单元来管理它。
一、创建launch文件
$ cd ~/ros2_ws
$ mkdir launch
$ touch launch/ros_launch.py
编辑内容:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='can_communication',
namespace='ros_robot',
executable='can_communication',
name='ros_node1'
),
])
二、创建一个名为ros_launch.service
的服务单元文件。在终端中输入以下命令:
sudo nano /etc/systemd/system/ros_launch.service
在打开的文件中,粘贴以下内容:
[Unit]
Description=ROS Launch Service
After=network.target
[Service]
Type=simple
User=jetson
ExecStart=/bin/bash -c "source /opt/ros/galactic/setup.bash && source ~/dev_ws/install/setup.bash && ros2 launch ~/dev_ws/launch/ros_launch.py"
WorkingDirectory=/home/jetson/dev_ws
[Install]
WantedBy=default.target
请确保将<your_username>
替换为您的用户名。如果您不确定用户名,请在终端中运行whoami
命令来获取它。
保存并关闭文件。
接下来,重新加载systemd守护进程以使其注意到新的服务单元文件。在终端中运行以下命令:
sudo systemctl daemon-reload
然后,启用并启动ROS Launch服务。运行以下命令:
sudo systemctl enable ros_launch.service
sudo systemctl start ros_launch.service
现在,ROS2节点将在系统启动时自动启动。
您可以使用以下命令来检查服务状态:
sudo systemctl status ros_launch.service
您还可以使用以下命令来停止服务:
sudo systemctl stop ros_launch.service
其他命令
#查看已启动的服务列表
systemctl list-unit-files|grep enabled
#显示所有已启动的服务
systemctl list-units --type=service
#重新加载并重启ROS Launch服务
sudo systemctl restart ros_launch.service