6.rk3588获取摄像头和激光雷达数据(用线程根据时间同步)

文件夹结构如下:

如果没有特殊说明,我们将py文件写在该路径里面。

保存数据的路径如下:

---img_lidar_save

      ---2023-12-13(根据日期自动生成当天保存数据的文件夹)

          ---camera_data(相机数据文件夹)

              ---image(保存相加的图片)

              ---vedios(保相机视频)

          ---lidar_data(雷达数据文件夹)

              ---image(保存雷达的pcd文件)

              ---vedios(保存雷达的bag文件)

     注意:每天边写边更新(主要分为以下三部分)

        一、获取当前时间,并根据当前时间摄像头图片和雷达的pcd文件命名(方便后续的数据处理)

        二、获取摄像头图片,根据上述的命名存取图片

        三、获取激光雷达的pcd数据,根据上述的名称存取pcd文件

        下面分别是每部分的python代码:

一、获取当前时间,并根据当前时间摄像头图片和雷达的pcd文件命名

1.根据日期自动生成当天保存数据的文件夹

   和img_lidar_save文件夹相同的路径下写一个create_date_file.py文件,代码如下:

import time,datetime
import os#1.根据日期给文件夹命名,并创建文件夹
def data_time(root_path="img_lidar_save/"):# 1.获取当前时间字符串或时间戳(都可精确到微秒)start_time=datetime.datetime.now().strftime(f'%Y-%m-%d %H:%M:%S{r".%f"}')times=start_time.split(" ")# 2.data_files:根据日期获取要创建的文件夹名称,比如今天是2023_12_07data_files=times[0]#3.获取文件夹路径:img_lidar_save/2023_12_07file_path=root_path+data_filescamera_file = file_path + "/" + "camera_data"lidar_file = file_path + "/" + "lidar_data"#4.如果今天还没有文件夹,则创建文件夹,文件夹名称为:2023_12_07if not os.path.exists(file_path):os.makedirs(file_path)#5.建立camera和lidar文件夹,存取各自的数据if not os.path.exists(camera_file):os.makedirs(camera_file)if not os.path.exists(lidar_file):os.makedirs(lidar_file)#6.建立各自的存取图片和视频的文件夹img_file=camera_file+ "/" +"image"vedios=camera_file+ "/" +"vedios"lidar_videos=lidar_file +"/" +"vedios"lidar_pcd=lidar_file +"/" +"image"if not os.path.exists(img_file):os.makedirs(img_file)if not os.path.exists(vedios):os.makedirs(vedios)if not os.path.exists(lidar_videos):os.makedirs(lidar_videos)if not os.path.exists(lidar_pcd):os.makedirs(lidar_pcd)return img_file,vedios,lidar_videos,lidar_pcddata_time()#root_path="img_lidar_save/"

2.根据具体的时间生成相机和雷达图片的名称

   可以在与img_lidar_save文件夹相同的路径下写一个img_name.py文件,代码如下:

import time,datetime
from create_date_file import data_time#2.根据微秒的时间给图片和pcd文件命名
def day_time():# 获取当前时间字符串或时间戳(都可精确到微秒)start_time=datetime.datetime.now().strftime(f'%Y-%m-%d %H:%M:%S{r".%f"}')times=start_time.split(" ")mins=times[1].split(":")day_names=mins[0]+"_"+mins[1]+"_"+mins[2][:2]+"_"+mins[2][3:5]img_file, vedios, lidar_videos, lidar_pcd = data_time()images = img_file + "/" + day_names + ".jpg"pcds = lidar_pcd + "/" + day_names + ".pcd"bags = lidar_videos + "/" + day_names + ".bag"return images,pcds,bags[images,pcds,bags]=day_time()
print(images)
print(pcds)
print(bags)

代码运行结果如下:

img_lidar_save/2023-12-13/camera_data/image/13_52_26_02.jpg
img_lidar_save/2023-12-13/lidar_data/image/13_52_26_02.pcd
img_lidar_save/2023-12-13/lidar_data/vedios/13_52_26_02.bag

       以上结果是保存图片/pad文件、bag文件的路径和名称,13_52_26_02表示13点52分26秒0.2毫秒。

3.根据名称保存bag文件

import subprocess
import threading
import time#保存bag文件的函数,i是bag文件的名称
def ss(i):names=str(i)process2 = subprocess.run("rosbag record -o "+names+" --duration=0.4 /livox/lidar", shell=True, stdout=subprocess.PIPE)#start=time.time()i=1  #bag文件的名称,最后的文件名为 i.bag,这里可以根据实际情况修改i,如修改成时间命名while i<20:st1=time.time()t1 = threading.Thread(target=ss,args=(i,))#t1.start()#print("...........................................", i)i += 1time.sleep(0.4)   #每隔0.4s保存一个bag文件#st2=time.time()#print("one=====>",i,st2-st1)#end=time.time()
#print("end.....",end-start)

二、获取摄像头图片,根据上述的命名存取图片

1.打开摄像头

# coding:utf-8
import cv2cap = cv2.VideoCapture("/dev/video61")while (cap.isOpened()):ret, frame = cap.read()frame = cv2.rotate(frame, 0, dst=None)  # 视频是倒着的,要对视频进行两次90度的翻转frame = cv2.rotate(frame, 0, dst=None)  # 视频是倒着的,要对视频进行两次90度的翻转cv2.imshow("src_image", frame)cv2.waitKey(1)cap.release()
cv2.destroyAllWindows()

三、获取激光雷达的pcd数据,根据上述的名称存取pcd文件

   这里写一个主函数,main.py文件,将上面的几个函数连接在一起即可(写了一半,下周继续更新)。

import cv2
import os
import shutil
import time
from create_date_file import data_time
from img_name import day_timedef shuju_chuli():img_file,vedios,lidar_videos,lidar_pcd=data_time(root_path="img_lidar_save/")print(img_file)print(vedios)print(lidar_videos)print(lidar_pcd)print("\n")while (cap.isOpened()):ret, frame = cap.read()frame = cv2.rotate(frame, 0, dst=None)  frame = cv2.rotate(frame, 0, dst=None)  cv2.imshow("src_image", frame)cv2.waitKey(1)print("............................................")time_names=day_time()print(time_names)time.sleep(0.3)if __name__ == '__main__':cap = cv2.VideoCapture("/dev/video61")shuju_chuli()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VINS-MONO代码解读6----pose_graph

开始pose_graph部分&#xff0c;本部分记住一句话无论是快速重定位还是正常重定位&#xff0c;求出 T w 1 w 2 T_{w_1w_2} Tw1​w2​​就是终极目标。 还剩一个整体Pipeline~~ 1. pose_graph_node.cpp 注意&#xff0c;定义全局变量时即实例化了一个对象 PoseGraph posegra…

【源码系列】外卖系统外卖平台外卖软件开发外卖小程序APP

系统概念 外卖系统是一套类似美团和饿了么的外卖送餐解决方案&#xff0c;可以在PC、H5、APP、小程序、微信等全平台进行操作。系统配备用户端、商户端、配送端、管理端&#xff0c;可供消费者、商家、骑手&#xff0c;平台多角色使用。同时提供调度中心、分站管理等增值功能。…

网络安全——SQL注入实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 七、实验截图&#xff1a; 一、实验目的要求&#xff1a; 1、…

【docker】docker入门与安装

Docker 一、入门 Docker的主要目标是&#xff1a;Build, Ship and Run Any App, Anywhere&#xff0c;也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP及其运行环境能做到一次镜像,处处运行。 Docker运行速度快的原因 Docker有比虚拟…

外包干了4个月,测试技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了3年的功能测试&#xff0c;当然有半年是被封在了家里&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我…

腾讯科技Hi Tech Day暨2023数字开物大会:智能涌现将通往无数的未来

腾讯科技讯 12月14日&#xff0c;以“智能涌现 数开万物”为主题的腾讯科技Hi Tech Day暨2023数字开物大会在北京国家会议中心召开&#xff0c;腾讯科技邀请知名院士、知名经济学家、知名大学教授、研究院院长、产业大咖、互联网大厂高管、知名科技领域头部企业高管、产业数字化…

11、ble_mesh_provisioner 配网器

1、初始化流程&#xff0c;存储初始化&#xff0c;nvs擦除&#xff0c; 2、bluetooth_init();ble协议栈初始化 3、ble_mesh_get_dev_uuid(dev_uuid);//获取设备uuid加载到mac. 4、ble_mesh_init();//ble mesh协议栈初始化 4.1配置网络钥匙&#xff0c;索引&#xff0c;赋…

『番外篇三』Swift “乱弹”之带索引遍历异步序列(AsyncSequence)

概览 在 Swift 开发中,我们往往在遍历集合元素的同时希望获得元素对应的索引。在本课中,我们将向小伙伴们展示除 enumerated() 方法之外的几种实现思路。在玩转普通集合之后,我们将用“魔法棒”进一步搞定异步序列带索引遍历的实现。 在本篇博主中,您将学到以下内容: 概…

基于 Spring Boot + Vue3 打造一套完整的学生管理系统

基于 Spring Boot Vue3 打造一套完整的学生管理系统 项目技术栈 该项目所采用的技术栈&#xff1a;Spring Boot、Mybatis、Vue3、TypeScript Vite Ant Design Vue 项目演示 API文档 项目源码 项目源码传送门

LLM之RAG实战(三):LlamaIndex解锁自定义LLM关键步骤分块、索引、查询介绍

一、LLamaIndex介绍 LLamaIndex是一个由Jerry Liu创建的Python库&#xff0c;它可以使用语言模型对大型文档集进行高效的文本搜索和摘要。开发人员可以使用LLamaIndex快速添加私有/自定义数据&#xff0c;以增强现有的LLM。它不需要对大模型进行再训练&#xff0c;即可提供个性…

Windows10之wsl-Linux子系统安装JDK、Maven环境

Windows10之wsl-Linux子系统安装JDK、Maven环境 文章目录 1.环境2.安装2.1安装JDK2.1安装maven 3.配置setting.xml4.下载编译项目插件5.总结 1.环境 首先需要在windwos10上安装wsl的Linux子系统&#xff0c;我选择的是CentOs的操作系统的镜像(之前的文章中采用的是docker拉取一…

Linux篇:信号

一、信号的概念&#xff1a; ①进程必须识别能够处理信号&#xff0c;信号没有产生&#xff0c;也要具备处理信号的能力---信号的处理能力属于进程内置功能的一部分 ②进程即便是没有收到信号&#xff0c;也能知道哪些信号该怎么处理。 ③当进程真的受到了一个具体的信号的时候…