【问答贴】关于 `hobot_usb_cam` 包像素格式支持的问题

用户您好,请详细描述您所遇到的问题:

  1. 问题涉及的技术领域: rdk x3的hobot_usb_cam`功能包、相机驱动兼容问题
  2. 问题描述:

尊敬的 开发团队,

我在尝试使用 hobot_usb_cam 包时遇到了一些问题,特别是在像素格式的配置上。以下是我遇到的情况和一些具体的问题:

  1. 像素格式不支持问题: 我在启动usb相机 hobot_usb_cam 时指定了 usb_pixel_format:=mjpeg,但是程序报错提示设备不支持 raw_mjpeg 格式。然而,我注意到在设备支持的格式列表中,YUYV 4:2:2 格式是可用的。请问 hobot_usb_cam 包是否实际上支持 YUYV 格式?如果支持,为什么我在使用 mjpeg 时没有成功读取图像数据?我将 usb_pixel_format:=yuyv时没有报错,但是没有实际图像数据出现。

  2. 自定义像素格式支持: 如果 hobot_usb_cam 包不支持 YUYV 格式,我希望能够自定义程序来支持它。请问我应该如何修改 hobot_usb_cam 包或者编写额外的节点来实现对 YUYV 格式的支持?可以给我提供一个大概的思路吗?我需要学习哪些内容?我需要重写hobot_usb_cam 这个功能包吗?

  3. 注意,这个usb相机是我从淘宝购买的,可以通过cap = cv2.VideoCapture(8)来读出数据,但是这样似乎是软件解码占用cpu极高,希望大佬给我指点一下

  4. 提供必要的问题日志:

root@ubuntu:~/wkl# ros2 launch hobot_usb_cam hobot_usb_cam.launch.py usb_video_device:=/dev/video8 usb_pixel_format:=yuyv usb_image_width:=640 usb_image_height:=480 zero_copy:=false

[INFO] [launch]: All log files can be found below /root/.ros/log/2023-11-22-04-58-39-606793-ubuntu-4949

[INFO] [launch]: Default logging verbosity is set to INFO

config_file_path is /opt/tros/humble/lib/hobot_usb_cam/config/usb_camera_calibration.yaml

Hobot shm pkg enables zero-copy with fastrtps profiles file: /opt/tros/humble/lib/hobot_shm/config/shm_fastdds.xml

Hobot shm pkg sets RMW_FASTRTPS_USE_QOS_FROM_XML: 1

env of RMW_FASTRTPS_USE_QOS_FROM_XML is 1 , ignore env setting

[INFO] [hobot_usb_cam-1]: process started with pid [4959]

[hobot_usb_cam-1] [WARN] [1700600320.492876984] [hobot_usb_cam]: framerate: 30

[hobot_usb_cam-1] [WARN] [1700600320.493601169] [hobot_usb_cam]: pixel_format_name: yuyv

[hobot_usb_cam-1] [WARN] [1700600320.662769050] [hobot_usb_cam]: Camera calibration file: [/opt/tros/humble/lib/hobot_usb_cam/config/usb_camera_calibration.yaml] does not exist!

[hobot_usb_cam-1] If you need calibration msg, please make sure the calibration file path is correct and the calibration file exists!

[hobot_usb_cam-1] [WARN] [1700600320.662980876] [hobot_usb_cam]: This devices supproted formats:

[hobot_usb_cam-1] [WARN] [1700600320.663083164] [hobot_usb_cam]: YUYV 4:2:2: 640 x 480 (30 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663131538] [hobot_usb_cam]: YUYV 4:2:2: 640 x 480 (15 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663174745] [hobot_usb_cam]: YUYV 4:2:2: 352 x 288 (30 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663217410] [hobot_usb_cam]: YUYV 4:2:2: 352 x 288 (15 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663259659] [hobot_usb_cam]: YUYV 4:2:2: 320 x 240 (30 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663301824] [hobot_usb_cam]: YUYV 4:2:2: 320 x 240 (15 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663344281] [hobot_usb_cam]: YUYV 4:2:2: 176 x 144 (30 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663386113] [hobot_usb_cam]: YUYV 4:2:2: 176 x 144 (15 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663428070] [hobot_usb_cam]: YUYV 4:2:2: 160 x 120 (30 Hz)

[hobot_usb_cam-1] [WARN] [1700600320.663470652] [hobot_usb_cam]: YUYV 4:2:2: 160 x 120 (15 Hz)

^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)

[hobot_usb_cam-1] [WARN] [1724946158.733767554] [hobot_usb_cam]: Shutting down

^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) again, ignoring…

^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) again, ignoring…

[ERROR] [hobot_usb_cam-1]: process has died [pid 4959, exit code -2, cmd ‘/opt/tros/humble/lib/hobot_usb_cam/hobot_usb_cam --ros-args --log-level warn --ros-args -r __node:=hobot_usb_cam --params-file /tmp/launch_params_sne_7enw --params-file /tmp/launch_params_o6ti5cbv --params-file /tmp/launch_params_s4vnid69 --params-file /tmp/launch_params__usfu4cj --params-file /tmp/launch_params_7id0lkoi --params-file /tmp/launch_params_9ly0ljkn --params-file /tmp/launch_params_t31365g0 --params-file /tmp/launch_params_88_ibcxq --params-file /tmp/launch_params_6j1bf8cl’].

你好,首先要确保您的USB摄像头节点是最新的:-

  1. 确保您的tros软件包都是最新的:一些问题在新版本中已经被修复,在apt update确保有地平线的源“sunrise.horizon.cc”后进行apt upgrade。在提问时也请使用rdkos_infoapt list | grep tros*apt show tros*命令提供您的软件包版本。
  2. **尝试定位问题出现的node:**参考对应功能报的launch,将日志级别改为debug,重新运行,定位出现问题的node,并提供具体的ros2日志。一般tros的launch处于/opt/tros/share/<package name>/launch目录下。ros2 日志一般在/root/.ros/log/目录下,排查前可以先rm -rf /root/.ros/log/*清空这个目录,再运行功能包收集日志。
  3. **重新安装相关的tros功能包:**如果launch或者其他功能改乱了可以重装tros的软件包,利用apt重装tros软件包的一般步骤为,以hobot_usb_cam为例,先apt list | grep *hobot* 定位软件包的名称,然后apt remove tros-hobot-usb-cam,然后在apt update确保有地平线的源“sunrise.horizon.cc”后进行apt install tros-hobot-usb-cam重新安装tros的包。

然后这个摄像头只支持YUYV取流,X3上面没有对应的解码器。请选购支持MJPEG流的USB摄像头。