Ubuntu18.04 工控机绑定USB串口(包括usb相机)


20221123 updated
新更新的绑定usb相机的方法,之前有个理解误区,其实用我记录的方法去绑定,必须要跟PC的端口进行绑定,就是说,即使用芯片绑定的方法,其实已经查询了这个usb芯片接在哪个PC上的端口了,所以20221110更新的版本说明有点问题,方法没有错,但是细节说错了,已修改



20221110 updated
之前的方法绑定那些/dev/ttyUSB*的外设可以,但是如果用同样的方法绑定那些usb相机就会出问题/dev/video*,特此补充一下绑定usb相机的方法,其实很类似,只要稍微补充一点东西就可以了。更新部分,在最后


1. /dev/ttyUSB*设备绑定方法

做实验经需要用到不同的传感器设备,这时就需要调用对应的串口号。

如果只需要将外部的串口设备(如: 底盘控制的单片机、雷达、 IMU) 临时接入工控机,请参考方法 1,这
一设置断电重启后会失效;

每次插拔和重启都会影响串口的编号,所以如果这个设备是长期接入工控机的,就可以考虑使用长期绑定串口号,请参考方法 2
特别注意:
这种方法设置完成后,对应的串口就跟这个USB设备绑定了,不要换成其他USB设备,可能参数严重后果,需要注意。

1.1 临时绑定

1)查看当前终端串口的设备号 ls /dev/tty*
serial
2)插入临时使用的外设串口
3)再次查看终端串口的设备号 ls /dev/tty*,这时是为了看看多了哪个一个串口号,那就是接入的外设
serial2
4)假设该设备号为/dev/ttyUSB0,给设备赋予可读写权限
sudo chmod 777 /dev/ttyUSB0
5)修改自己代码中对应*.launch 文件或cpp或py文件里面的设备号,以launch文件为例,打开 minimal.launch 文件,修改 com_port 的取值为对应的设备号,例如


1.2.长期绑定

长期绑定也有两种方法,各有优缺点:
①根据外设usb的芯片编号来绑定串口号
②根据工控机上的usb口固定串口号
如果,有两个设备的usb芯片是相同的,那就应该用第二种方法,不然会因为芯片编号相同,如1a86:7523,这时的串口号对应着这两个外设,这可能使得串口没办法获取预期的信息。
用第二种方法,就避免了上述的问题,但是,之后不管那个外设接到这个工控机的usb口,比如设定的串口号为“base”,那么无论哪个外设接到这个工控机的usb口,都会显示“/dev/base”。
理解清楚两种方法的优劣,选择适合的绑定方法。

1.2.1 方法一:根据usb芯片编号绑定

1)查看设备串口号芯片编号lsusb
没接外设usb时输入一次,接入后又输入一次,看看多了哪个usb的信息method1-1从上图中可以发现,多了下面这个设备的信息,这是一个IMU,我发现很多imu用的都是这块芯片,有兴趣可以留意一下。

Bus 003 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

上面最重要的信息就是 067b:2303,在下一步就会用到

2)创建 rules 文件
① 先 cd /etc/udev/rules.d/
② 创建myusb.rules文件,sudo gedit myusb.rules
③ 输入

KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", SYMLINK+="imu"

其中的“067b”,"2303"就是上一步我们查到的usb芯片的ID,填入对应的位置即可,
而最后的"imu"则是我们定义的usb串口名,之后调用就使用这个串口名,如 “/dev/imu”

每一行对应一个串口设备,若有很多的外设,就按照第一行的格式进行添加。

3)使设置生效

sudo udevadm control --reload-rules && sudo service udev restart && sudo udevadm trigger

或者

sudo reboot

或者
先拔掉usb外设,输入

sudo service udev reload
sudo service udev restart

再接上外设

4)测试
在终端输入ls /dev/imu,如果有反馈就说明,成功啦,没有的话仔细检查一下步骤有没有错。
method1-2

1.2.2 方法二:根据工控机usb口编号绑定

1)根据usb的串口名查看工控机上的usb口编号
udevadm info /dev/ttyUSB0
method2从上图中,”3-1:1.0”就是工控机上usb口的编号,下一步操作将会用到。

2)跟方法一一样,创建 rules 文件
① 先 cd /etc/udev/rules.d/
② 创建myusb.rules文件,sudo gedit myusb.rules
③ 输入

ACTION=="add",KERNELS=="3-1:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="imu"

其中的KERNELS对应的编号就是上一步我们查到的工控机usb口的编号,
而最后的"imu"则是我们定义的usb串口名,之后调用就使用这个串口名,如 “/dev/imu”

每一行对应一个串口设备,若有很多的外设,就按照第一行的格式进行添加。

3)使设置生效

sudo udevadm control --reload-rules && sudo service udev restart && sudo udevadm trigger

或者

sudo reboot

或者
先拔掉usb外设,输入

sudo service udev reload
sudo service udev restart

再接上外设

4)测试
在终端输入ls /dev/imu,如果有反馈就说明,成功啦,没有的话仔细检查一下步骤有没有错。


20221110 updated
20221123 updated some information

2. /dev/video*设备绑定方法

同样有两种绑定方法:

  • 第一种是根据相机芯片型号
  • 第二种是根据端口号绑定

选用的原则跟/dev/ttyUSB*不一样!!!
要注意的是,这两种方法都需要绑定PC端口,就是说,使用这两种方法的其中一种之后,USB相机的借口都跟PC的端口绑定了,没法做到像/dev/ttyUSB*一样,可以根据usb芯片来执行绑定,没那么灵活了,如果我的说明有问题,希望路过的大神指点指点。


如果,不需要调用python的opencv读取相机,跳过下面这段,直接从2.1或2.2开始看
PS:如果需要用python的opencv调用绑定的相机,需要注意一下自定义的名字,因为如果改成任意的英文名,用opencv的函数cv2.VideoCapture(0)打开相机,里面的0指的就是相机的识别编号,但是如果改成英文,如cv2.VideoCapture(eecam),就会出错,打不开,这个跟这个函数的读取规则有关系,应该就是默认/dev/video*这样的格式,所以输入的数字直接就跟前缀/dev/video拼在一起了,这个其实花点时间改一下它的函数也可以,简单一点的方法是,把自定义的命名也改成video*的形式,这是这里的数字可以设大一点,一般都不会接到这么多的相机,比如设成video22。这样再调用cv2.VideoCapture(22)就没有问题了,亲测可行


2.1 根据相机芯片型号绑定

1)查看设备串口号芯片编号lsusb
没接外设usb时输入一次,接入后又输入一次,看看多了哪个usb的信息
lsusb

从上图中可以发现,多了下面这个设备的信息,这是一个camera

Bus 003 Device 013: ID 1e4e:0109 Cubeternet

上面最重要的信息就是 1e4e:0109,之后绑定时会用到

2)查看相机设备的编号
首先同样的方法,不接相机时运行一次ls /dev/video*,接了再运行一次ls /dev/video*,看看相机的设备编号
ls dev
可以看到camera对应的设备编号是 2 和3,只是就查看video2的kernels编号:
udevadm info -a /dev/video2
会弹出很多信息,找到下面这栏
kernels
第二行是3-4,就是我们要找的PC端上的USB口编号

3)创建 rules 文件
有了头两部的编号信息,就可以写串口绑定文件了

① 先 cd /etc/udev/rules.d/
② 创建myusb.rules文件,sudo gedit myusb.rules
③ 输入

KERNEL=="video[0,2,4,6,8]*",KERNELS=="3-4", ATTRS{idVendor}=="1e4e", ATTRS{idProduct}=="0109", MODE:="0777", SYMLINK+="eecam"

KERNELS就填第二步操作得到的"3-4",然后“1e4e”,"0109"就是第一步我们查到的usb芯片的ID,填入对应的位置即可,
而最后的"eecam"则是我们定义的usb串口名,之后调用就使用这个串口名,如 “/dev/eecam”

注意:如果需要用opencv打开,建议名字设成video22这样比较大的数字

KERNEL=="video[0,2,4,6,8]*",KERNELS=="3-4", ATTRS{idVendor}=="1e4e", ATTRS{idProduct}=="0109", MODE:="0777", SYMLINK+="video22"

4)然后重启生效,sudo reboot

只要接的相机芯片型号是不同的,就可以用这种方法绑定,但是实际中,往往用的比较多的是同款的usb芯片,这就需要用到第二种方法。

2.2 根据PC上端口号绑定

1)根据usb的串口名查看工控机上的usb口编号
udevadm info /dev/video2
pc port check

从上图中,”3-4:1.0”就是PC上usb口的编号,下一步操作将会用到。

2)跟方法一一样,创建 rules 文件
① 先 cd /etc/udev/rules.d/
② 创建myusb.rules文件,sudo gedit myusb.rules
③ 输入

ACTION=="add", KERNEL=="video[0,2,4,6,8]*", KERNELS=="3-4:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="eecam"

其中的KERNELS对应的编号就是上一步我们查到的PC中usb口的编号,
而最后的"eecam"则是我们定义的usb串口名,之后调用就使用这个串口名,如 “/dev/eecam”

注意:如果需要用opencv打开,建议名字设成video22这样比较大的数字


ACTION=="add", KERNEL=="video[0,2,4,6,8]*", KERNELS=="3-4:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="video22"

3)重启生效

sudo reboot

Reference

  1. ubuntu工控机固定设备usb串口号(详细):
    https://blog.csdn.net/xx970829/article/details/115529204
  • 7
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值