文章目录
- 前言
- 1 安装 `usb_cam` 包
- 2 启动 USB 摄像头
- 3 订阅相机发布的节点信息并进行可视化
- 3.1 使用 `rqt_image_view`
- 3.2 使用 `image_view`
- 3.3 使用 `rviz`
- 4 常见问题与解决方案
- 4.1 摄像头未被识别
- 4.2 相机显示异常
- 4.3 如何指定不同的相机
- 4.4 摄像头参数调整
- 5. 调试信息
- 5. 结论
前言
关于Ubuntu与ROS的常规安装,可以看这几篇。
- SLAM实操入门(一):在已有WIN10的电脑上安装Ubuntu20.04
- SLAM实操入门(二):安装ROS Noetic并运行“小乌龟”程序
- ROS学习笔记(一):ROS1入门简明介绍(附详细注释)
- ROS学习笔记(二):鱼香ROS — 超便捷的一键安装/配置/换源指令
- ROS学习笔记(三):VSCode集成开发环境快速安装,以及常用扩展插件配置
本系列主要用来记录学习ROS的相关内容,本文为ROS操作系统简明概要。
在 ROS2 中,`usb_cam` 节点提供了与 USB 摄像头的交互能力,可以用于获取相机的图像数据。但是,在使用过程中,可能会遇到一些问题。本文将详细介绍如何使用 `ros2 run usb_cam usb_cam_node_exe` 命令以及在使用过程中可能遇到的常见问题及其解决方案。
1 安装 usb_cam
包
在开始之前,请确保已安装 usb_cam
包。可以通过以下命令安装:
sudo apt-get install ros-<ros2-distro>-usb-cam
将 <ros2-distro>
替换为当前使用的 ROS2 版本(如 foxy
或 galactic
)。
2 启动 USB 摄像头
要启动 USB 摄像头,可以使用以下命令:
ros2 run usb_cam usb_cam_node_exe
这个命令将启动 usb_cam
节点并默认连接到 /dev/video0
(第一个检测到的相机)。
3 订阅相机发布的节点信息并进行可视化
在启动相机后,可以通过订阅相机发布的节点信息来获取实时图像数据。在ROS2中,可以使用rqt
工具或image_view
工具进行可视化。
3.1 使用 rqt_image_view
-
安装
rqt_image_view
(如果未安装):sudo apt install ros-<distro>-rqt-image-view
其中,
<distro>
是的ROS2发行版,如galactic
或foxy
。 -
启动
rqt_image_view
:rqt_image_view
-
选择相机话题:
在
rqt_image_view
界面中,可以选择相机发布的图像话题(通常是/camera/image_raw
或者/your_camera_name/image_raw
)。选择后,将能够实时查看相机捕获的图像。
3.2 使用 image_view
image_view
是另一个用于图像可视化的工具,使用方法如下:
-
启动
image_view
:ros2 run image_view image_view --ros-args -r image:=/your_camera_name/image_raw
这里的
image
是想要订阅的图像话题。
3.3 使用 rviz
sudo apt install rviz
rviz2
4 常见问题与解决方案
4.1 摄像头未被识别
如果在运行命令时发现 /dev/video*
中没有设备,可以使用以下命令来列出所有连接的摄像头:
ls /dev/video*
- 如果没有设备被列出,可能是摄像头未正确连接或驱动程序问题,如下图:
- 请确保摄像头已连接并重新启动计算机
正常显示为:
该命令将会启动 usb_cam 节点,默认情况下会选择第一个可用的相机(通常是 /dev/video0)。启动后,能够在控制台看到相机的状态信息,包括相机分辨率、帧率等。
4.2 相机显示异常
如果启动 usb_cam
节点后,看到图像是绿色的,可能是由于以下原因:
- 图像格式不匹配:确保相机支持
yuyv
或其他兼容的图像格式。 - 驱动程序问题:有时,USB 摄像头的驱动程序可能存在兼容性问题。尝试更新驱动程序或使用不同的 USB 端口。
在使用Intel深度相机时,设备通常支持RGB和深度图像的输出
。如果未明确指定所需的输出类型,可能会出现显示异常。
例如,启动相机后,可能会看到绿色的图像,这是因为系统默认选择了深度输出
。
4.3 如何指定不同的相机
如果计算机上连接了多个相机,可以通过 --ros-args -p
参数来指定相机。例如,指定第二个相机可以使用:
ros2 run usb_cam usb_cam_node_exe --ros-args -p camera_name:=camera1
同时,可以通过设置相机设备路径来指定相机(比如遇到显示异常的情况):
ros2 run usb_cam usb_cam_node_exe --ros-args -p device_id:=/dev/video4
确保将 /dev/video4
替换为希望使用的相机设备路径。
4.4 摄像头参数调整
usb_cam
允许通过 YAML 文件指定摄像头的参数,例如分辨率、帧率等。可以创建一个 YAML 文件,并在启动节点时加载它:
camera_name: default_cam
image_width: 640
image_height: 480
framerate: 30
启动命令示例:
ros2 run usb_cam usb_cam_node_exe --ros-args -p camera_info_url:=file:///path/to/your/camera.yaml
5. 调试信息
在启动 usb_cam
节点时,可以通过查看终端输出的调试信息来确认相机的连接状态、当前帧率和图像格式等信息。
例如,可能会看到如下输出:
[INFO] [usb_cam]: Starting 'default_cam' (/dev/video0) at 640x480 via mmap (yuyv) at 30 FPS
这表明相机已成功启动,并在指定的分辨率和帧率下工作。
5. 结论
使用 ros2 run usb_cam usb_cam_node_exe
启动相机是一个相对简单的过程,但在使用深度相机时需要特别注意输出类型的选择。同时,通过 rqt_image_view
或 image_view
可以方便地订阅相机发布的节点信息并进行可视化,从而帮助更好地调试和使用相机。
## 相关链接
其他内容可参考:
- SLAM实操入门(八):使用Robosence-16转换数据格式,进行基于A-Loam的三维SLAM
- SLAM实操入门(九):录制基于A-Loam的三维SLAM数据并保存为PCL格式
- ROS学习笔记(一):ROS1入门简明介绍(附详细注释)
- ROS学习笔记(二):鱼香ROS — 超便捷的一键安装/配置/换源指令
- ROS学习笔记(三):VSCode集成开发环境快速安装,以及常用扩展插件配置