惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
I
InfoQ
V
Visual Studio Blog
M
MIT News - Artificial intelligence
H
Help Net Security
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
A
About on SuperTechFans
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
S
SegmentFault 最新的问题
WordPress大学
WordPress大学

马浩飞丨博客

ROS实现多机话题通信 ROS实现多机话题通信 · Haofei Ma Cloudflare R2 个人图床 Cloudflare R2 个人图床 · Haofei Ma 【Apple Vision Pro开发】开发入门 · Haofei Ma Isaac Sim 机械臂逆运动学控制 Isaac Sim 机械臂逆运动学控制 · Haofei Ma ROS2_Rviz2显示URDF模型 ROS2_Rviz2显示URDF模型 · Haofei Ma ROS2基本命令总结 ROS2基本命令总结 · Haofei Ma 使用zsh创建更高效的shell环境 使用zsh创建更高效的shell环境 · Haofei Ma Isaac Sim 仿真环境使用简介 Isaac Sim 仿真环境使用简介 · Haofei Ma Ubuntu设置定时任务 Ubuntu设置定时任务 · Haofei Ma 审稿意见撰写流程 Ubuntu 固定USB设备端口名(ttyUSB0->自定义) · Haofei Ma Git+Github的代码备份与多设备同步 Git+Github的代码备份与多设备同步 · Haofei Ma 【设备使用】法奥意威 FR5 机械臂 Python 控制 【设备使用】法奥意威 FR5 机械臂 Python 控制 · Haofei Ma Python识别图片中文字和数字_easyocr Python识别图片中文字和数字_easyocr · Haofei Ma 【设备使用】omega.7主手配置与使用方法 【设备使用】omega.7主手配置与使用方法 · Haofei Ma 【论文笔记】ACT 使用低成本硬件的双手操作模仿学习 【论文笔记】ACT 使用低成本硬件的双手操作模仿学习 · Haofei Ma HDF5数据文件格式
Ubuntu 固定USB设备端口名(ttyUSB0->自定义)
马浩飞 · 2024-08-22 · via 马浩飞丨博客

在机器人设备调试过程中,我们经常会用到通过 USB 转串口连接的夹爪、传感器或其他外设。

系统默认会将这些设备识别为 /dev/ttyUSB0/dev/ttyUSB1 等。但是:

  • 每次插拔设备,编号可能会变化,代码里硬编码 /dev/ttyUSB0 等名称会失效。
  • 每次使用前都需要 chmod 777 /dev/ttyUSB0 来获取读写权限。

因此希望通过给每个设备分配一个 固定且自定义的端口名(例如 /dev/left_gripper/dev/right_gripper),这样无论插拔顺序如何,代码都能稳定识别设备。

1. 查询设备信息

首先用 lsusb 查看设备的 厂商 ID(idVendor)产品 ID(idProduct)

可以拔插一次观察多出来的那一行就是夹爪设备,例如我的设备 ID 是 0403:6001,分别代表 idVendor:idProduct

1
Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

2. 单设备情况

创建并编辑配置文件:

1
sudo vim /etc/udev/rules.d/usb.rules

写入规则,例如:

1
KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0777", SYMLINK+="gripper"

其中

  • KERNEL:不修改
  • ATTRS{idVendor}:填写 ID 冒号前的部分
  • ATTRS{idProduct}:填写 ID 冒号后的部分
  • MODE:默认设置为 0777 即可,可读可写可执行
  • SYMLINK:自定义,也就是想要将 ttyUSB0 改成什么一个固定的名字

编辑完成后,重启 udev 服务:

1
2
service udev reload
service udev restart

重新插拔设备,然后 ls /dev/,就可以看到自己设置的端口名出现。

1
/dev/gripper -> ttyUSB0

之后你就可以直接在代码里用 /dev/gripper

3. 如果连接了两台同样的设备

多个同型号设备可能会有相同的 idVendor:idProduct,这时需要进一步区分。

大多数芯片带有唯一的 序列号,可以用以下命令查看:

1
2
3
# 将 /dev/ttyUSB0 和 /dev/ttyUSB1 改成你要区分的两个设备
udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n 1
udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n 1

你会看到类似输出:

1
2
ATTRS{serial}=="BG00VUIX"
ATTRS{serial}=="BG00VVHF"

这样我们就能通过 序列号 唯一标识不同的设备。

在规则中写入ATTRS{serial}=="BG00VUIX",,例如:

1
sudo vim /etc/udev/rules.d/usb.rules
1
2
3
4
5
# 左手夹爪
KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="BG00VUIX", MODE:="0777", SYMLINK+="left_gripper"

# 右手夹爪
KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="BG00VVHF", MODE:="0777", SYMLINK+="right_gripper"

编辑完成后,重启 udev 服务:

1
2
service udev reload
service udev restart

重新插拔设备,然后 ls /dev/,就可以看到自己设置的端口名出现。

1
/dev/gripper -> ttyUSB0

之后你就可以直接在代码里用 /dev/gripper

Ubuntu 固定USB设备端口名(ttyUSB0->自定义)

打赏

  • 微信支付

    微信支付

  • 支付宝

    支付宝