在查找网上的各种开机自启动资料配置好开机自启动后,使用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