Advertisement

自动驾驶仿真平台搭建一:Carla视频流送

阅读量:

=

文章目录

  • 背景介绍
    • 系统架构规划

    • 功能模块规划

    • 视频功能模块的实现框架

      • 基于Python的摄像头数据生成机制
      • 基于LabVIEW的数据可视化技术应用
    • 三、效果展示


背景

在利用 Carla 时,借助平台能够显著提升效率。进而计划开发基于 LabVIEW 和 Carla 的仿真平台 LAbCar。实际上 Carla 在 Python 环境中的兼容性更好。曾考虑采用 PyQt 或者 VisuAl + Flask 来构建仿真平台框架。但由于上位机界面设计及硬件控制功能更擅长 LabVIEW 这种专业工具,并且我本人对 LabVIEW 使用得较为熟练,在此决定采用 LabVIEW 作为主要开发平台。


一、平台设计

UI的界面相对较为简洁,并对布局进行了初步的设计。然而,在后续阶段中需要对功能进行优化和调整以提升用户体验。尽管如此,在当前阶段提供的界面设计基本上满足日常使用需求。

在这里插入图片描述

2、平台框架

这种方式不跑在实时机,但是数据如果统一由python调度,加上can端用python-can控制canoe去控制报文发送,这种模式应该还是挺稳定的。
![!在这里插入图片描述\((https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/kRSiozgnNhCWp1c302HGJUItvjwe.png)

二、视频显示模块实现

1、视频模块实现框架

在这里插入图片描述

2、python-camera数据生成

采用Python实现视频数据处理,并利用线程机制来管理多摄像头的数据采集工作。这部分内容相对较为基础。具体来说,我们通过调用CARLA生成摄像头图像,并通过调用 camera.listen() 来执行回调函数以获取 image data 并将其发送至 LabVIEW。由于后续将部署到多台 camera 系统中进行扩展应用开发

复制代码
    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()
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-16/A6i1x2tjubMNPk7l3r9daKO0vGVQ.png)

3、labview-camera数据可视化

ABView借助NI Vision模块实现了对Python传输来的RGB数据的可视化展示。具体而言,在Python端将图像数据转换为字节流后传输至LabVIEW系统中进行处理:LabVIEW接收到字节流后将其解析为三维数组(3 bytes一组),随后按照图像宽度和高度参数排列成二维数据集。接着使用NI Vision IMAQ ColorValueToIntegerVI子程序将RGB像素值转换为32位整数,并通过IMAQ ArrayToColorImageVI子程序生成可视化的颜色图像。
在探索 NI 模块的过程中发现该功能并非易得案例支持。

在这里插入图片描述

三、效果展示

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~