Carla自动驾驶仿真十:Carlaviz三维可视化平台搭建

2024-08-31 07:52

本文主要是介绍Carla自动驾驶仿真十:Carlaviz三维可视化平台搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、环境准备
      • 1、docker安装
      • 2、websocket-client安装
      • 3、carlaviz代码下载
  • 二、carlaviz使用
      • 1、打开carla客户端
      • 2、输入启动命令
      • 3、进入carlaviz
      • 4、修改manual_control.py脚本
      • 5、运行manual_control.py脚本
      • 6、运行carlaviz官方脚本(推荐)


前言

Carlaviz是一个开源的可视化工具,主要用于Carla三维场景、传感器数据以及自车数据的可视化,能够作为观测平台使用,本文主要介绍Carlaviz的安装以及基本使用;


一、环境准备

1、docker安装

1)根据所属环境下载对应的docker,然后直接安装即可

点击进入docker官网下载

2、websocket-client安装

1)进入终端输入:pip3 install websocket_client

3、carlaviz代码下载

carlaviz github链接

1)打开终端输入 docker pull mjxu96/carlaviz:0.9.14,请下载与自己carla版本一致的carlaviz,只需修改后面的版本号,如下载0.9.15版本的carlaviz:

在这里插入图片描述

二、carlaviz使用

1、打开carla客户端

在这里插入图片描述

2、输入启动命令

1)windows
终端输入:docker run -it -p 8080-8081:8080-8081 mjxu96/carlaviz:0.9.14 --simulator_host host.docker.internal --simulator_port 2000,注意carla的版本号一定要对上;

2)linux
终端输入:docker run -it --network="host" mjxu96/carlaviz:0.9.14 --simulator_host localhost --simulator_port 2000,注意carla的版本号一定要对上‘

windows输入启动命令后结果:
在这里插入图片描述

3、进入carlaviz

1)打开浏览器输入http://localhost:8080/,或者从docker软件进入,进入carlaviz如下图所示,能够正确加载到路网相关信息,此时没有ego信息以及摄像头画面是正常的,是因为需要启动python脚本生成车辆以及摄像头;

在这里插入图片描述

4、修改manual_control.py脚本

1、启动前需要将manual_control.py中主车的名称改成ego
在这里插入图片描述

5、运行manual_control.py脚本

1)运行脚本后正确接收到主车信息,摄像头画面等信息;

在这里插入图片描述

6、运行carlaviz官方脚本(推荐)

1)我们也可以运行官方脚本,有激光雷达点云信息;

import carla
import random
import time
# from carla_painter import CarlaPainterdef do_something(data):passdef main():try:# initialize one painter# painter = CarlaPainter('localhost', 8089)client = carla.Client('localhost', 2000)client.set_timeout(10.0)world = client.get_world()for blue_print in world.get_blueprint_library():if blue_print.id.startswith("sensor"):print(blue_print)# set synchronous modeprevious_settings = world.get_settings()world.apply_settings(carla.WorldSettings(synchronous_mode=True,fixed_delta_seconds=1.0 / 30.0))# randomly spawn an ego vehicle and several other vehiclesspawn_points = world.get_map().get_spawn_points()blueprints_vehicles = world.get_blueprint_library().filter("vehicle.*")ego_transform = spawn_points[random.randint(0, len(spawn_points) - 1)]other_vehicles_transforms = []for _ in range(3):other_vehicles_transforms.append(spawn_points[random.randint(0, len(spawn_points) - 1)])blueprints_vehicles = [x for x in blueprints_vehicles if int(x.get_attribute('number_of_wheels')) == 4]# set ego vehicle's role name to let CarlaViz know this vehicle is the ego vehicleblueprints_vehicles[0].set_attribute('role_name', 'ego') # or set to 'hero'batch = [carla.command.SpawnActor(blueprints_vehicles[0], ego_transform).then(carla.command.SetAutopilot(carla.command.FutureActor, True))]results = client.apply_batch_sync(batch, True)if not results[0].error:ego_vehicle = world.get_actor(results[0].actor_id)else:print('spawn ego error, exit')ego_vehicle = Nonereturnother_vehicles = []batch = []for i in range(3):batch.append(carla.command.SpawnActor(blueprints_vehicles[i + 1], other_vehicles_transforms[i]).then(carla.command.SetAutopilot(carla.command.FutureActor, True)))# set autopilot for all these actorsego_vehicle.set_autopilot(True)results = client.apply_batch_sync(batch, True)for result in results:if not result.error:other_vehicles.append(result.actor_id)# attach a camera and a lidar to the ego vehiclecamera = None# blueprint_camera = world.get_blueprint_library().find('sensor.camera.rgb')blueprint_camera = world.get_blueprint_library().find('sensor.camera.instance_segmentation')# blueprint_camera = world.get_blueprint_library().find('sensor.camera.depth')blueprint_camera.set_attribute('image_size_x', '640')blueprint_camera.set_attribute('image_size_y', '480')blueprint_camera.set_attribute('fov', '110')blueprint_camera.set_attribute('sensor_tick', '0.1')transform_camera = carla.Transform(carla.Location(y=+3.0, z=5.0))camera = world.spawn_actor(blueprint_camera, transform_camera, attach_to=ego_vehicle)camera.listen(lambda data: do_something(data))lidar = None# blueprint_lidar = world.get_blueprint_library().find('sensor.lidar.ray_cast')blueprint_lidar = world.get_blueprint_library().find('sensor.lidar.ray_cast_semantic')blueprint_lidar.set_attribute('range', '30')blueprint_lidar.set_attribute('rotation_frequency', '10')blueprint_lidar.set_attribute('channels', '32')blueprint_lidar.set_attribute('lower_fov', '-30')blueprint_lidar.set_attribute('upper_fov', '30')blueprint_lidar.set_attribute('points_per_second', '56000')transform_lidar = carla.Transform(carla.Location(x=0.0, z=5.0))lidar = world.spawn_actor(blueprint_lidar, transform_lidar, attach_to=ego_vehicle)lidar.listen(lambda data: do_something(data))# tick to generate these actors in the game worldworld.tick()# save vehicles' trajectories to draw in the frontendtrajectories = [[]]while (True):world.tick()ego_location = ego_vehicle.get_location()trajectories[0].append([ego_location.x, ego_location.y, ego_location.z])# draw trajectories# painter.draw_polylines(trajectories)# draw ego vehicle's velocity just above the ego vehicleego_velocity = ego_vehicle.get_velocity()velocity_str = "{:.2f}, ".format(ego_velocity.x) + "{:.2f}".format(ego_velocity.y) \+ ", {:.2f}".format(ego_velocity.z)# painter.draw_texts([velocity_str],#             [[ego_location.x, ego_location.y, ego_location.z + 10.0]], size=20)time.sleep(0.05)finally:if previous_settings is not None:world.apply_settings(previous_settings)if lidar is not None:lidar.stop()lidar.destroy()if camera is not None:camera.stop()camera.destroy()if ego_vehicle is not None:ego_vehicle.destroy()if other_vehicles is not None:client.apply_batch([carla.command.DestroyActor(x) for x in other_vehicles])if __name__ == "__main__":

在这里插入图片描述

综上,完成carlaviz的安装及使用,确实是一个较只管的观测平台,如果能在基础上做控制的开发那就完美了。

这篇关于Carla自动驾驶仿真十:Carlaviz三维可视化平台搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123318

相关文章

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停