配置机载电脑开机自启动ros2节点和配置can0

在 Linux 系统中设置 ROS 2 节点开机自启动,可以通过 systemd 服务来实现,这是一种可靠且常用的方法。以下是具体步骤:

1.首先创建一个服务文件,例如my_ros2_node.service

bash 复制代码
sudo vim /etc/systemd/system/my_ros2_node.service

2编写服务文件

2.1在文件中添加以下内容

bash 复制代码
[Unit]
Description=My ROS2 Node Service
After=network.target

[Service]
# 以root身份运行,避免sudo权限问题
User=root
Group=root
# 环境变量配置(确保ROS正常运行)
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/ros/humble/bin"
Environment="ROS_DOMAIN_ID=0"
Environment="ROS_HOME=/home/cheng/.ros"
Environment="LD_LIBRARY_PATH=/opt/ros/humble/lib:/usr/local/lib"
WorkingDirectory=/home/cheng/Desktop/PX4_interface_ws
# 执行命令(注意续行符\后无空格)
ExecStart=/bin/bash -c " \
  modprobe slcan && \
  slcand -o -s6 -t hw -S 1000000 /dev/ttyACM0 can0 && \
  ip link set can0 up && \
  MicroXRCEAgent serial --dev /dev/TTYACM1 -b 57600 & AGENT_PID=$! && \
  sleep 6 && \
  source /opt/ros/humble/setup.bash && \
  source /home/cheng/Desktop/PX4_interface_ws/install/setup.bash && \
  ros2 run Manual_Control_Mode Manual_Control_node && \
  kill $AGENT_PID \
"
Restart=always
RestartSec=5

[Install]
WantedBy=graphical.target

2.2sudo 无密码权限怎么解决

法一:2.2.1 赋予用户权限(推荐用2.2.2的方法,上述代码使用的2.2.2)

2.2.1.1打开visudo
bash 复制代码
sudo EDITOR=vim visudo  # 使用 vim 编辑
2.2.1.2添加无密码权限配置
bash 复制代码
# 允许用户 cheng 无密码执行指定命令
cheng ALL=(ALL) NOPASSWD: /usr/bin/slcand, /usr/bin/ip, /usr/bin/MicroXRCEAgent
2.2.1.3验证命令路径

如果不确定命令的实际路径,先用 which 命令确认,避免因路径错误导致权限配置无效:

bash 复制代码
which slcand        # 输出类似 /usr/bin/slcand
which ip            # 输出类似 /usr/bin/ip
which MicroXRCEAgent # 输出类似 /usr/bin/MicroXRCEAgent

如果命令路径与配置中的不同(例如某些系统可能在 /usr/local/bin 下),以 which 命令的输出为准修改配置。

2.2.1.4保存并退出
2.2.1.5 测试无密码权限
bash 复制代码
sudo slcand --help        # 应直接显示帮助信息,不提示输入密码
sudo ip link show         # 应直接显示网络接口信息
sudo MicroXRCEAgent --help # 应直接显示代理帮助信息

法二:2.2.2 root权限执行,见2.1代码,只需要将将User和Group改为:

bash 复制代码
# 以root身份运行,避免sudo权限问题
User=root
Group=root

3.设置权限并保存,执行

bash 复制代码
sudo chmod 644 /etc/systemd/system/my_ros2_node.service
sudo systemctl daemon-reload
sudo systemctl enable my_ros2_node.service
bash 复制代码
sudo systemctl start my_ros2_node.service
sudo systemctl status my_ros2_node.service

4.通过过设备的唯一标识(而非动态编号)来绑定固定的设备名

步骤 1:获取设备的唯一标识
bash 复制代码
# 列出所有ttyACM设备及其属性
udevadm info -a -n /dev/ttyACM1 | grep -E "SUBSYSTEM|ATTRS{idVendor}|ATTRS{idProduct}|ATTRS{serial}|ATTRS{devpath}"
udevadm info -a -n /dev/ttyACM2 | grep -E "SUBSYSTEM|ATTRS{idVendor}|ATTRS{idProduct}|ATTRS{serial}|ATTRS{devpath}"

示例输出(假设):

  • 设备 1(CAN 适配器)serial="CAN_USB_1234"idVendor="0483"idProduct="5740"
  • 设备 2(MicroXRCE 设备)serial="XRCE_USB_5678"idVendor="2341"idProduct="0042"
步骤 2:编写 udev 规则文件
bash 复制代码
sudo nano /etc/udev/rules.d/10-custom-usb.rules

根据步骤 1 获取的标识,添加以下内容

bash 复制代码
# 规则1:绑定CAN适配器到 /dev/can_usb
SUBSYSTEM=="tty", ATTRS{serial}=="CAN_USB_1234", SYMLINK+="can_usb", MODE="0666"

# 规则2:绑定MicroXRCE设备到 /dev/microxrce_usb
SUBSYSTEM=="tty", ATTRS{serial}=="XRCE_USB_5678", SYMLINK+="microxrce_usb", MODE="0666"
步骤 3:生效 udev 规则
bash 复制代码
# 重新加载udev规则
sudo udevadm control --reload-rules
# 触发规则应用到已连接设备
sudo udevadm trigger --subsystem-match=tty --action=change
步骤 4:验证
bash 复制代码
ls -l /dev/can_usb /dev/microxrce_usb
步骤 5:修改你的脚本
bash 复制代码
# 原CAN接口配置
sudo slcand -o -s6 -t hw -S 1000000 /dev/can_usb can0  # 替换为/dev/can_usb
# 原MicroXRCE代理
sudo MicroXRCEAgent serial --dev /dev/microxrce_usb -b 57600  # 替换为/dev/microxrce_usb
相关推荐
boss-dog9 小时前
Ubuntu22.04 ros2-humble 源码安装 Moveit2
编译·ros2·moveit
困鲲鲲1 天前
ROS2系列 (13) : 常用Git指令入门(本地Git)
git·ros2
困鲲鲲4 天前
ROS2系列 (18) : Python服务通信实例——Client端
ros2
困鲲鲲6 天前
ROS2系列 (10) : C++话题通信节点——发布者示例
c++·ros2
杰仔coding7 天前
ROS2 Windows安装
ros2
sunshine~~~7 天前
【笔记】macOs arm架构安装虚拟机Ubuntu环境:ROS2 + Python开发
arm开发·笔记·python·macos·ros2
困鲲鲲9 天前
ROS2系列 (6) : 多功能包工作空间(Workspace)最佳实践
ros2
求索小沈9 天前
ubuntu22.04 ros2 fast_lio2 复现
slam·ros2·重定位·建图·mid360·fast_lio2
CH_Qing11 天前
【ROS2】驱动开发-雷达篇
人工智能·ros2·1024程序员节
武子康14 天前
AI研究-109-具身智能 机器人模型验证SOP流程详解|仿真 现实 回放 模板&理论
人工智能·机器人·强化学习·ros2·具身智能·仿真测试·a/b测试