ros使用自动驾驶数据集KITTI【2】-发布照片

KITTI:自动驾驶数据集,包括深度图,2D物体检测,语义分割等任务。
【1】中将raw data通过kitti2bag工具把数据转换为rosbag格式播放。
现在,用自己写的程序把数据publish出来,用rviz可视化工具显示出来。因为kitti2bag的格式是固定的,不能变化。为了能够自己写代码并进行显示,需要用rviz来显示。机器人模拟中也经常用到。

资料:

KITTI: City:2011_09_26_drive_0005 (0.6 GB)

在这里插入图片描述
下载其中:synced+rectified data和calibration数据。synced+rectified data是设备采集的数据,calibration是各个设备之间的位置,旋转关系。
在这里插入图片描述
velodyne是激光雷达数据,oxts是GPS和IMU的数据。

从头开始创建工作空间catkin_ws:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make

加载setup.bash文件,不用每次打开终端加载一次了。

 echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc

这里添加catkin_ws工作空间的setup.bash文件

 echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

当这些语句都添加到 ~/.bashrc文件中,每次开机使用ros直接source下面语句即可。

source ~/.bashrc

避免了每次打开catkin_ws文件要source一下

cd ~/catkin_ws
source devel/setup.bash

到此,工作空间建立完成。

然后新建package:

cd catkin_ws/src  //打开工作空间中的src文件夹
catkin_create_pkg kitti_tutorial rospy   //创建package,名为kitti_tutorial,依赖库为rospy
cd .. //回到上一页
catkin_make  //编译一下

显示编译成功。(截图别人的,我自己的忘了截图,但运行结果一样)
在这里插入图片描述

完成之后,在新建的kitti_tutorial文件夹中打开src文件夹,本来这里是空的,啥也没。新建一个名为kitti.py的文件。
在这里插入图片描述

我们先publish一张照片,显示在rviz中。kitti.py代码如下

#!/usr/bin/python3
import cv2
import os
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge


DATA_PATH = '/home/ros/Documents/ros-kitticlass/2011_09_26/2011_09_26_drive_0005_sync'

if __name__ == '__main__':
    rospy.init_node('kitti_node',anonymous=True)
    cam_pub = rospy.Publisher('kitti_cam',Image,queue_size=10)
    bridge = CvBridge()

    rate = rospy.Rate(10)
    while not rospy.is_shutdown():
        img = cv2.imread(os.path.join(DATA_PATH,'image_02/data/%010d.png'%0)) #显示一张图片
        cam_pub.publish(bridge.cv2_to_imgmsg(img,"bgr8"))
        rospy.loginfo("camera image published")
        rate.sleep()

但是pycharm中,import rospy一直报错:
解决办法:
https://www.pianshen.com/article/3058988675/
https://blog.youkuaiyun.com/Richard_2018/article/details/80192515
三:方法三
其中三的办法最好,我用了感觉,干净又卫生。

然后开始启动运行,publish到rviz中。
转为可执行文档。
在这里插入图片描述
用rosrun命令运行kitti.py。

rosrun kitti_tutorial kitti.py

但是卡在了rosrun,怎么也跑不起来。。。
感觉rosrun和我的python环境不兼容。。。
我要重新安装ros吗。。。
在这里插入图片描述
经过一上午的折腾(2021.7.12),终于跑起来了。解决步骤是:

  1. 先按照上面方法3中,在pycharm中添加相关依赖的具体位置。我分析了一下,我把【1】中的rqt_bag命令运行了,我觉得我的ros应该没有问题,只是conda环境和ros产生了冲突,毕竟ros是py2.7的,conda我安装的是默认3.8的python版本。所以我用conda deactivate 命令退出了conda环境,系统默认py2.7版本。
  2. 这时再运行rosrun命令,还是报错找不到cv2的库。这时,我想到我的kitti.py代码第一行,我让他默认用py3执行,代码是 #!/usr/bin/python3。我了个去,果断把3去掉,再用rosrun运行kitti.py.
    在这里插入图片描述
    终于跑起来了,[流下了没有技术的泪水。。。]这时候就会发布信息到topic上。
    打开rviz。(新开个窗口,直接输入rviz就行)一开始是空的,啥都没有
    在这里插入图片描述
    点左下角的Add,选择Topic,显示所有的topic。我们publish到的是这个kitti_cam主题。添加kitti_cam中的Image。
    在这里插入图片描述
    在这里插入图片描述
    目前显示的是照片,把所有照片按照10张/秒显示就是视频了。修改代码,添加frame变量,用来显示所有图片:
#!/usr/bin/python
import cv2
import os
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge


DATA_PATH = '/home/ros/Documents/ros-kitticlass/2011_09_26/2011_09_26_drive_0005_sync'

if __name__ == '__main__':
    frame = 0
    rospy.init_node('kitti_node',anonymous=True)
    cam_pub = rospy.Publisher('kitti_cam',Image,queue_size=10)
    bridge = CvBridge()

    rate = rospy.Rate(10)
    while not rospy.is_shutdown():
#        img = cv2.imread(os.path.join(DATA_PATH,'image_02/data/%010d.png'%0))
        img = cv2.imread(os.path.join(DATA_PATH,'image_02/data/%010d.png'%frame))
        cam_pub.publish(bridge.cv2_to_imgmsg(img,"bgr8"))
        rospy.loginfo("camera image published")
        rate.sleep()
        frame+=1
        frame%=154

就可以显示视频了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值