自动驾驶仿真平台搭建一:Carla视频流送
=
文章目录
- 背景介绍
-
系统架构规划
-
功能模块规划
-
视频功能模块的实现框架
- 基于Python的摄像头数据生成机制
- 基于LabVIEW的数据可视化技术应用
-
三、效果展示
-
背景
在利用 Carla 时,借助平台能够显著提升效率。进而计划开发基于 LabVIEW 和 Carla 的仿真平台 LAbCar。实际上 Carla 在 Python 环境中的兼容性更好。曾考虑采用 PyQt 或者 VisuAl + Flask 来构建仿真平台框架。但由于上位机界面设计及硬件控制功能更擅长 LabVIEW 这种专业工具,并且我本人对 LabVIEW 使用得较为熟练,在此决定采用 LabVIEW 作为主要开发平台。
一、平台设计
UI的界面相对较为简洁,并对布局进行了初步的设计。然而,在后续阶段中需要对功能进行优化和调整以提升用户体验。尽管如此,在当前阶段提供的界面设计基本上满足日常使用需求。

2、平台框架
这种方式不跑在实时机,但是数据如果统一由python调度,加上can端用python-can控制canoe去控制报文发送,这种模式应该还是挺稳定的。

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

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

三、效果展示

