当前位置: 首页 > news >正文

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

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

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

sudo vim /etc/systemd/system/my_ros2_node.service

2编写服务文件

2.1在文件中添加以下内容

[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
sudo EDITOR=vim visudo  # 使用 vim 编辑
2.2.1.2添加无密码权限配置
# 允许用户 cheng 无密码执行指定命令
cheng ALL=(ALL) NOPASSWD: /usr/bin/slcand, /usr/bin/ip, /usr/bin/MicroXRCEAgent
2.2.1.3验证命令路径

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

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 测试无密码权限
sudo slcand --help        # 应直接显示帮助信息,不提示输入密码
sudo ip link show         # 应直接显示网络接口信息
sudo MicroXRCEAgent --help # 应直接显示代理帮助信息

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

# 以root身份运行,避免sudo权限问题
User=root
Group=root

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

sudo chmod 644 /etc/systemd/system/my_ros2_node.service
sudo systemctl daemon-reload
sudo systemctl enable my_ros2_node.service
sudo systemctl start my_ros2_node.service
sudo systemctl status my_ros2_node.service

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

步骤 1:获取设备的唯一标识
# 列出所有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 规则文件
sudo nano /etc/udev/rules.d/10-custom-usb.rules

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

# 规则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 规则
# 重新加载udev规则
sudo udevadm control --reload-rules
# 触发规则应用到已连接设备
sudo udevadm trigger --subsystem-match=tty --action=change
步骤 4:验证
ls -l /dev/can_usb /dev/microxrce_usb
步骤 5:修改你的脚本
# 原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

http://www.xdnf.cn/news/1438939.html

相关文章:

  • 【第四章:大模型(LLM)】10.微调方法与实战-(1)Prompt Tuning
  • C++ 多线程编程
  • c++多线程(1)------创建和管理线程td::thread
  • logging:报告状态、错误和信息消息
  • 《用 Flask + SQLAlchemy 构建任务管理应用:从基础架构到实战优化》
  • 面试题:JVM与G1要点总结
  • 哪些AI生成PPT的软件或网站支持多平台使用?都支持哪些平台?
  • Linux之centos 系统常用命令详解(附实战案例)
  • 多路复用 I/O 函数——`select`函数解析
  • 一次惊心动魄的线上事故:记一次内存泄漏Bug的排查与解决全过程
  • 从一道面试题开始:如何让同时启动的线程按顺序执行?
  • Bug排查日记:从发现到解决的完整记录
  • 在word中使用lateX公式的方法
  • 力扣115:不同的子序列
  • Unity Android 文件的读写
  • Delphi 5 中操作 Word 表格时禁用鼠标交互
  • 更新远程分支 git fetch
  • 揭开PCB隐形杀手:超周期报废的技术真相
  • AI编码生产力翻倍:你必须掌握的沟通、流程、工具与安全心法
  • 一键掌握服务器健康状态与安全风险
  • 同步工具的底层依赖:AQS
  • Kubernetes 中为 ZenTao 的 Apache 服务器添加请求体大小限制
  • 如何开发一款高稳定、低延迟、功能全面的RTSP播放器?
  • 时序数据库选型指南:为何Apache IoTDB成为工业物联网首选
  • JVM分析(OOM、死锁、死循环)(JProfiler、arthas、jvm自带工具)
  • STM32 - Embedded IDE - GCC - 使用 GCC 链接脚本限制 Flash 区域
  • 【Android】从复用到重绘的控件定制化方式
  • HarmonyOS 应用开发深度解析:基于 ArkTS 的声明式 UI 与状态管理艺术
  • HarmonyOS安装以及遇到的问题
  • Jenkins-Ansible部署discuz论坛