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

相关文章

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

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,创建订单后