因为很多的slam代码是有ROS版的,ROS版的一般数据的输入都是rosbag的形式,所以为了使用,测试新的数据集,需要将没有rosbag的数据集转为rosbag的形式,其实这里涉及的就是将普通的照片转为ros的图片,使用一个节点发布这写图片流,然后使用rosbag进行记录,然后生成一个rosbag的包.整体就是这样的思路.ROS的官网上也有相关的Tutorials.Tutorials 里面命令有一些小错误,但是不会影响很大.接下来将分两个部分来记录一下自己转换的过程.第一部分是学习ROS WIKI上的tutorials的内容,第二部分是使用自己的数据集进行实验.
一. Tutorials的学习
在ROS的image_transport的tutorial上,根据它的教程进行如下的命令操作,这些操作的前提是你已经在你的系统上安装了ROS的系统,哇是跟着官方教程 安装的,这里因为设置软件源的问题,折腾了好久,最后先删除出问题的软件源,最后再安装官方的教程就可以成功了.然后按照image_transport的教程走通如下的命令:
1.
$ mkdir -p ~/image_transport_ws/src
$ cd ~/image_transport_ws/src
$ source /opt/ros/kinetic/setup.bash #notice 看你安装的是什么版本的ros,我的是kinetic
$ catkin_create_pkg learning_image_transport image_transport cv_bridge #生成一个包
$ cd ~/image_transport_ws #或者 cd ..
$ rosdep install --from-paths src -i -y --rosdistro kinetic #这里也需要改成自己的安装
$ catkin_make
$ source devel/setup.bash
$ git clone https://github.com/ros-perception/image_common.git
$ ln -s `pwd`/image_common/image_transport/tutorial/ ./src/image_transport_tutorial
$catkin_make #编译源文件
- 以上操作完成之后,你就可以使用如下步骤你就可以发布一张图片到ROS的节点中去了.
(1)在你编译的命令行窗口新开一个窗口,保证其是在 /image_transport_ws 这个路径下的,然后运行:
$roscore
(2)在你编译的命令行窗口新开一个窗口,保证其是在 /image_transport_ws 这个路径下的,然后运行:
$ source /opt/ros/kinetic/setup.bash #每次读要运行一次的,不然会报错
$ source devel/setup.bash ##每次读要运行一次的,不然会报错
$ rosrun image_transport_tutorial my_publisher path/to/some/image.jpg #需要修改成为你图片的path
(3)查看节点
$rostopic list -v #查看节点
/camera/image
/camera/image/compressed
/camera/image/compressed/parameter_descriptions
/camera/image/compressed/parameter_updates
/camera/image/compressedDepth
/camera/image/compressedDepth/parameter_descriptions
/camera/image/compressedDepth/parameter_updates
/camera/image/theora
/camera/image/theora/parameter_descriptions
/camera/image/theora/parameter_updates
/rosout
/rosout_agg
(4)订阅节点
$rosrun image_transport_tutorial my_subscriber
运行上诉命令之后就会在rqt(需要单独打开一个终端输入:rqt)出现你发布的image图片.
将opencv格式的图像转化为ROS所支持的消息类型,从而发布到相应的话题上。
节点管理器(roscore)
参考:https://blog.csdn.net/danwuxie/article/details/86709530(这篇博客Ros发布和订阅有消息的源代码的解析)