Python / C++

  • 一. 硬件准备
  • 二. 安装libuvc_camera包和相关连接设置
  • 三. 运行和结果

网上有不少关于在ubuntu下uvc相机连接ros的教程,然而双鱼眼相机在ubuntu下连接ros的教程非常少。通过这篇文章我想把具体的操作方法给大家介绍一下,方便大家搞研究或者搞自己干一些有趣的事情,把时间浪费在不必要的地方上。

一. 硬件准备

相机用的是理光的全景相机 (型号: THETA S)网上查了一下价格大概1800左右。具体图片如下。

这里说一下注意事项, 理光相机THETA系列下有好几种型号,之前我用了THETA V型号,一直连接不上好像和uvc驱动不兼容,也尝试了通过wifi连接也失败了。。。 用的ROS包是这个github上面的,出的错和别人的也一样,参见这里。在之后我也试了其他几种方法,也都不行。最后我在某个论坛上发现有人说过用 THETA S 型号通过libuvc这个包可以连接,于是我冒着失败的风险自掏腰包买了 THETA S相机,最后终于成功了! (虽说比 THETA V便宜)

总之就是推荐大家用THETA S型号,THETA V型号比较新,没多少人用过,自己踩坑问题太多。

二. 安装libuvc_camera包和相关连接设置

1. 安装libuvc_camera

ros kinetic版本:
sudo apt-get install ros-kinetic-libuvc-camera

ros melodic版本:
sudo apt-get install ros-melodic-libuvc-camera

2. 写roslaunch文件
安装完libuvc_camera包后,需要写一个roslaunch文件来调用libuvc_camera这个包(这个包好像不在 wifi 下用不了)。
这个文件保存在/catkin_ws/src目录下就行, 我给他取名为 libuvc_camera.launch, 文件如下直接复制就可以.

<launch>                                                                                     <node name="libuvc_camera" pkg="libuvc_camera" type="camera_node" output="screen">         <param name="vendor" value="0x05ca" />                                                   <param name="product" value="0x2711" />                                                  <param name="width" value="1280" />                                                      <param name="height" value="720" />                                                      <param name="video_mode" value="mjpeg" />                                                <param name="frame_rate" value="14.985" />                                               </node>
</launch>

这里<param name="vendor" value="0x05ca" />这一行和
<param name="product" value="0x2711" />这一行分别需要针对自己的设备做一下修改, 这一部分就是指定自己的设备, 让libuvc_camera这个包知道相机的名称, 那么怎么查询自己的相机呢?

把THETA S 通过usb线连接到电脑, 此时非常重要的一步就是把THETA S相机切换到数据线连接模式 , 切换方法为 先按住最上边的电源键, 然后过1秒后按住最下面的
相机模式切换键,再过差不多1秒后电源键松手,最后再过1秒后相机模式切换键松手. 这时相机回变成下图的样子.

摄像图标下面 Live 亮了就说明模式切换对了.
这时打开电脑的Terminal, 输入lsusb
可以看到我们的设备就是Bus 001 Device 007: ID 05ca:2711 Ricoh Co., Ltd这一行. 现在我们已经找到THETA S的名称了, 回到libuvc_camera.launch文件把 0x05ca 和 0x2711 改进去.
<param name="vendor" value="0x05ca" />,
<param name="product" value="0x2711" />
然后保存退出.

非常重要一点: 一定要先把相机切换成数据线连接模式,再用$ lsusb 查询, 不然查询的名称会是另一个!!! 一定注意先后顺序, 查出数据线连接模式下的名称!

三. 运行和结果

目前我们已经

  1. 安装完了 libuvc_camera包
  2. 相机以数据线连接模式接在电脑上
  3. 改好了针对自己相机的libuvc_camera.launch文件

接下来, 介绍一下运行步骤

1.修改相机文件的权限

进入到设备文件路径/dev/bus/usb/001
此时会看到有好几个文件, 这个跟电脑上插入usb设备的顺序有关, 一般数字最大的就是最后一次插的 (也就是我们刚刚插的相机), 用 $lsusb 查询一下名称也可以. 然后 sudo chmod 777 <文件名>
(每次连接电脑的时候都需要修改一次权限)
此时需要的准备都全部完成了.
2. 运行
进入 libuvc_camera.launch文件所在路径, 用roslaunch启动


此时, 数据已经连接到ros上了, 发布在 /image_raw话题上.
在终端中输出rostopic echo /image_raw 可以查看是不是动态的显示一堆数字, 如果是就说明图像数据成功发送到这个话题上了。

我们可以用 python 的程序订阅一下上面的消息, 看看图像是怎么样的。 (把ros的消息格式转到OpenCV格式显示 )

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*
import rospy
from sensor_msgs.msg import Image
import cv2
import cv_bridgeclass GetImg:def __init__(self):self.bridge = cv_bridge.CvBridge()self.image_sub = rospy.Subscriber('/image_raw', Image, self.image_callback)def image_callback(self,msg):image = self.bridge.imgmsg_to_cv2(msg,desired_encoding='bgr8')cv2.imshow("a",image)cv2.waitKey(1)if __name__ == "__main__":    rospy.init_node('A')gt = GetImg()rospy.spin()

程序直接在终端里运行需要改变权限, 通过sudo chmod 777 <程序名>改变权限后, 再 ./<程序名>运行.
图像如下 (没洗头所以把帽子戴上了-_-"

代码里面, 通过image = self.bridge.imgmsg_to_cv2(msg,desired_encoding='bgr8')这一行已经把ros的msg格式换到了OpenCV格式, 之后就可以进行各种处理了。
比如把图片转换到HSV空间


用OpenCV的cv2.Canny( ) 边缘检测

用双经度算法把其中一幅鱼眼图像展开, 虽说效果不太理想…

  • 补充一下C++版的程序
#include<ros/ros.h>
#include<opencv2/opencv.hpp>
#include<image_transport/image_transport.h>
#include<cv_bridge/cv_bridge.h>
#include<iostream>using namespace std;void callback(const sensor_msgs::ImageConstPtr& msg)
{try{cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);cv::waitKey(3);}catch(cv_bridge::Exception& e){ROS_ERROR("cannot convert from '%s' to 'bgr8'", msg->encoding.c_str());}
}int main(int argc, char **argv)
{ros::init(argc, argv, "sub");ros::NodeHandle n;cv::namedWindow("view");cv::startWindowThread();image_transport::ImageTransport it(n);image_transport::Subscriber sub = it.subscribe("/image_raw", 30, callback);ros::spin();cv::destroyWindow("view");return 0;
}

C++情况下需要编译,先在~/catkin_ws/src下创建功能包,具体怎么创建有其他比较详细的教程。这里我创建的功能包名为cpptest,对~/catkin_ws/src/cpptest里面的 CMakeLists.txt 和 package.xml 分别进行修改,添加依赖。

CMakeLists.txt (除了初始的roscpp 之外还用到其他库,都把他们添加进来,自己需要使用别的库同理也可以自定义添加)

cmake_minimum_required(VERSION 2.8.3)
project(cpptest)find_package(catkin REQUIRED COMPONENTSroscpprospyimage_transportstd_msgscv_bridge
)
find_package(OpenCV REQUIRED)catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES basics
#  CATKIN_DEPENDS rospy
#  DEPENDS system_lib
)include_directories(${catkin_INCLUDE_DIRS}${OpenCV_INCLUDE_DIRS}
)
add_executable(cpptest src/ImgTest.cpp)
target_link_libraries( cpptest ${OpenCV_LIBS} ${catkin_LIBRARIES})

package.xml (同理也要改进来)

<?xml version="1.0"?>
<package format="2"><name>cpptest</name><version>0.0.0</version><description>The cpptest package</description><maintainer email="mgn@todo.todo">mgn</maintainer><license>TODO</license><buildtool_depend>catkin</buildtool_depend><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>opencv2</build_depend><build_depend>std_msgs</build_depend><build_depend>image_transport</build_depend><build_depend>cv_bridge</build_depend><build_export_depend>roscpp</build_export_depend><build_export_depend>rospy</build_export_depend><build_export_depend>opencv2</build_export_depend><build_export_depend>std_msgs</build_export_depend><build_export_depend>image_transport</build_export_depend><build_export_depend>cv_bridge</build_export_depend><exec_depend>roscpp</exec_depend><exec_depend>rospy</exec_depend><exec_depend>opencv2</exec_depend><exec_depend>std_msgs</exec_depend><exec_depend>image_transport</exec_depend><exec_depend>cv_bridge</exec_depend><export></export>
</package>

改完之后回到 ~/catkin_ws 目录,在终端输入 catkin_make 进行编译,然后在启动 roscore 的情况下输入 rosrun cpptest cpptest 同样也可以得到摄像头实时传回来的图片。这里面第一个 cpptest 指的是我们刚才创建功能包的名, 第二个cpptest是我们在这个功能包下定义的这个小项目的名字。

这篇文章主要目的是为了方便大家搞360度全景图像的相关研究时, 在摄像头连接ubuntu系统ros里面运行时避开不必要的坑, 节省时间少走弯路。 同时在这一篇博客中接着介绍了如何把导出的原图像展开为全景图像。 希望能帮助大家.

ubuntu系统下THETA S 全景相机 通过ROS导出图像相关推荐

  1. 在Ubuntu系统下如何将chrome浏览器的bookmarks导出到本地

    1. 打开chrome浏览器在页面的右上角点击那个三个小点的位置,找到bookmarks,然后点击bookmarks manager,然后在organize右侧大倒三角下选择,export bookm ...

  2. [基于STM32底盘控制与ROS上层导航小车制作] 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息

    系列文章目录 第一节 stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32 ...

  3. Ubuntu系统下查看摄像头参数并基于OpenCV调用

    目录 1. 安装v4l-utils 2. 查找连接的摄像头列表 3. 查看各相机支持的分辨率.帧率.像素格式等参数 4. 注意事项 5. OpenCV(C++)调用摄像头代码 本博文描述了在Ubunt ...

  4. ubuntu 系统下安装 xlwt

    今天在ubuntu 系统下使用pip安装xlwt 报错了如下 然后安装一个easy_install工具 在终端中输入: sudo apt-get install python-setuptools 安 ...

  5. Ubuntu 系统 下 AndroidStudio 工具 使用ctrl+z 回退上一步的方法

    Ubuntu 系统 下使用 AndroidStudio 使用ctrl + z 不是回退上一步的方法 ,是把 as 工具返回home 了 如果想使用ctrl + z 实现回退上一步 ,可以把Ubuntu ...

  6. Linux火狐解压完运行不了,在Ubuntu系统下firefox账号无法登录的解决

    在Ubuntu 16.04系统下默认自带有firefox浏览器,但是使用这个firefox浏览器会发现账号无法登录,原来是在windows系统下的数据没有办法同步,书签也同步不了.经过查询资料后得知, ...

  7. ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案

    ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案 参考文章: (1)ubuntu系统下用kazam软件录制的视频不能在windows系统下播放的解决方案 (2)ht ...

  8. cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件

    cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排 cmake 编译工程具有独特的优势 ...

  9. ubuntu系统下matplotlib中文乱码问题

    参考 [ubuntu系统下matplotlib中文乱码问题 - CSDN博客](https://blog.csdn.net/jeff_liu_sky_/article/details/54023745 ...

最新文章

  1. 用户组管理之更新分组表数据
  2. N-API中的Promise功能的使用
  3. 一个进程安全的日志类, Linux实现
  4. 工作经验总结201606
  5. linux 卸载 rtx,Ubuntu20.04系统卸载软件及清理系统垃圾缓存以及新力得
  6. Sybase数据库 概述部署命令
  7. javascript 数组对象中的迭代方法
  8. linux安装手动划分目录,Linux目录配置整理
  9. 【转】Linux/ubuntu下apache+svn安装配置
  10. python圆柱体_python绘制圆柱体的方法
  11. Soul 网关源码阅读(二)代码初步运行
  12. Express访问静态资源(express.static)
  13. Data Base学习记录:关系模型
  14. 两个tplink路由器有线桥接_TP-Link路由器有线方式桥接设置教程
  15. react仿微信聊天室|react即时聊天IM系统|react群聊
  16. 【文献查找神器】Connected Papers
  17. 《web前端面试题》第一问-如何快速居中对齐?
  18. CAS的ABA问题,ABA问题会导致什么后果?
  19. Flickr公布2016最受欢迎照片
  20. 移动App开发 MUI框架 利用软键盘的搜索键实现页面跳转并传值

热门文章

  1. C++:error C2084 函数已有主体
  2. 网络,接口和数据库测试要点
  3. 《计算机网络(计算机)》
  4. word文档中的水印怎样去除?这三个方法教大家快速搞定!
  5. “办公自动化(OA)系统解决方案集”上线
  6. 二层三层网络协议-网关
  7. [Bzoj3640]JC的小苹果
  8. Small Talk Matters【闲谈很重要】
  9. centos7下安装forever_CentOS7 安装和部分设置参考
  10. x264重要结构体详细说明(4): x264_t