Carla自动驾驶仿真十: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)我们也可以运行官方脚本,有激光雷达点云信息;

python 复制代码
import carla
import random
import time
# from carla_painter import CarlaPainter

def do_something(data):
    pass


def 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 mode
        previous_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 vehicles
        spawn_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 vehicle
        blueprints_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 = None
            return

        other_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 actors
        ego_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 vehicle
        camera = 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 world
        world.tick()

        # save vehicles' trajectories to draw in the frontend
        trajectories = [[]]

        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 vehicle
            ego_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的安装及使用,确实是一个较只管的观测平台,如果能在基础上做控制的开发那就完美了。

相关推荐
IT古董5 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
湫ccc29 分钟前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou31 分钟前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路41 分钟前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python42 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白95043 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式
喜欢猪猪1 小时前
Django:从入门到精通
后端·python·django
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春1 小时前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天1 小时前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python