在ros中 两个摄像头

欧最后有了一个需求,需要在ros中接两摄像头,完成后写一下步骤。

以下是我的设备,

通过一个3.0的转接头来连接两个摄像头,

首先,通过下面的命令

ls /dev/video*    //插上摄像头后打开终端查看是否检测到摄像头

我这里显示5个设备号。下面是下载相机的文件。

mkdir -p  camera_ws/src                                       //新建工作空间
cd camera_ws/src/
catkin_init_workspace                                         
git clone https://github.com/bosch-ros-pkg/usb_cam.git        //克隆功能包
cd ..
catkin_make                                                   //编译

注意:在编译时,最好在有opencv的工作空间下,可能报错

-- Checking for module 'libv4l2'
--   No package 'libv4l2' found
CMake Error at /usr/local/share/cmake-3.22/Modules/FindPkgConfig.cmake:603 (message):
  A required package was not found

我是运行第2个命令:

sudo apt-get install libv4l2-dev    //这个没有效果的话,执行下面的。
sudo apt-get install libv4l-dev


我的设备号是video2与video4,下面进入修改,

<launch>

 <group ns="camera1">
      <node name="usb_cam1" pkg="usb_cam" type="usb_cam_node" output="screen" >
        <param name="video_device" value="/dev/video2" />
        <param name="image_width" value="640" />
        <param name="image_height" value="480" />
        <param name="pixel_format" value="yuyv" />
        <param name="camera_frame_id" value="usb_cam" />
        <param name="io_method" value="mmap"/>
      </node>
  </group>
 
  <group ns="camera2">
      <node name="usb_cam2" pkg="usb_cam" type="usb_cam_node" output="screen" >
        <param name="video_device" value="/dev/video4" />
        <param name="image_width" value="640" />
        <param name="image_height" value="480" />
        <param name="pixel_format" value="yuyv" />
        <param name="camera_frame_id" value="usb_cam" />
        <param name="io_method" value="mmap"/>
      </node>
  </group>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

运行下面的命令

roscore
cd ~/camera_ws
source devel/setup.bash
roslaunch usb_cam usb_cam-test.launch
打开一个新终端
rosrun rviz rviz

 在rviz 界面,点击Add---By topic---/usb_cam---/image-raw---image

参考 在ros中用usb_cam连接两个相机_ros下调用多个摄像头-优快云博客文章浏览阅读1.1k次。在ros中用usb_cam连接两个相机_ros下调用多个摄像头https://blog.youkuaiyun.com/weixin_42135969/article/details/127246204ROS下使用单目/双目摄像头发布图像话题_ros发布摄像头内容_大聪明墨菲特的博客-优快云博客文章浏览阅读2.4k次,点赞4次,收藏40次。在ros下用usb_cam包发布单目和双目摄像头的图像话题消息_ros发布摄像头内容https://blog.youkuaiyun.com/weixin_53073284/article/details/125671358

 

### 调用和配置摄像头驱动及节点实现图像采集 在 ROS 中调用摄像头并实现图像采集通常涉及以下几个方面: #### 1. 驱动的选择与安装 对于 USB 摄像头,可以选择 `uvc_camera` 或者 `usb_cam` 这两个常用的驱动包。如果使用的是 RealSense 系列的 RGBD 摄像头,则可以选用 Intel 提供的官方驱动。 - **uvc_camera**: 如果需要支持 MJPEG 格式的视频流,推荐使用此驱动。它兼容大多数 UVC 标准的摄像头,并提供了灵活的参数设置选项[^2]。 - **usb_cam**: 此驱动同样适用于大部分 USB 摄像头,默认情况下也支持 MJPEG 编码格式。其优点在于易于上手且文档较为详尽[^4]。 - **RealSense Camera (realsense2_camera)**: 对于特定型号的深度摄像头(如 D435/D435i),可以直接利用英特尔提供的 ROS 包来完成初始化以及数据订阅操作[^3]。 #### 2. 创建自定义 ROS 包 为了更好地管理项目结构,在实际应用前建议先创建一个新的 ROS 工作空间及其子目录下的独立软件包用于存放相关脚本文件等资源。 以下是基于 `usb_cam` 构建的一个典型例子: ```bash cd ~/catkin_ws/src/ catkin_create_pkg my_usb_cam std_msgs roscpp cv_bridge sensor_msgs image_transport ``` 接着进入该新建立好的路径下继续完善功能模块设计工作流程图如下所示: #### 3. 修改 Launch 文件以适配具体硬件环境 每台计算机连接的不同品牌规格类型的摄像装置可能对应着不一样的 `/dev/videoX` 设备编号;因此有必要确认当前所使用的那一款确切位置后再将其写入到 XML 文档当中去以便后续自动化加载过程顺利执行下去而不会因为找不到目标源而导致失败告终的情况发生. 下面给出一段标准模板作为参考依据之一: ```xml <launch> <!-- 设置相机名称 --> <arg name="camera_name" default="my_camera"/> <!-- 加载 usb_cam 节点 --> <node pkg="usb_cam" type="usb_cam_node" name="$(arg camera_name)_node"> <param name="video_device" value="/dev/video0"/> <!-- 替换为您的设备地址 --> <param name="image_width" value="640"/> <param name="image_height" value="480"/> <param name="pixel_format" value="mjpeg"/> <!-- 发布的话题名 --> <remap from="image_raw" to="/$(arg camera_name)/image_raw"/> </node> </launch> ``` 上述代码片段展示了如何通过调整 `<param>` 参数来自由指定分辨率大小或者改变像素编码方式等内容项从而满足个性化需求场景的要求. #### 4. 订阅发布的 Topic 并展示结果 最后一步就是编写 Python/C++ 程序代码用来接收从前面提到过的主题频道上传送过来的数据帧信息进而绘制图形界面呈现给用户观看效果啦! 下面提供了一个简单的 python 版本示范案例供大家借鉴学习一下吧~ ```python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError import cv2 def callback(data): try: bridge = CvBridge() frame = bridge.imgmsg_to_cv2(data, "bgr8") cv2.imshow("Camera Feed", frame) cv2.waitKey(1) if __name__ == '__main__': rospy.init_node('image_subscriber', anonymous=True) rospy.Subscriber("/my_camera/image_raw", Image, callback) rospy.spin() cv2.destroyAllWindows() ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老师你好ss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值