应用usb_cam同时打开多个摄像头方法

10 篇文章 3 订阅
8 篇文章 2 订阅

最近由于项目需要,需要同时开启多个摄像头,虽然可以用opencv去写对应的摄像头开启的程序 ; 但是,还是想用ros中提供的usb_cam去打开多个摄像头。

通过usb_cam去打开一个摄像头,不用下载源码,可以直接安装usb_cam去调用launch文件打开摄像头。

  • 安装方式:(ubuntu16.04)
 sudo apt-get install ros-kinetic-usb-cam
  • 安装方式:(ubuntu20.04)
sudo apt install ros-noetic-usb-cam
  • 打开摄像头(默认打开索引为0的摄像头)
roslaunch usb_cam usb_cam-test.launch
  • 如何查看摄像头索引
ls /dev/video*
  • 打开其他索引的摄像头需修改 usb_cam-test.launch文件中“video_device”这一项;把索引修改成想要打开的摄像头索引即可。
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />   #修改此处
    <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>
 

  <!--<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>

安装源码方式打开摄像头:

  • 下载源码
git clone https://github.com/bosch-ros-pkg/usb_cam.git
.
├── AUTHORS.md
├── CHANGELOG.rst
├── CMakeLists.txt
├── include
│   └── usb_cam
│       └── usb_cam.h
├── launch
│   ├── usb_cam-test.launch
├── LICENSE
├── mainpage.dox
├── nodes
│   └── usb_cam_node.cpp
├── package.xml
├── README.md
└── src
    ├── LICENSE
    └── usb_cam.cpp

  • 同时打开多个摄像头只需要对应的去增加usb_cam_node.cpp节点即可;usb_cam_node.cpp中需要恩更改的内容如下:
# 修改内容一 
usb_cam_node.cpp 中第89行 topic名称进行修改:
89 image_pub_ = it.advertiseCamera("image_raw", 1);
# 修改内容二
usb_cam_node.cpp 271行该节点去master中注册的节点名进行修改,以免造成相同名注册,编译错误
271 ros::init(argc, argv, "usb_cam");

Example 1:
我新建了一个名为usb_cam_node1.cpp的节点,修改如下:

89 image_pub_ = it.advertiseCamera("image_raw_new", 1);
271 ros::init(argc, argv, "usb_cam1");
  • 对应的CMakeLists.txt进行修改
add_executable  #添加对应节点名称的可执行文件名

Example 1:

#CMakeLists.txt中每增加一个节点,对应增加以下两部分内容
add_executable(${PROJECT_NAME}_node1 nodes/usb_cam_node1.cpp)  
target_link_libraries(${PROJECT_NAME}_node1
  ${PROJECT_NAME}
  ${avcodec_LIBRARIES}
  ${swscale_LIBRARIES}
  ${catkin_LIBRARIES}
)
  • 对应的launch文件进行修改
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
name="usb_cam" # 修改成相应的话题名,用来和其他节点话题名进行
type="usb_cam_node"  #修改成对应的节点名字

Example 1:
usb_cam-test1.launch 内容如下

<launch>
  <node name="usb_cam_node1" pkg="usb_cam" type="usb_cam_node1" output="screen" >
    <param name="video_device" value="/dev/video1" />
    <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>
  <!--<node name="image_view_node1" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam_node1/image_raw_new"/>
    <param name="autosize" value="true" />
  </node>-->
</launch>

  • 每增加一个节点,对应一个launch文件;最后写一个launch文件去同时启动几个摄像头的launch文件,就可以实现usb_cam打开多个摄像头的功能了。

Example 1:

usb_cam-total.launch 内容如下:

<launch>

  <include file="$(find usb_cam)/launch/usb_cam-test.launch" />
  <include file="$(find usb_cam)/launch/usb_cam-test1.launch" />

</launch>
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xp_fangfei

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

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

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

打赏作者

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

抵扣说明:

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

余额充值