LabviewCarla仿真平台搭建一:平台设计及仿真视频可视化实现

news2024/11/14 2:32:14

=

文章目录

  • 背景
  • 一、平台设计
  • 二、视频显示模块实现
    • 1、视频模块实现框架
    • 2、python-camera数据生成
    • 3、labview-camera数据可视化
  • 三、效果展示


背景

在使用carla的时候,有平台的话可以提高效率,因此想结合labview和carla设计一个仿真平台-labcar。其实carla对python的兼容性更强,想过用pyqt或者vue+flask方法去设计仿真平台,但是考虑到上位机的UI设计和硬件控制还是labview更有优势一点,加上我的labview用的也比较熟练,所以就选择了labview。


一、平台设计

1、UI的话简单地设计了一下布局,不过后期的话肯定要修改跟完善的,不过下面这些设计基本也够使用的了。

在这里插入图片描述

2、平台框架

这种方式不跑在实时机,但是数据如果统一由python调度,加上can端用python-can控制canoe去控制报文发送,这种模式应该还是挺稳定的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1644725ec19e462590b673d89439431b.png

二、视频显示模块实现

1、视频模块实现框架

在这里插入图片描述

2、python-camera数据生成

1)展示python处理视频数据部分,用线程实现,因为后续会有多个camera。这里的内容就比较简单,调用carla生成camera图像,然后再通过camera.listen()去回调函数处理image data,并发送至labview。

class GenarateCamera(threading.Thread):
    def __init__(self, world, ego_vehicle, camera_para):
        super(GenarateCamera, self).__init__()
        self.camera_para = camera_para
        self.tcp_socket = TcpSocketSetup(socket_port=self.camera_para.tcp_port)
        self.ego_vehicle = ego_vehicle
        self.camera_para = camera_para
        self.world = world
        self.camera = None
        self.start()

    def camera_callback(self, data):
        # image是RGBA图像数据
        image = np.frombuffer(data.raw_data, dtype=np.uint8).reshape((data.height, data.width, 4))
        # 从RGBA数据中提取RGB数据
        rgb_image = image[:, :, :3]
        # 将image转换成数组
        rgb_image_bytes = rgb_image.tobytes()
        self.send_image_to_platform(rgb_image_bytes)

    def send_image_to_platform(self, image_bytes):
        self.tcp_socket.send_data(image_bytes)

    def genarate_camera(self):
        camera_bp = self.world.get_blueprint_library().find('sensor.camera.rgb')
        camera_bp.set_attribute('image_size_x', str(self.camera_para.width))
        camera_bp.set_attribute('image_size_y', str(self.camera_para.height))
        relative_x = self.camera_para.relative_x if self.camera_para.relative_x != -999 else 0
        relative_y = self.camera_para.relative_y if self.camera_para.relative_y != -999 else 0
        relative_z = self.camera_para.relative_z if self.camera_para.relative_z != -999 else 0
        pitch = self.camera_para.pitch if self.camera_para.pitch != -999 else 0
        yaw = self.camera_para.yaw if self.camera_para.yaw != -999 else 0
        roll = self.camera_para.roll if self.camera_para.roll != -999 else 0

        # 设置Camera的安装坐标系
        camera_transform = carla.Transform(carla.Location(relative_x, relative_y, relative_z),
                                           carla.Rotation(pitch, yaw, roll))
        # 生成Camera
        self.camera = self.world.spawn_actor(camera_bp, camera_transform, attach_to=self.ego_vehicle,
                                   attachment_type=carla.libcarla.AttachmentType.Rigid)
        #接收camera数据
        self.camera.listen(self.camera_callback)

    def run(self):
        try:
            self.genarate_camera()
            while True:
                pass
        finally:
            self.camera.destroy()

3、labview-camera数据可视化

1)abview通过NI vision模块,将python发送过来的rgb数据可视化,python在传输数据的时候将image data转换成字节流了,labview接收到字节流之后先转换成字节数组,然后3个为一组取出rgb的数据,再根据图像的宽高排列成二维簇数据,然后使用NI vision的IMAQ ColorValueToInteger VI将rgb簇转换成u32位的像素值,最后再使用IMAQ ArrayToColorImage VI将数据可视化。
2)NI这部分我花了好长时间才试出来,因为网上根本没有案例。。

在这里插入图片描述


三、效果展示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

滑动菜单栏

效果如下&#xff1a; NavigationView 新建menu布局,表示菜单栏的选项 <menu xmlns:android"http://schemas.android.com/apk/res/android"> <group android:checkableBehavior"single"> <item android:id"id/navCall" android…

C#【进阶】特殊语法

特殊语法、值和引用类型 特殊语法 文章目录 特殊语法1、var隐式类型2、设置对象初始值3、设置集合初始值4、匿名类型5、可空类型6、空合并操作符7、内插字符串8、单句逻辑简略写法 值和引用类型1、判断值和引用类型2、语句块3、变量的生命周期4、结构体中的值和引用5、类中的值…

对于高速信号完整性,一块聊聊啊(12)

常见的无源电子器件 电子系统中的无源器件可以按照所担当的电路功能分为电路类器件、连接类器件。 A、电路类器件&#xff1a; &#xff08;1&#xff09;二极管&#xff08;diode&#xff09; &#xff08;2&#xff09;电阻器&#xff08;resistor&#xff09; &#xf…

智慧城市运维可视化:透视未来城市高效管理的新视窗

行业痛点 现代城市运维是一个复杂而庞大的系统&#xff0c;涉及到诸多方面&#xff0c;包括交通、环境、能源等等。然而&#xff0c;在城市运维中&#xff0c;存在着一些现实的痛点&#xff0c;给城市管理者带来了不小的压力和困扰&#xff1a; 1、交通拥堵 随着城市化进程的…

基于Docker的ElasticSearch、Kibana服务搭建并开启用户鉴权

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;云原生与服务部署专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 服务搭建 2.1. 部署ElasticSearch 2.2. 部署Kibana 3. …

深入理解指针(5)

在之前的深入理解指针(4)中我们学习了回调函数相关知识&#xff0c;并且学会了如何使用库函数qsort&#xff0c;以及模拟实现了qsort&#xff0c;接下来在本篇中将对srtlen和sizeof进行细致的讲解&#xff0c;并对相关的题型进行讲解&#xff0c;一起加油吧&#xff01;&#x…

【408精华知识】指令的寻址方式

文章目录 一、指令寻址&#xff08;一&#xff09;顺序寻址&#xff08;二&#xff09;跳跃寻址 二、数据寻址&#xff08;一&#xff09;隐含寻址&#xff08;二&#xff09;立即&#xff08;数&#xff09;寻址&#xff08;三&#xff09;直接寻址&#xff08;四&#xff09;…

网络域名是什么意思

网络域名&#xff0c;顾名思义&#xff0c;就是网络上的名字&#xff0c;类似于现实中的地址或姓名一样&#xff0c;用来标识网络上的一个或一组计算机或服务器的位置&#xff0c;以及它们的相应服务资源。网络域名是互联网上最基础的基础设施之一&#xff0c;是网络通信的“标…

虚机配置USB CDROM设备热迁移crash

虚机配置USB CDROM设备热迁移crash 问题现象定位过程堆栈分析日志分析打开trace异常日志上下文分析SpecificationCBWCSW 命令执行发送读命令读取数据 正常日志异常堆栈 修复方案结论 基础原理设备模型数据结构设备实例化 UHCIFrame ListTDQH SCSI 问题现象 dogfood环境一台虚机…

Echarts图表使用

ECharts是一个用JS实现开源可视化库&#xff0c;它提供了丰富的图表类型和交互能力。使用户可以通过简单的配置生成各种各样的图表。 先安装ECharts图表直接下载echarts.min.js并用<script>标签引入也可以使用源代码版本echarts.js并用<script>标签引入&#xff0…

【vue3+elementuiplus】el-select下拉框会自动触发校验规则

场景&#xff1a;编辑弹框省份字段下拉框必填&#xff0c;触发方式change&#xff0c;有值第一次打开不会触发校验提示&#xff0c;关闭弹框再次打开触发必填校验提示&#xff0c;但是该字段有值 问题的原因是&#xff1a;在关闭弹层事件中&#xff0c;我做了resetfileds&…

【kubernetes】陈述式资源管理的kubectl命令合集

目录 前言 一、K8s 资源管理操作方式 1、声明式资源管理方式 2、陈述式资源管理方式 二、陈述式资源管理方式 1、kubectl 命令基本语法 2、查看基本信息 2.1 查看版本信息 2.2 查看资源对象简写 2.3 配置kubectl命令自动补全 2.4 查看node节点日志 2.5 查看集群信息…

C++ | Leetcode C++题解之第112题路径总和

题目&#xff1a; 题解&#xff1a; class Solution { public:bool hasPathSum(TreeNode *root, int sum) {if (root nullptr) {return false;}if (root->left nullptr && root->right nullptr) {return sum root->val;}return hasPathSum(root->left…

立体库堆垛机的精密构造与功能(收藏版)

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在现代物流仓储体系中&#xff0c;堆垛机以其高效、精准的操作能力&#xff0c;成为了自动化存储与检索系统的关键所在。 其复杂的构造和多样化的…

基于开源二兄弟MediaPipe+Rerun实现人体姿势跟踪可视化

概述 本文中&#xff0c;我们将探索一个利用开源框架MediaPipe的功能以二维和三维方式跟踪人体姿势的使用情形。使这一探索更有趣味的是由开源可视化工具Rerun提供的可视化展示&#xff0c;该工具能够提供人类动作姿势的整体视图。 您将一步步跟随作者使用MediaPipe在2D和3D环…

Windows远程连接命令?

Windows操作系统提供了多种远程连接命令&#xff0c;使用户可以通过网络连接到远程计算机&#xff0c;并在远程操作系统上执行操作。远程连接命令可方便实现远程工作、故障排查和系统维护等任务。本文将介绍几种常见的Windows远程连接命令及其基本使用方法。 远程连接命令 Win…

从0开始带你成为Kafka消息中间件高手---第一讲

从0开始带你成为Kafka消息中间件高手—第一讲 网站的用户行为日志&#xff0c;假设电商网站&#xff0c;我现在需要买一个阅读架&#xff0c;看书的架子 京东&#xff0c;我平时比较喜欢用的是京东&#xff0c;送货很快&#xff0c;自营商品&#xff0c;都是放在自己的仓库里…

Netty初识Hello World 事件循环对象(EventLoop) 事件循环组 (EventLoopGroup)

初始Netty-HelloWorld Netty在网络通信中的地位就如同Spring框架在JavaEE开发中的地位。 基于Netty网络通信开发简易的服务端、客户端&#xff0c;以实现客户端向服务端发送hello world&#xff0c;服务端仅接收不返回数据。 服务端代码&#xff1a; Slf4j public class Hell…

HCIP-Datacom-ARST自选题库__MPLS多选【25道题】

1.下列描述中关于MPLS网络中配置静态LSP正确的是 当某一台LSR为Egress LSR时&#xff0c;1仅需配置In Label&#xff0c;范围为16~1023 当某一台LSR为Transit LSR时&#xff0c;需要同时配置In Label和Out label&#xff0c;In Label范围为16~1023&#xff0c;0utLabel范围为…

【C语言】C语言-学生选修课程系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…