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

推荐订阅源

D
Docker
博客园 - 三生石上(FineUI控件)
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
爱范儿
爱范儿
博客园 - 【当耐特】
雷峰网
雷峰网
S
SegmentFault 最新的问题
美团技术团队
Blog — PlanetScale
Blog — PlanetScale
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
J
Java Code Geeks

马浩飞丨博客

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->自定义) 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->自定义) · Haofei Ma
Haofei Ma · 2024-08-22 · via 马浩飞丨博客

机器人实验设备机器人设备使用

发布于 更新于

字数: 461阅读约 2 分钟阅读量: 218评论数:

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

在机器人设备调试过程中,我们经常会用到通过 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

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

2. 单设备情况

创建并编辑配置文件:

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

写入规则,例如:

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

其中

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

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

service udev reload
service udev restart

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

/dev/gripper -> ttyUSB0

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

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

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

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

# 将 /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

你会看到类似输出:

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

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

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

sudo vim /etc/udev/rules.d/usb.rules
# 左手夹爪
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 服务:

service udev reload
service udev restart

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

/dev/gripper -> ttyUSB0

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