文章目录
- 背景
- 查找资料
- 解决方案
背景
目前我在Ubuntu下使用一个USB热成像摄像头,通过调用它的sdk进行图像的采集以及获取对应像素点的温度。假设我现在的测试程序名称为MyApp。
当我用下面的命令运行时,程序是正常运行且能从热成像仪采集图像
sudo ./MyApp
但是当我以下面的命令运行时,
./MyApp
会报错:
libiruvc error [libiruvc.c:357/uvc_camera_open] uvc camera open device failed (uvc_error_code:-3)
这个错误是说权限的问题,也就是只能用root权限才能操作。
然而麻烦的是,在我的正式程序中,需要用到ROS2的库及环境变量一些环境变量。而这些参数无法同步到root用户的环境下。也就是说,不能用sudo启动我的程序,否则我的程序的ROS2部分功能无法使用。
但是不用sudo,热成像仪又用不了,怎么搞?
查找资料
只能修改热成像仪的读写权限了。
热成像的说明书说在linux下,系统会把这个摄像头识别成video设备,识别为/dev/video*。但是实际上我没在/dev目录下找到任video*,那也就意味着我无法直接通过 “chmod 666 /dev/video1”来更改热成像设备的权限。
然后我换一种思路,问了一下chatgpt:
在通过lsusb命令知道了usb设备的基本信息后,如何知道它对应的是/dev或者别的地方的哪个文件节点?
下面是它的回答的截图。它提到一个 /dev/bus/usb 的路径。
好像我那个没被识别为video的摄像头,就藏在这个路径下。
解决方案
先进行lsusb,获取到插到主机上的USB设备的信息:
上图用红色框框出来的设备,就是我的热成像设备。
Bus 007 Device 002: ID 0bda:5830 Realtek Semiconductor Corp. USB Camera
可以看到,Bus为007,Device为002
那么,对应在 /dev/bus/usb路径下的节点为
/dev/bus/usb/007/002
然后更改它的权限就行:
sudo chmod 666 /dev/bus/usb/007/002