Ubuntu16.04 Ros下使用各种摄像头获取图像(踩坑总结)

最近再ros下尝试获取摄像头的图像,参照《Ros by Example 1》,但是有些依赖在kinetic下有些不能使用,再连续踩坑的过程中,总结了一套能够使用的方法。

1.安装rbx1包以及相关的基础包

书上是对应的是hydro版本的基础包,有几个再16.04的版本下都找不到了,我就把能够成功安装下载的罗列出来:

sudo apt-get install ros-kinetic-turtlebot-* 
sudo apt-get install ros-kinetic-openni-camera ros-kinetic-openni-launch 
sudo apt-get install ros-kinetic-uvc-camera 
sudo apt-get install ros-kinetic-laser-*  
sudo apt-get install ros-kinetic-audio-common ros-kinetic-joystick-drivers 
sudo apt-get install ros-kinetic-orocos-kdl ros-kinetic-python-orocos-kdl 
sudo apt-get install gstreamer0.10-pocketsphinx python-setuptools python-rosinstall 
sudo apt-get install ros-kinetic-opencv3 ros-kinetic-vision-opencv 
sudo apt-get install ros-kinetic-depthimage-to-laserscan ros-kinetic-arbotix-* 
sudo apt-get install git subversion mercurial

这是我在Ubuntu16.04 kinetic opencv3版本上测试安装的,都可以实现,如果不能安装的更新下软件包列表。

然后安装rbx1包到自己的工作空间去:

cd ~/catkin_ws/src
git clone https://github.com/pirobot/rbx1.git
cd ..
catkin_make
source devel/setup.bash

2.安装摄像头驱动

网上现在相关的资料博客常提到的有三款驱动:

(1)uvc_cam:这个驱动现在已经不更新了,对于高版本来说,感觉有些小问题,(我下载了这个驱动但是连编译都有问题,毕竟书上是比较老的版本了)

(2)usb_cam:这个驱动配合自带的launch文件可以直接显示电脑摄像头和usb摄像头的图像,参考:usb_cam调用摄像头显示图像。但是我不用launch文件,直接启动roscore,然后运行usb_cam_node节点时,就读取不到图像,全是错误的显示:

所以也没有使用该驱动。

(3)usb_camera:这个驱动的节点是可以直接使用显示图像,因此就选择这个驱动。

安装uvc_camera:

cd ~/catkin_ws/src
git clone https://github.com/ktossell/camera_umd
cd ~/catkin_ws
catkin_make
source devel/setup.bash

测试uvc_camera:

新开一个终端输入:

roscore

然后再开一个终端输入:

rosrun uvc_camera uvc_camera_node device:=/dev/video0

然后笔记本摄像头会亮,显示了一串数据,然后就再等待状态。这时再开一个终端,输入rostopic list查看话题名称,找到图像那个名称/image_raw,再输入:

rosrun image_view image_view image:=/image_raw

测试成功,该节能够成功使用。

3.修改launch文件测试

此时,我们要让rbx1_vision动起来,还要做个主题映射把/image_raw -> /camera/rgb/image_color还要修改 rbx1_vision/launch/uvc_cam.launch 文件中调用的 driver node : pkg=uvc_cam; node name=uvc_cam_node。

找到rbx1/rbx1_vision/launch文件夹内,只有名为usb_cam.launch的文件,此时重新创建一个文件取名为:uvc_camera.launch

然后再里面添加以下内容:

<launch>
    <arg name="device" default="/dev/video0" />

    <node name="uvc_camera_node" pkg="uvc_camera" type="uvc_camera_node" output="screen">
    
    	<remap from="image_raw" to="/camera/rgb/image_color" />

        <param name="device" value="$(arg device)" />
        <param name="image_width" value="640" />
        <param name="image_height" value="480" />
        <param name="frame_rate" value="30" />
        <param name="pixel_format" value="mjpeg" />
        <param name="contrast" value="32" />
        <param name="brightness" value="32" />
        <param name="saturation" value="32" />
        <param name="autofocus" value="true" />
        <param name="camera_frame_id" value="camera_link" />
        
    </node>
</launch>

直接沾过去如果运行的时候显示launch文件错误的话就是汉字字母的格式问题。

建议将launch文件中自带的usb_cam.launch的内容沾到uvc_camera.launch中去,然后只是修改了node_name的内容就可以了(我就是这么做的)

4.最终测试

我外接了一个sub摄像头,可以通过命令查看:

ls /dev/video*

电脑自带的一般为:/dev/video0  外设的:/devvideo1

试着运行这个launch文件,然后使用image_view工具查看话题camera/rgb/image_color的数据:

roslaunch rbx1_vision uvc_camera.launch  device:=/dev/video1

然后打开一个新的终端:

rosrun image_view image_view image:=/camera/rgb/image_coror

整体就OK了

参考文献:

https://blog.csdn.net/sonictl/article/details/48053597/

https://blog.csdn.net/heyijia0327/article/details/41623419

猜你喜欢

转载自blog.csdn.net/zbr794866300/article/details/100113594