参考
应用usb_cam同时打开多个摄像头方法_xp_fangfei的博客-优快云博客_usb_cam
1、下载源码
git clone https://github.com/bosch-ros-pkg/usb_cam.git
git clone 比较慢,直接进个github下载比较快。
2、创建工作空间
创建工作空间catkin_mutil-cam(名字随意,自己明白是啥就行),在catkin_mutil-cam下创建src,然后将下载的源码usb_cam复制到src下。
然后在catkin_mutil-cam下编译:catkin_make
usb_cam树结构
.
├── 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
3、同时连接两个相机
同时连接两个相机需要更改相应的节点和cpp文件
- 增加节点usb_cam_node.cpp文件
- usb_cam_node.cpp修改的内容
90 image_pub_ = it.advertiseCamera("image_raw", 1);
93 node_.param("video_device", video_device_name_, std::string("/dev/video0"));
273 ros::init(argc, argv, "usb_cam1");
新建 usb_cam_node1.cpp
90 image_pub_ = it.advertiseCamera("image_raw_new", 1);
93 node_.param("video_device", video_device_name_, std::string("/dev/video2"));
273 ros::init(argc, argv, "usb_cam2");
- 对应的CMakeLists.txt进行修改
## Declare a cpp executable
add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp)
target_link_libraries(${PROJECT_NAME}_node
${PROJECT_NAME}
${avcodec_LIBRARIES}
${swscale_LIBRARIES}
${catkin_LIBRARIES}
)
## Declare a cpp executable //新增节点的内容
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文件进行修改
<launch>
<node name="usb_cam1" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" /> //第一个节点,cam1对应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>
//(cam和video根据自己的实际情况命名)
<node name="usb_cam2" pkg="usb_cam" type="usb_cam_node1" output="screen" >
<param name="video_device" value="/dev/video2" /> //第二个节点,cam2对应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>
// image_view 对应的第一个节点
<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>
// image_view_new 对应的第二个节点
<node name="image_view_1" 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>
- 内容都修改后,再次进行编译。在catkin_muilt-cam打开终端:catkin_make
- 编译成功,启动相机
roslaunch usb_cam usb_cam-test.launch
- 相机可视化。新打开一个终端 ,启动ros
roscore
打开一个新终端
rosrun rviz rviz
在rviz 界面,点击Add---By topic---/usb_cam---/image-raw---image
两个相机同时显示界面