目录
前言
本博客为使用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图片