最近再ros下尝试获取摄像头的图像,参照《Ros by Example 1》,但是有些依赖在kinetic下有些不能使用,再连续踩坑的过程中,总结了一套能够使用的方法。
书上是对应的是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
网上现在相关的资料博客常提到的有三款驱动:
(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
测试成功,该节能够成功使用。
此时,我们要让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文件错误的话就是汉字字母的格式问题。
建议将launch文件中自带的usb_cam.launch的内容沾到uvc_camera.launch中去,然后只是修改了node_name的内容就可以了(我就是这么做的)
我外接了一个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