Ubuntu22.04使用Systemd设置ROS 2开机自启动遇到的问题

在查找网上的各种开机自启动资料配置好开机自启动后,使用ros2 topic list不能显示话题。

1、问题解决:用户问题与domenID问题

在root用户下能看到话题,但是不能在普通用户下看到,在启动脚本中使用以下指令后,仍然无法在普通用户看到话题。

复制代码
#echo "nvidia" | su - nvidia -s /bin/bash /home/nvidia/rc.sh

解决方法:

将root用户和普通用户的~/.bashrc环境变量中的export ROS_DOMAIN_ID=0

复制代码
sudo vi ~/.bashrc
export ROS_DOMAIN_ID=0

sudo su
sudo vi ~/.bashrc
export ROS_DOMAIN_ID=0

2、ROS2开机自启动服务教程

以下是通过Systemd设置ROS 2开机自启动方法:

创建服务:

复制代码
sudo vi /usr/lib/systemd/system/start-one.service

[Unit]
Description=start-one
 
[Service]
Type=simple
 
# 当前的用户名
User=nvidia

# 开机自启动脚本start_one.sh
ExecStart=/home/nvidia/start_one.sh    
 
PrivateTmp=true
KillMode=control-group
 
[Install]
WantedBy=multi-user.target

创建自启动脚本:

复制代码
sudo vi start_one.sh

#!/bin/bash
cd /home/nvidia/dev_ws
source  ~/.bashrc
source /opt/ros/humble/setup.bash
source /home/nvidia/dev_ws/install/setup.bash
ros2 launch package package.launch.xml

给服务和脚本权限:

复制代码
sudo chmod 777 /usr/lib/systemd/system/start-one.service
sudo chmod 777 start_one.sh

重新加载服务:

复制代码
sudo systemctl daemon-reload  

设置开机自启动服务:

复制代码
sudo systemctl start start-one.service 
sudo systemctl enable start-one.service

查看服务状态:

复制代码
sudo systemctl status start-one.service

取消关闭服务取消开机自启动:

复制代码
sudo systemctl stop rstart-one.service
sudo systemctl disable start-one.service

3、多个ROS2开机自启动服务教程

如果有多个ROS2的launch,则需要创建多个服务,并且需要在服务里设置好先后顺序。

先按照上述设置好start-one.service,增加优先级设置。

复制代码
[Unit]
Description=start-one
Before=start-two.service #这里是设置优先级的,也就是说当前的服务在start-two.service之前启动
 
[Service]
Type=simple
 
# 当前的用户名
User=nvidia

# 开机自启动脚本start_one.sh
ExecStart=/home/nvidia/start_one.sh    
 
PrivateTmp=true
KillMode=control-group
 
[Install]
WantedBy=multi-user.target

创建第二个服务:

复制代码
sudo vi /usr/lib/systemd/system/start-two.service

[Unit]
Description=start-two
After=start-one.service
 
[Service]
Type=simple
 
# 当前的用户名
User=nvidia

# 开机自启动脚本start_two.sh   
ExecStart=/home/nvidia/start_two.sh    
 
PrivateTmp=true
KillMode=control-group
 
[Install]
WantedBy=multi-user.target

创建自启动脚本:

复制代码
sudo vi start_two.sh    

#!/bin/bash
cd /home/nvidia/dev_ws
source  ~/.bashrc
source /opt/ros/humble/setup.bash
source /home/nvidia/dev_ws/install/setup.bash
ros2 launch package_two package_two.launch.xml

给服务和脚本权限:

复制代码
sudo chmod 777 /usr/lib/systemd/system/start-two.service
sudo chmod 777 start_two.sh  

重新加载服务:

复制代码
sudo systemctl daemon-reload  

设置开机自启动服务:

复制代码
sudo systemctl start start-two.service 
sudo systemctl enable start-two.service

查看服务状态:

复制代码
sudo systemctl status start-two.service
相关推荐
数据与后端架构提升之路15 小时前
实战:手搓一个“BEV 级”自动驾驶训练加速平台 —— 当 RTX 4090 遇上多模态数据
人工智能·机器学习·自动驾驶
Sanse_21 小时前
Ubuntu18.04下面配置阿木实验室amov仿真系统Promethus的一系列运行环境
人工智能·机器人·自动驾驶
康谋自动驾驶1 天前
汽车多总线数据采集:挑战、架构与同步策略全解析
算法·自动驾驶·开发·数据处理·总线数据
Mr.Winter`1 天前
轨迹优化 | 微分动态规划DDP与迭代线性二次型调节器iLQR理论推导
人工智能·算法·机器人·自动驾驶·动态规划·ros·具身智能
国科安芯2 天前
无人驾驶物流车网关的多路CANFD冗余架构与通信可靠性分析
单片机·嵌入式硬件·性能优化·架构·自动驾驶·安全性测试
Ryan老房2 天前
自动驾驶数据标注-L4-L5级别的数据挑战
人工智能·目标检测·目标跟踪·自动驾驶
极智视界4 天前
目标检测数据集 - 自动驾驶场景车辆方向检测数据集下载
人工智能·目标检测·自动驾驶
yuanmenghao4 天前
车载Linux 系统问题定位方法论与实战系列 - OOM 与资源耗尽:系统是如何被“慢慢拖死”的
linux·运维·服务器·网络·驱动开发·自动驾驶
码农三叔5 天前
(9-2-02)自动驾驶中基于概率采样的路径规划:基于Gazebo仿真的路径规划系统(2)
人工智能·机器学习·机器人·自动驾驶·rrt
地平线开发者5 天前
征程 6 算法工具链 | PTQ 深度使用指南
算法·自动驾驶