Bootstrap

使用记录(ubuntu20.04):利用ros录制livox hap 和海康工业相机的bag包并解压成带时间的pcd和png文件

 

目录

前言

一、安装好livox驱动以及海康驱动

1.运行海康驱动

2.运行livox驱动

二、录制bag包



前言

本博客为使用ros通过livox雷达和海康相机录制bag包的方法。

 


一、安装好livox驱动以及海康驱动

我的第一篇博客已经有初步介绍https://blog.csdn.net/qq_62462542/article/details/140430280?spm=1001.2014.3001.5501

启动ros新建终端输入

roscore

1.运行海康驱动

海康驱动下载完成后进入海康的驱动文件夹中我的文件名字叫ws_hikrobot_camera,然后文件夹下输入指令

source ./devel/setup.bash

或者

source ./devel/setup.sh

再输入

roslaunch mvs_ros_pkg mvs_camera.launch

即可启动

由于此时我没有连接相机所以没有画面会报错。

launch文件有多个里面使用的是不同的配置文件,如想修改可进入到config目录下修改yaml文件的参数

注:使用后缀为rviz的launch文件时需要现启动ros即第一步的操作,否则后续会录制不上

2.运行livox驱动

同样进入编译完成的主文件夹下我的文件名字叫ws_livox,在此打开终端输入

source ./devel/setup.sh

再输入

roslaunch livox_ros_driver2 rviz_HAP.launch

即可成功启动

由于我没有连接雷达所以会报错,正常来说ip配对连接好雷达和相机应该是没问题的。

二、录制bag包

1.录制前准备

上述驱动打开后在rviz中左下角有一个add将image和pointcloud2添加进显示中否则界面中没东西。

或者当你连接好设备,并打开驱动后点击上图中的By topic里面有image和pointcloud2选项勾选中即可。同时fixed frame中需要改为livox_lidar这是livox雷达的框架。

2.录制

上述步骤完成后新建文件夹并在文件夹中开启终端,输入

rosbag record -a

你也可以指定话题录制

rosbag record 雷达话题 相机话题  -o out 输出文件名.bag

 此时会启动录制,想要结束在终端按下ctrl+c录制结束bag保存在你刚刚打开的文件中。

3.提取文件(pcd 和 png)

新建终端输入

rosbag info bag包地址

可查看录制的点云和图片数量

这是前用usb相机和livox雷达录制的bag包,可以看见里面的话题和数量。再输入

rosbag play bag包地址

即可回放bag包循环播放在后面输入空格-l即可

此时将rviz中点云的style从flat squares改为point

保存pcd

在终端中输入

rosrun pcl_ros bag_to_pcd bag包地址 录制主题 输出文件位置

 比如我的

rosrun pcl_ros bag_to_pcd  /home/asus/a/1.bag /livox/lidar /home/asus/a/out

即可保存到对应文件夹中

保存png

使用代码

import rosbag
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
import os
from datetime import datetime

def extract_images_from_bag(bag_file, output_dir):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    bridge = CvBridge()
    bag = rosbag.Bag(bag_file, 'r')
    
    for topic, msg, t in bag.read_messages(topics=['/hikrobot_camera/rgb']):
        # Convert ROS timestamp to a human-readable format
        timestamp = t.to_sec()
        time_str = datetime.fromtimestamp(timestamp).strftime('%Y%m%d_%H%M%S_%f')
        print(t)
        # Convert ROS Image message to OpenCV image
        cv_image = bridge.imgmsg_to_cv2(msg, desired_encoding='passthrough')
        
        # Create the output file name
        file_name = f"{time_str}.png"
        file_path = os.path.join(output_dir, file_name)
        
        # Save the image
        cv2.imwrite(file_path, cv_image)
    
    bag.close()

if __name__ == '__main__':
    bag_file = 'bag包地址'
    output_dir = '保存文件夹地址'
    extract_images_from_bag(bag_file, output_dir)

在代码文件夹下打开终端输入

python img_exetract_with_time.py

即可保存带有时间的png图片

;