├── docs ├── .nojekyll ├── demo │ ├── costmap.md │ └── lidar_slam.md ├── installation │ ├── carla_ros_bridge.md │ ├── ros.md │ ├── software_environment.md │ ├── hardware_and_system.md │ └── carla.md ├── knowledge │ ├── carla.md │ ├── docker.md │ ├── carla_ros_bridge.md │ └── ros.md ├── quick_guide │ ├── dataset_collection.md │ ├── realtime_decision_algorithm.md │ └── realtime_perception_algorithm.md ├── carla_ros_bridge │ ├── control.md │ ├── docker.md │ ├── sensor_and_collection.md │ └── environment.md ├── carla_python_api │ ├── sensor_and_collection.md │ ├── environment.md │ └── control.md ├── resources.md ├── images │ └── installation │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ └── 6.png ├── README.md ├── rules.md ├── _sidebar.md ├── index.html └── reference │ └── sensor_reference.md └── .gitignore /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .idea 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /docs/demo/costmap.md: -------------------------------------------------------------------------------- 1 | # Costmap 2 | 3 | 示例工程 -> Costmap -------------------------------------------------------------------------------- /docs/installation/carla_ros_bridge.md: -------------------------------------------------------------------------------- 1 | # CARLA ROS Bridge的安装 -------------------------------------------------------------------------------- /docs/knowledge/carla.md: -------------------------------------------------------------------------------- 1 | # CARLA 2 | 3 | 基础知识 -> CARLA -------------------------------------------------------------------------------- /docs/knowledge/docker.md: -------------------------------------------------------------------------------- 1 | # Docker 2 | 3 | 基础知识 -> Docker -------------------------------------------------------------------------------- /docs/demo/lidar_slam.md: -------------------------------------------------------------------------------- 1 | # LiDAR SLAM 2 | 3 | 示例工程 -> LiDAR SLAM -------------------------------------------------------------------------------- /docs/quick_guide/dataset_collection.md: -------------------------------------------------------------------------------- 1 | # 采集仿真数据集 2 | 3 | 快速指引 -> 采集仿真数据集 -------------------------------------------------------------------------------- /docs/carla_ros_bridge/control.md: -------------------------------------------------------------------------------- 1 | # 车辆控制 2 | 3 | 使用CARLA ROS Bridge -> 车辆控制 -------------------------------------------------------------------------------- /docs/carla_ros_bridge/docker.md: -------------------------------------------------------------------------------- 1 | # Docker化部署 2 | 3 | 使用CARLA ROS Bridge -> Docker化部署 -------------------------------------------------------------------------------- /docs/quick_guide/realtime_decision_algorithm.md: -------------------------------------------------------------------------------- 1 | # 运行实时决策算法 2 | 3 | 快速指引 -> 运行实时决策算法 -------------------------------------------------------------------------------- /docs/knowledge/carla_ros_bridge.md: -------------------------------------------------------------------------------- 1 | # CARLA ROS Bridge 2 | 3 | 基础知识 -> CARLA ROS Bridge -------------------------------------------------------------------------------- /docs/quick_guide/realtime_perception_algorithm.md: -------------------------------------------------------------------------------- 1 | # 运行实时感知算法 2 | 3 | 快速指引 -> 运行实时感知算法 -------------------------------------------------------------------------------- /docs/carla_python_api/sensor_and_collection.md: -------------------------------------------------------------------------------- 1 | # 传感器与数据采集 2 | 3 | 使用CARLA PythonAPI -> 传感器与数据采集 -------------------------------------------------------------------------------- /docs/carla_ros_bridge/sensor_and_collection.md: -------------------------------------------------------------------------------- 1 | # 传感器与数据采集 2 | 3 | 使用CARLA ROS Bridge -> 传感器与数据采集 -------------------------------------------------------------------------------- /docs/resources.md: -------------------------------------------------------------------------------- 1 | # 相关资源 2 | 3 | ## Carla 4 | 5 | ## Carla ROS Bridge 6 | 7 | ## 校内镜像 8 | 9 | ## 其他相关学习资料 -------------------------------------------------------------------------------- /docs/images/installation/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sustech-isus/carla-tutorial/HEAD/docs/images/installation/1.png -------------------------------------------------------------------------------- /docs/images/installation/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sustech-isus/carla-tutorial/HEAD/docs/images/installation/2.png -------------------------------------------------------------------------------- /docs/images/installation/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sustech-isus/carla-tutorial/HEAD/docs/images/installation/3.png -------------------------------------------------------------------------------- /docs/images/installation/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sustech-isus/carla-tutorial/HEAD/docs/images/installation/4.png -------------------------------------------------------------------------------- /docs/images/installation/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sustech-isus/carla-tutorial/HEAD/docs/images/installation/5.png -------------------------------------------------------------------------------- /docs/images/installation/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sustech-isus/carla-tutorial/HEAD/docs/images/installation/6.png -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # 项目简介 2 | 3 | 本项目由南方科技大学郝祁教授课题组建立,旨在提供CARLA自动驾驶仿真器的快速上手教程。 4 | 本文档包括: 5 | * CARLA快速安装与配置 6 | * ROS快速安装与配置 7 | * 设置仿真器的场景与环境 8 | * 受控车辆基础传感器配置与数据输出 9 | * 受控车辆基础控制 10 | * 使用CARLA生成数据集 11 | * 使用CARLA和ROS进行联合仿真 12 | 13 | # 发布 14 | 15 | 本教程最新的发布版可以在下列地址找到. 16 | 17 | [中文文档](https://sustech-isus.github.io/carla-tutorial/#/zh-cn/) -------------------------------------------------------------------------------- /docs/installation/ros.md: -------------------------------------------------------------------------------- 1 | # ROS的安装 2 | 3 | 本章节介绍ROS的安装,需要注意的是ROS有多个版本,分别对应不同的linux发行版,对照表如下 4 | 5 | | **ROS版本** | **Ubuntu发行版** | 6 | | :--------------------: | :------------------: | 7 | | ROS Kinetic | Ubuntu 16.04 LTS | 8 | | ROS Melodic | Ubuntu 18.04 LTS 9 | | ROS Noetic | Ubuntu 20.04 LTS 10 | 11 | > [!NOTE] 12 | > 本教程以Ubuntu 18.04LTS为样例 13 | 14 | > [!TIP] 15 | > 为了保证兼容性和稳定性,我们推荐您使用Ubunti 18.04LTS配套ROS Melodic 16 | 17 | ### -------------------------------------------------------------------------------- /docs/installation/software_environment.md: -------------------------------------------------------------------------------- 1 | # 软件环境 2 | 3 | 软件环境章节包括开发需要用到的基础软件、版本约束及IDE推荐。 4 | 5 | ## Python 与 Pip 6 | 7 | 由于CARLA发行版指定了Python版本,使用其他版本的Python会导致引用问题,本文档指定使用`Python 2.7`作为Python的版本。 8 | 9 | > [!WARNING] 10 | > `Python`与`Pip`的版本需要匹配,使用`python -V`以及`pip -V`查询 11 | 12 | ## Anaconda 与 VirtualEnv 13 | 14 | ## IDE推荐 15 | 16 | 推荐使用以下编辑器/IDE进行开发: 17 | * Microsoft Visual Studio Code 18 | * Jetbrain PyCharm 19 | * Jetbrain CLion 20 | 21 | > [!TIP] 22 | > 南科大师生可以使用学校邮箱免费使用教育授权的Jetbrain IDE套装 -------------------------------------------------------------------------------- /docs/rules.md: -------------------------------------------------------------------------------- 1 | # 编写规范 2 | 本部分包括了对文档编写规范的约束。 3 | 4 | ## 文件结构 5 | 6 | ``` 7 | carla-tutorial 8 | ├── demo // => Demo codes | 演示用代码 9 | ├── docs // => Documents | 文档相关文件 10 | │   ├── README.md // => Main page | 文档主页 11 | | ├── intro.md // => Introduction | 项目概述 12 | | ├── _sidebar.md // => Sidebar | 侧边栏导航 13 | | ├── resources.md // => Ralated Resources | 相关资源 14 | | ├── rules.md // => Writing Rules | 文档规范 15 | │   └── quick_start 16 | │   └── README.md 17 | └── images // => Images storage | 图片储存 18 | ``` 19 | 20 | > [!ATTENTION] 21 | > 22 | >不要修改文件结构与`index.html`,这将会导致发布页面异常 23 | 24 | ## 提示与警告 25 | 26 | 对提示与警告的使用做出如下规定,请在编写文档时注意。 27 | 28 | > [!NOTE] 29 | > 30 | > 该级别用于提供**文档内容的说明**或**外部链接的引用** 31 | > 32 | > *举例: 简短说明CARAL额外下载的资产包括什么内容* 33 | 34 | > [!TIP] 35 | > 36 | > 该级别用于提供**最佳实践**或**最佳实践的引用** 37 | > 38 | > *举例: 最佳的CARAL版本管理方式* 39 | 40 | > [!WARNING] 41 | > 42 | > 该级别用于警示可能**引发应用程序使用问题**的操作 43 | > 44 | > *举例: 在zsh中引用了setup.bash* 45 | 46 | > [!ATTENTION] 47 | > 48 | > 该级别用于警示一定会**引发严重问题**或**系统环境错误**的操作 49 | > 50 | > *举例: 对操作系统Python版本的操作* 51 | 52 | ### 使用警示 53 | 54 | 在使用提示框时,标点符号(不论中英文)必须后跟空格,否则会在渲染时丢失整个提示框。 55 | 56 | ## 上传与发布 57 | 58 | 本文档使用Github Pages进行自动发布,对Github储存仓库的上传等同于新版本的发布。 -------------------------------------------------------------------------------- /docs/knowledge/ros.md: -------------------------------------------------------------------------------- 1 | # ROS 2 | 3 | 关于如何学习ROS(机器人操作系统)已经是一个老生常谈的话题了,为什么要使用ROS呢? 4 | 5 | ROS是世界上最大的机器人软件开发平台,得益于其开源性和社区性,我们可以很容易找到基于ROS的高水平开源算法来快速实现在自己的硬件平台上,那么ROS到底提供了我们怎样的方便?从本质上看,ROS其实是一套“通信架构”+“代码管理框架”+“实用工具包”的组合体。在通信上,其节点间的序列化和反序列化的消息通信机制一定程度上解决了进程之间通信的问题;而代码管理上,也提供了方便的节点、包和工作区管理功能,让我们很容易层级化进程、模块和仓库的关系;同时,ROS提供的可视化工具让使用者更高效的调试。 6 | 7 | 首先,就是要去学会使用其通讯机制。这部分的学习其实一本书就足够了,[A Gentle Introduction To ROS](https://www.cse.sc.edu/~jokane/agitr/)([中文版](https://www.cse.sc.edu/~jokane/agitr/%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%EF%BC%88ROS%EF%BC%89%E6%B5%85%E6%9E%90.pdf))。这本书虽然版本可能比较旧,但可以保证你对ROS有一个最基本的认识,其内容也覆盖了上面知识导图中的通信机制(topic、service)、编译工具链(catkin)、参数机制(rosparam)等等。此外,在机器人导航算法的应用中有大量使用[actionlib](http://wiki.ros.org/actionlib)机制(适用于需要周期性反馈的节点间通信),这也是ROS中委托反馈过程任务中经常使用的机制,例如导航过程。关于actionlib的使用,此书还没有覆盖到,需要通过[ROS Wiki](http://wiki.ros.org)进行进阶的学习。 8 | 9 | 在一个机器人系统中,你会面对诸多坐标变换问题,例如传感器与机器人底盘间、机器人与地图间、机器人与机器人间的坐标关系。这时你就会用到ROS中不可忽视的坐标变换工具(tf)。它使用树型的数据结构,根据时间戳缓存并维护多个参考系之间的坐标变换关系,方便你在不同参考系之间进行转换。对于tf的学习建议从官方的[tutorial](http://wiki.ros.org/tf/Tutorials)开始,若想对其深入的理解就必须要进一步结合实际的开发。 10 | 11 | 在你调试机器人的时候,一般会在自己的PC上进行开发,再部署到机器人的机载电脑上进行调试,这时ROS的网络通信的优势就体现出来了,你可以根据Wiki上简单的几步教程就完成相关的网络配置,而ROS还拥有非常丰富实用的可视化工具(如rviz,rqt_plot,rqt_graph)等等,让你在面对复杂的机器人系统时也能直观的观察其表现、发现其中的问题。这些实用的工具都值得初学者去跟着tutorial学习,同时做一些小demo。 -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | * **概述** 2 | * [项目简介](README.md) 3 | * [编写规范](rules.md) 4 | * [相关资料](resources.md) 5 | * **基础知识** 6 | * [CARLA](/knowledge/carla.md) 7 | * [ROS](/knowledge/ros.md) 8 | * [Docker](/knowledge/docker.md) 9 | * [CARLA ROS Bridge](/knowledge/carla_ros_bridge.md) 10 | * **快速指引** 11 | * [采集仿真数据集](/quick_guide/dataset_collection.md) 12 | * [运行实时感知算法](/quick_guide/realtime_decision_algorithm.md) 13 | * [运行实时决策算法](/quick_guide/realtime_perception_algorithm.md) 14 | * **安装配置** 15 | * [硬件与系统](/installation/hardware_and_system.md) 16 | * [软件环境](/installation/software_environment.md) 17 | * [CARLA的安装](/installation/carla.md) 18 | * [ROS的安装](/installation/ros.md) 19 | * [CARLA ROS Bridge的安装](/installation/carla_ros_bridge.md) 20 | * **使用CARLA PythonAPI** 21 | * [仿真环境配置](/carla_python_api/environment.md) 22 | * [车辆控制](/carla_python_api/control.md) 23 | * [传感器与数据采集](/carla_python_api/sensor_and_collection.md) 24 | * **使用CARLA ROS Bridge** 25 | * [仿真环境配置](/carla_ros_bridge/environment.md) 26 | * [车辆控制](/carla_ros_bridge/control.md) 27 | * [传感器与数据采集](/carla_ros_bridge/sensor_and_collection.md) 28 | * [Docker化部署](/carla_ros_bridge/docker.md) 29 | * **示例工程** 30 | * [Costmap](/demo/costmap.md) 31 | * [激光雷达SLAM](/demo/lidar_slam.md) 32 | * **参考文档** 33 | * [传感器参数参考](/reference/sensor_reference.md) -------------------------------------------------------------------------------- /docs/carla_ros_bridge/environment.md: -------------------------------------------------------------------------------- 1 | # 仿真环境配置 2 | 3 | 本部分提供了Carla ROS-Bridge的基础环境配置流程。 4 | 5 | ## 安装并启动Carla服务端 6 | 7 | 若需要使用Carla ROS-Brige工程,需要先启动Carla Server服务端。 8 | 9 | ### 使用Release预编译版本 10 | 11 | 第一种启动服务端的方式是直接下载预编译的Carla服务端, 直接执行以下命令即可。 12 | 13 | ```bash 14 | cd $CARLA_ROOT #切换至CARLA文件夹 15 | ./CARLA_UE4.sh 16 | ``` 17 | 18 | > [!NOTE] 19 | > 20 | > 预编译版本下载及安装的详细流程可以参考 [CARLA的安装](/installation/carla) 部分。 21 | 22 | 23 | 第二种方式使用Docker版本服务端,更适合用于服务器等环境,默认关闭服务端可视化显示,并在后台持续运行。 24 | 25 | ### 使用Docker版本 26 | ```bash 27 | # 以启动0.9.10.1版本为例 28 | docker run -d --name=carla-server --ipc=host --network=host --runtime=nvidia --gpus all -e SDL_VIDEODRIVER=offscreen --restart=always harbor.isus.tech/carlasim/carla:0.9.10.1 bash CarlaUE4.sh 29 | 30 | ``` 31 | | **参数** | **说明** | 32 | | :----------------------------: | :------------------: | 33 | | `-d` | 后台运行容器 | 34 | | `--name=carla-server` | 指定容器名称为`carla-server` 35 | | `--network` | 指定容器网络连接类型为`host`模式,与宿主机使用相同的网络 36 | | `--runtime=nvidia --gpus all` | 启用nvidia-docker, 映射全部显卡 37 | | `-e SDL_VIDEODRIVER=offscreen` | 添加环境变量,禁用服务端GUI界面 38 | | `--restart=always` | 自动重新启动 39 | 40 | > [!NOTE] 41 | > 42 | > `harbor.isus.tech`为内网容器仓库,若使用公网Docker Hub, 可以直接使用 `carlasim/carla:相应版本` 43 | 44 | ## 配置并编译 ROS Bridge代码 45 | 46 | ```bash 47 | # 创建workspace,并拉取ROS Bridge代码 48 | mkdir -p ~/carla_ros_ws/src 49 | cd ~/carla_ros_ws/src 50 | git clone https://github.com/carla-simulator/ros-bridge.git -b 0.9.10.1 51 | cd ros-bridge 52 | 53 | # 拉取submodule 54 | git submodule update --init 55 | 56 | cd ~/carla_ros_ws 57 | # 利用rosdep工具安装相关依赖 58 | rosdep update 59 | rosdep install -y --from-paths src --ignore-src --rosdistro melodic 60 | 61 | # 编译工程 62 | catkin_make 63 | # 加载环境变量 64 | source devel/setup.bash 65 | ``` 66 | 67 | ## 启动 ROS Bridge 68 | 69 | ```bash 70 | 71 | export PYTHONPATH=$PYTHONPATH:/PythonAPI/carla/dist/carla-.egg 72 | source ~/carla_ros_ws/devel/setup.bash 73 | 74 | roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch 75 | 76 | ``` 77 | 78 | 79 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Carla Tutorial 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /docs/carla_python_api/environment.md: -------------------------------------------------------------------------------- 1 | # 仿真环境配置 2 | 3 | > [!NOTE] 4 | > 本章节只会介绍几个常用的PythonAPI和其常用方法,有关Python API的具体定义和所有方法请参考官网。 5 | 6 | 在介绍CARLA的Python API之前,需要先了解几个常用Carla PythonAPI的概念。 7 | 8 | 9 | ## 常用Python API概念 10 | 11 | ### 客户端(carla.Client) 12 | 13 | 客户端是用户运行的用来获取仿真环境信息或改变仿真行为的模块。 14 | 15 | 客户端使用IP和特定端口运行。 它通过终端与服务器通信。 可以有多个客户端同时运行。 16 | 17 | ### 世界(carla.World) 18 | 19 | 世界是对整个仿真环境的抽象。 20 | 21 | 其中包含添加车辆,更改天气,获取仿真信息等主要方法。 22 | 23 | 每个仿真环境中只有一个世界。 24 | 25 | ## 创建客户端 26 | 27 | 创建客户端需要: 28 | 1. CARLA仿真实例的IP地址。默认值为localhost (127.0.0.1) 29 | 2. CARLA仿真实例的TCP端口。默认值为2000。 30 | 31 | > [!NOTE] 32 | > CARLA仿真实例在Windows下指的是CarlaUE4.exe,在Linux下指的是./CarlaUE4.sh,如果是源码编译就是运行CARLA项目的UE4。 33 | > 34 | >CARLA仿真实例的TCP端口是在运行仿真实例的时候设置,一般仅在端口冲突时使用。 35 | >` 36 | >./CarlaUE4.sh -carla-rpc-port=3000 37 | >` 38 | 39 | ``` 40 | client = carla.Client('localhost', 2000) 41 | ``` 42 | 43 | 创建客户端后,请设置其超时时间。设置超时时间避免了因为某个操作时间过长导致客户端一直挂起的情况。 44 | 45 | > [!ATTENTION] 46 | > 超时时间默认为5秒,对于部分需要时间较长的操作(如加载新地图),可能由于超时时间不足导致未知错误。 47 | 48 | ``` 49 | client.set_timeout(10.0) # seconds 50 | ``` 51 | 52 | ## 加载地图 53 | 可以通过客户端获取当前的仿真世界。 54 | ``` 55 | world = client.get_world() 56 | ``` 57 | 客户端还可以获取可用地图列表以更改当前地图。 58 | 59 | ``` 60 | print(client.get_available_maps()) 61 | 62 | world = client.load_world('Town01') 63 | ``` 64 | 如果存在部分车辆在脚本结束后未被销毁等其他错误,也可以重置当前仿真世界。 65 | ``` 66 | world = client.reload_world() 67 | ``` 68 | 69 | ## 设置天气 70 | 71 | 天气本身并不是一个类,而是通过World类访问的一组参数。 可以设置的参数包括太阳高度角和方位角,云的密度,风,雾等等。 类carla.WeatherParameters用于设置自定义天气。 72 | 73 | ``` 74 | weather = carla.WeatherParameters( 75 | cloudiness=80.0, 76 | precipitation=30.0, 77 | sun_altitude_angle=70.0) 78 | 79 | world.set_weather(weather) 80 | 81 | print(world.get_weather()) 82 | ``` 83 | 84 | CARLA也自定义了一组预设天气。这些列在carla.WeatherParameters中,可以作为枚举访问。也可以在运行manual_control.py脚本时按C键更换预设天气。 85 | ``` 86 | world.set_weather(carla.WeatherParameters.WetCloudySunset) 87 | ``` 88 | 89 | ## 设置光照 90 | 91 | ### 路灯 92 | 当模拟进入夜间模式时,路灯会自动打开。 灯光由地图的开发人员放置,可以作为carla.Light对象访问。 颜色和强度等属性可以随意更改。 93 | 94 | ``` 95 | # Get the light manager and lights 96 | lmanager = world.get_lightmanager() 97 | mylights = lmanager.get_all_lights() 98 | 99 | # Custom a specific light 100 | light01 = mylights[0] 101 | light01.turn_on() 102 | light01.set_intensity(100.0) 103 | state01 = carla.LightState(200.0,red,carla.LightGroup.Building,True) 104 | light01.set_light_state(state01) 105 | 106 | # Custom a group of lights 107 | my_lights = lmanager.get_light_group(carla.LightGroup.Building) 108 | lmanager.turn_on(my_lights) 109 | lmanager.set_color(my_lights,carla.Color(255,0,0)) 110 | lmanager.set_intensities(my_lights,list_of_intensities) 111 | ``` 112 | 113 | ### 车灯 114 | 115 | 每辆车在carla.VehicleLightState中列出了一组灯光。到目前为止,并非所有车辆都集成了照明灯。这是撰写本文时支持设置车灯的车型列表。 116 | 117 | > 自行车: 它们都具有前后位置灯。 118 | > 119 | > 摩托车: Yamaha和Harley Davidson。 120 | > 121 | > 汽车: Audi TT, Chevrolet, Dodge (the police car), Etron, Lincoln, Mustang, Tesla 3S, Wolkswagen T2 122 | 123 | 可以使用carla.Vehicle.get_light_state和carla.Vehicle.set_light_state方法随时检索和更新车辆的光照。它们使用二进制操作来自定义灯光设置。 124 | ``` 125 | # Turn on position lights 126 | current_lights = carla.VehicleLightState.NONE 127 | current_lights |= carla.VehicleLightState.Position 128 | vehicle.set_light_state(current_lights) 129 | ``` 130 | -------------------------------------------------------------------------------- /docs/installation/hardware_and_system.md: -------------------------------------------------------------------------------- 1 | # 硬件与系统 2 | 3 | 本部分提供了针对不同使用需求下的计算机硬件配置要求详表,计算机操作系统要求及最佳化配置解决方案。 4 | 5 | ## 硬件配置要求 6 | 7 | CARLA由于处理管线优化问题的存在,对计算机硬件性能有苛刻的要求。根据使用CARLA的场景不同,可以分为:开发用途、实时用途与非实时用途。 8 | 9 | 其中,开发用途因为涉及CARLA及UnrealEngine的源码编译,对计算机硬件性能有着最高的要求;实时用途需要满足传感器的最低采样率或决策的最低粒度,根据需求的不同,对计算机性能的要求也不同;非实时用途(如数据集采集)在满足CARLA支持的最低硬件配置要求下即可达成硬件需求。 10 | 11 | > [!NOTE] 12 | > 本章节会随着“CARLA边界探索(运算资源部分)”项目的推进即时更新内容 13 | 14 | ### 最低硬件配置要求 15 | 16 | 对于CARLA而言,能够正常启动CARLA Server即代表可以使用,最低硬盘配置要求如下。 17 | 18 | | 类别 | 名称 | 19 | | ---- | ---- | 20 | | CPU | i5-9400 | 21 | | RAM | DDR4 16GB | 22 | | GPU | GTX1660s | 23 | 24 | > [!ATTENTION] 25 | > CPU需要保证最低四个物理核心, 非逻辑核心 26 | > 27 | > GPU最低配置要求需要至少使用标准电压版显卡, 即非笔记本用显卡 28 | 29 | > [!WARNING] 30 | > 最低配置来自于CARLA官方文档,未经过实际的测试 31 | 32 | ### 实时用途使用推荐配置 33 | 34 | 对于一般的实时用途(1CAM + 1LiDAR)传感器配置下的车辆可以参考下列配置,如果配置的车辆拥有更多的传感器,请参考开发用途推荐配置。 35 | 36 | | 类别 | 名称 | 37 | | ---- | ---- | 38 | | CPU | i7-9700 | 39 | | RAM | DDR4 16GB | 40 | | GPU | GTX2070 | 41 | 42 | > [!WARNING] 43 | > 该配置未经过严格的实际测试 44 | 45 | ### 开发用途推荐配置 46 | 47 | 开发用途可以以该配置为基准,如果对性能有更高的要求,推荐进一步升级显卡。 48 | 49 | | 类别 | 名称 | 50 | | ---- | ---- | 51 | | CPU | i7-10700KF | 52 | | RAM | DDR4 16GB | 53 | | GPU | RTX3070 | 54 | 55 | > [!TIP] 56 | > 使用RTX2080及以上级别的GPU可以满足开发用途的基本需要 57 | 58 | ## 操作系统要求 59 | 60 | CARLA官方支持Windows以及Ubuntu的64位操作系统。但是,由于绝大部分工作需要使用ROS与CARLA ROS Bridge,以及为了避免操作系统版本问题引发未知错误的考虑,本教程统一要求使用`Ubuntu 18.04 LTS`操作系统。 61 | 62 | > [!TIP] 63 | > 请在了解Ubuntu基础操作以及Terminal命令的基础上使用本文档 64 | 65 | ## 显卡驱动 66 | 67 | 无论使用何种配置,请务必确保显卡驱动已经正确安装且正在运行。 68 | 69 | > [!ATTENTION] 70 | > 显卡无法识别或显卡驱动未正常配置会导致CARLA运行失败。 71 | 72 | ### 检查显卡驱动 73 | 对于NVIDIA显卡,可以通过命令`nvidia-smi`检查。出现类似如下内容说明显卡驱动已经正常安装. 74 | ``` 75 | +-----------------------------------------------------------------------------+ 76 | | NVIDIA-SMI 455.38 Driver Version: 455.38 CUDA Version: 11.1 | 77 | |-------------------------------+----------------------+----------------------+ 78 | | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | 79 | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | 80 | | | | MIG M. | 81 | |===============================+======================+======================| 82 | | 0 GeForce RTX 3070 Off | 00000000:01:00.0 On | N/A | 83 | | 0% 39C P8 12W / 270W | 246MiB / 7979MiB | 3% Default | 84 | | | | N/A | 85 | +-------------------------------+----------------------+----------------------+ 86 | 87 | +-----------------------------------------------------------------------------+ 88 | | Processes: | 89 | | GPU GI CI PID Type Process name GPU Memory | 90 | | ID ID Usage | 91 | |=============================================================================| 92 | | 0 N/A N/A 1218 G /usr/lib/xorg/Xorg 18MiB | 93 | | 0 N/A N/A 1329 G /usr/bin/gnome-shell 52MiB | 94 | | 0 N/A N/A 1606 G /usr/lib/xorg/Xorg 86MiB | 95 | | 0 N/A N/A 1750 G /usr/bin/gnome-shell 84MiB | 96 | +-----------------------------------------------------------------------------+ 97 | 98 | ``` 99 | 100 | ### 安装显卡驱动 101 | 102 | 使用Ubuntu系统的驱动自动安装显卡驱动是安装显卡驱动最为便利的方法。 103 | 104 | ``` 105 | sudo ubuntu-drivers autoinstall 106 | ``` 107 | 安装完成后,请重启计算机后,再次检查显卡驱动。 -------------------------------------------------------------------------------- /docs/installation/carla.md: -------------------------------------------------------------------------------- 1 | # CARLA的安装 2 | 3 | 本文档提供了三种CARLA的安装部署方式,请根据自己的需求选择最为适当的方式进行安装。请根据下面的引导选择您的安装方式。 4 | 5 | 1. 如果您有下列需求,请**务必**以[编译方式安装CARLA](#以编译方式安装CARLA): 6 | 7 | * 使用自定义地图 8 | 9 | * 使用自定义车辆 10 | 11 | * 使用自定义的传感器模型 12 | 13 | * 使用除`python 2.7`或`python 3.7`以外的特别版本 14 | 15 | 2. 如果您处于下列情形之一,请以[安装包方式部署CARLA](#以安装包方式部署CARLA): 16 | 17 | * 您是初学者,首次接触CARLA 18 | 19 | * 您使用非NVIDIA显卡 20 | 21 | 3. 如果您了解且熟悉Docker的操作,可以尝试以[Docker方式部署CARLA](#以Docker方式部署CARLA) 22 | 23 | > [!TIP] 24 | > 25 | > 如果您不确定您的需求,我们强烈推荐以[包方式部署CARLA](#以安装包方式部署CARLA) 26 | 27 | > [!NOTE] 28 | > 29 | > 在Windows系统下CARLA的安装与编译不在本文档涉及的范围之内,请参考官方文档相关部分,详见 30 | > 31 | > [https://carla.readthedocs.io/en/latest/build_windows/](https://carla.readthedocs.io/en/latest/build_windows/) 32 | 33 | ## 以安装包方式部署CARLA 34 | 35 | 以下内容为以安装包方式部署CARLA的教程。 36 | 37 | ### 安装依赖 38 | 使用CARLA需要安装两个Python依赖包,请使用`pip`工具进行安装 39 | ``` 40 | pip install --user pygame numpy 41 | ``` 42 | 43 | > [!ATTENTION] 44 | > 安装依赖前请根据文档[软件环境](./installation/software_environment.md)部分再次确认Python的版本 45 | 46 | ### 下载安装包 47 | 48 | > [!NOTE] 49 | > 本教程以 `CARLA 0.9.11` 版本为例 50 | 51 | 访问CARAL的Github Repositories中的[Release](https://github.com/carla-simulator/carla/releases/)页面,点击您所需要的版本下载并保存到本地。请同时下载`CARLR_{version).tar.gz`主程序文件与`AdditionalMaps_{version}.tar.gz`地图扩展包。 52 | 53 | ![avatar](../../images/installation/2.png) 54 | 55 | ---------- 56 | > [!TIP] 57 | > 58 | > 这是我们推荐的最佳下载方式 59 | 60 | 此外,我们提供了CARLA官方安装包在南科大校内网的镜像,推荐您从[该处](http://cdn.isus.tech/downloads/carla/)下载以获得更快的下载速度。 61 | 62 | ![avatar](../../images/installation/3.png) 63 | 64 | 65 | 66 | --------- 67 | 68 | 作为示例,我们将这两个压缩包储存于下述地址 69 | ``` 70 | ~/Downloads/CARLA_0.9.11.tar.gz 71 | ~/Downloads/AdditionalMaps_0.9.11.tar.gz 72 | ``` 73 | 74 | ![avatar](../../images/installation/1.png) 75 | 76 | ### 解压安装 77 | 78 | 建立用于存放CARLA应用程序的文件夹 79 | 80 | ``` 81 | $ mkdir -p ~/CARLA/0_9_11 82 | ``` 83 | 84 | > [!TIP] 85 | > 我们推荐以文件夹的方式管理CARLA的不同版本,例如 86 | > ``` 87 | > ├── CARLA 88 | │   ├── 0_9_10 89 | │   └── 0_9_11 90 | > ``` 91 | 92 | ------------- 93 | 将安装程序压缩包`CARLA_{version}.tar.gz`解压缩至刚刚创建的文件夹内 94 | 95 | ``` 96 | $ tar -zxvf ~/Downloads/CARLA_0.9.11.tar.gz -C ~/CARLA/0_9_11 97 | ``` 98 | 99 | 可以通过访问文件夹或者`ll`命令检查解压结果是否正确 100 | 101 | ![avatar](../../images/installation/4.png) 102 | 103 | 104 | ------------- 105 | 接下来安装CARLA的附加资产包`AdditionalMaps_{version}.tar.gz`,将其直接解压缩至目标CARLA版本的文件夹下 106 | 107 | ``` 108 | $ tar -zxvf ~/Downloads/AdditionalMaps_0.9.11.tar.gz -C ~/CARLA/0_9_11 109 | ``` 110 | 111 | > [!WARNING] 112 | > 请确保将附加资产包和CARLA主程序的版本一致 113 | 114 | -------------- 115 | 116 | 使用下列命令导入资产 117 | ``` 118 | $ cd ~/CARLA/0_9_11 119 | $ ./ImportAssets.sh 120 | ``` 121 | 如果您已经正确安装了`AdditionalMaps`附加资产包,这个命令应该会很快结束,如果您安装不正确,运行这个命令将会从云端拉取附加资产包。 122 | 123 | ### 运行与验证 124 | 125 | 首先启动CARLA的服务端,进入当前版本的应用程序根目录 126 | ``` 127 | $ cd ~/CARLA/0_9_11 128 | ``` 129 | 启动CARLA服务端 130 | ``` 131 | $ ./CarlaUE4.sh 132 | ``` 133 | 如果一切正常,您将会看到如下界面,这说明您的CARLA服务端已经正常启动 134 | 135 | ![avatar](../../images/installation/5.png) 136 | 137 | ------------- 138 | 139 | 接下来启动CARLA的客户端,进入当前版本的PythonAPI例程目录 140 | ``` 141 | $ cd ~/CARLA/0_9_11/PythonAPI/examples 142 | ``` 143 | 启动客户端,在这里的例子为使用键盘控制车辆的Python脚本`manual_control.py` 144 | ``` 145 | $ python manual_control.py 146 | ``` 147 | 148 | 如果一切正常,您将会看到如下界面,这说明您的CARLA客户端已经正常启动 149 | 150 | ![avatar](../../images/installation/6.png) 151 | 152 | CARLA的安装到此结束。 153 | 154 | ## 以Docker方式部署CARLA 155 | 156 | > [!NOTE] 157 | > 158 | > 请参考官方文档相关部分,详见 159 | > 160 | > [https://carla.readthedocs.io/en/latest/build_docker/](https://carla.readthedocs.io/en/latest/build_docker/) 161 | 162 | > [!TIP] 163 | > 164 | > 我们提供了南科大校内的Docker源,推荐您使用该Docker源进行进行安装,以获得更快的下载速度 165 | > 166 | > https://harbor.isus.tech/harbor/projects/3/repositories/carla 167 | 168 | ## 以编译方式安装CARLA 169 | 170 | > [!NOTE] 171 | > 172 | > 请参考官方文档相关部分,详见 173 | > 174 | > [https://carla.readthedocs.io/en/latest/build_linux/](https://carla.readthedocs.io/en/latest/build_linux/) 175 | -------------------------------------------------------------------------------- /docs/carla_python_api/control.md: -------------------------------------------------------------------------------- 1 | # 车辆控制 2 | 3 | ## 设置车型和车辆生成位姿 4 | 在CARLA中,每一个物体(Actor)都有自己的蓝图(blueprint)。蓝图可以理解成物体的类型。 5 | 6 | 每一个CARLA Server都有其对应的蓝图库,可以通过调用`carla.World`类下的`get_blueprint_library`来获取。`carla.BlueprintLibrary`提供了`filter`方法,可以筛选自己想要的车辆类型。 7 | 8 | ``` 9 | vehicle_blueprint_list = world.get_blueprint_library().filter('vehicle.*') 10 | print (vehicle_blueprint_list) 11 | 12 | blueprint = random.choice(world.get_blueprint_library().filter('vehicle.*')) 13 | ``` 14 | 15 | 16 | ## 添加车辆 17 | 18 | 生成车辆需要调用调用`carla.World`类下的 `spawn_actor` 或 `try_spawn_actor` 方法。 19 | 20 | `spawn_actor` 和 `try_spawn_actor` 的参数相同。但是在失败时 `spawn_actor` 会引发异常, `try_spawn_actor` 返回None。 21 | 22 | ### carla.World 23 | 24 | - **spawn_actor**(self, blueprint, transform, attach_to=None, attachment=Rigid) 25 | - **blueprint** (carla.ActorBlueprint): 26 | 27 | 生成Actor的蓝图 28 | 29 | - **transform** (carla.Transform): 30 | 31 | 生成Actor的xyz坐标和绕三个轴的旋转角度。 32 | 33 | 34 | - **attach_to** (carla.Actor): 35 | 36 | 生成Actor的需要跟随的父物体,比如车载相机Actor需要跟随的父物体是车辆Actor。默认值为空。 37 | 38 | - **attachment** (carla.AttachmentType): 39 | 40 | 生成Actor跟随父物体的移动方式。默认值为Rigid,子物体和父物体的相对位置保持绝对不变。 41 | 42 | - **try_spawn_actor**(self, blueprint, transform, attach_to=None, attachment=Rigid) 43 | 44 | 45 | - **blueprint** (carla.ActorBlueprint): 46 | 47 | 生成Actor的蓝图 48 | 49 | - **transform** (carla.Transform): 50 | 51 | 生成Actor的xyz坐标和绕三个轴的旋转角度。 52 | 53 | 54 | - **attach_to** (carla.Actor): 55 | 56 | 生成Actor的需要跟随的父物体,比如车载相机Actor需要跟随的父物体是车辆Actor。默认值为空。 57 | 58 | - **attachment** (carla.AttachmentType): 59 | 60 | 生成Actor跟随父物体的移动方式。默认值为Rigid,子物体和父物体的相对位置保持绝对不变。 61 | 62 | ## 控制车辆 63 | carla.Vehicle类下的apply_control方法实现了对车辆的控制。需要传递carla.VehicleControl类的参数。 64 | 65 | carla.VehicleControl定义了车辆控制参数,包括油门、刹车、转向角、手刹、反向、档位、是否启用档位七个变量。 66 | 67 | ### carla.Vehicle 68 | 69 | - **apply_control**(self, control) 70 | - **control** (carla.VehicleControl): 71 | 72 | 在下一个tick上应用的车辆控制对象,包含诸如油门、转向或换档等参数。 73 | 74 | 75 | ### carla.VehicleControl 76 | 77 | - **\_\_init\_\_**(self, throttle=0.0, steer=0.0, brake=0.0, hand_brake=False, reverse=False, manual_gear_shift=False, gear=0) 78 | - **throttle** (float): 79 | 80 | 控制车辆油门的标量值。取值范围[0.0,1.0],默认值为0.0。 81 | 82 | - **steer** (float): 83 | 84 | 控制车辆转向角的标量值。取值范围[-1.0,1.0],默认值为0.0。 85 | 86 | - **brake** (float): 87 | 88 | 控制车辆制动的标量值。取值范围[0.0,1.0],默认值为0.0。 89 | 90 | - **hand_brake** (bool): 91 | 92 | 确定是否使用手刹。默认值为False。 93 | 94 | - **reverse** (bool): 95 | 96 | 确定车辆是否向后移动。默认值为False。 97 | 98 | - **manual_gear_shift** (bool): 99 | 100 | 确定是否通过手动换档来控制车辆。默认值为False。 101 | 102 | - **gear** (int): 103 | 104 | 车辆运行的档位。 105 | 106 | 107 | ## 参考代码 108 | 109 | ``` 110 | 111 | import glob 112 | import os 113 | import sys 114 | 115 | try: 116 | #添加CARLA的python egg包路径 117 | sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % ( 118 | sys.version_info.major, 119 | sys.version_info.minor, 120 | 'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0]) 121 | except IndexError: 122 | pass 123 | 124 | import carla 125 | 126 | import random 127 | import time 128 | 129 | 130 | def main(): 131 | 132 | 133 | try: 134 | 135 | #初始化CARLA 136 | client = carla.Client('localhost', 2000) 137 | client.set_timeout(2.0) 138 | world = client.get_world() 139 | 140 | #------------------------------设置车型------------------------------- 141 | #获取CARLA蓝图库 142 | blueprint_library = world.get_blueprint_library() 143 | 144 | #随机选择一种车型 145 | vehicle_blueprint = random.choice(blueprint_library.filter ('vehicle')) 146 | 147 | #随机选择一种颜色 148 | if vehicle_blueprint.has_attribute('color'): 149 | color = random.choice(bp.get_attribute('color').recommended_values) 150 | vehicle_blueprint.set_attribute('color', color) 151 | 152 | #------------------------------添加车辆------------------------------- 153 | #在地图上随机选一个点当作车辆位姿 154 | transform = random.choice(world.get_map().get_spawn_points()) 155 | 156 | #添加车辆 157 | vehicle = world.spawn_actor(vehicle_blueprint, transform) 158 | 159 | #------------------------------控制车辆------------------------------- 160 | 161 | #轮胎左转一半,油门最大,倒车 162 | vc = carla.VehicleControl(throttle=1.0, steer=0.5, brake=0.0, hand_brake=False, reverse=True, manual_gear_shift=False, gear=0) 163 | 164 | #应用车辆控制 165 | vehicle.apply_control(vc) 166 | 167 | 168 | ``` 169 | -------------------------------------------------------------------------------- /docs/reference/sensor_reference.md: -------------------------------------------------------------------------------- 1 | # 传感器参数参考文档 2 | 3 | --- 4 | * 传感器参数说明 5 | * [__RGB camera(RGB相机)__](#rgb-camera) 6 | * [__Depth camera(深度相机)__](#深度相机) 7 | * [__Semantic segmentation camera(语义相机)__](#语义分割相机) 8 | * [__GNSS sensor(GNSS传感器)__](#gnss传感器) 9 | * [__IMU sensor(惯性传感器)__](#imu传感器) 10 | * [__LIDAR sensor(激光雷达)__](#lidar-激光雷达-传感器) 11 | * [__Semantic LIDAR sensor(语义激光雷达)__](#语义lidar传感器)) 12 | * [__Radar sensor(毫米波雷达)__](#---radar-sensor毫米波雷达) 13 | * [__配置文件示例__](#配置文件示例) 14 | 15 | --- 16 | ## RGB camera 17 | 18 | > type: `sensor.camera.rgb` 19 | 20 | | 输出Topic |输出消息类型| 21 | |---|---| 22 | |/carla/{role_name}/{sensor_id}/image | sensor_msgs/Image | 23 | |/carla/{role_name}/{sensor_id}/camera_info | sensor_msgs/CameraInfo | 24 | 25 | RGB相机的作用是作为普通摄像机捕捉场景中的RGB图像。 26 | 27 | `sensor_tick` 定义传感器采集数据的快慢。 28 | 例如: `sensor_tick = 1.5`, 意味着传感器每1.5s采集一次。默认为0,即尽可能快的采集。 29 | 30 | #### RGB相机参数 31 | 32 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 33 | | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | 34 | |`id`|string|rgb_camera|传感器ID, 用于区分多路传感器 | 35 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 36 | | `fov` | float | 90\.0 | 水平视场角 (单位: 度) | 37 | | `image_size_x` | int | 800 | 图像宽度 (像素) | 38 | | `image_size_y` | int | 600 | 图像高度 (像素) | 39 | | `sensor_tick` | float | 0\.0 | 传感器数据间的仿真时间 (ticks). | 40 | | `shutter_speed` | float | 200\.0 | 相机快门速度 (1.0/s). | 41 | 42 | 43 | ## 深度相机 44 | 45 | > type: `sensor.camera.depth` 46 | 47 | | 输出Topic |输出消息类型| 48 | |---|---| 49 | |/carla/{role_name}/{sensor_id}/image | sensor_msgs/Image | 50 | |/carla/{role_name}/{sensor_id}/camera_info | sensor_msgs/CameraInfo | 51 | 52 | 深度相机可以将场景中的距离信息编码为像素生成深度图像。 53 | 54 | 在ROS-Bridge中,深度图已经被转换为单通道float32的图像,每个像素值即为实际距离(米)。 55 | 56 | #### 深度相机参数 57 | 58 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 59 | | ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | 60 | |`id`|string|rgb_camera|传感器ID, 用于区分多路传感器 | 61 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 62 | | `fov` | float | 90\.0 | 水平视场角 (单位: 度) | 63 | | `image_size_x` | int | 800 | 图像宽度 (像素) | 64 | | `image_size_y` | int | 600 | 图像高度 (像素) | 65 | | `sensor_tick` | float | 0\.0 | 传感器数据间的仿真时间 (ticks). | 66 | 67 | ## 语义分割相机 68 | 69 | > type: `sensor.camera.semantic_segmentation` 70 | 71 | | 输出Topic |输出消息类型| 72 | |---|---| 73 | |/carla/{role_name}/{sensor_id}/image | sensor_msgs/Image | 74 | |/carla/{role_name}/{sensor_id}/camera_info | sensor_msgs/CameraInfo | 75 | 76 | 语义相机对所看到的每一个物体进行分类,根据其标签以不同的颜色显示出来。 77 | 78 | #### 语义相机参数 79 | 80 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 81 | | ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | 82 | |`id`|string|rgb_camera|传感器ID, 用于区分多路传感器 | 83 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 84 | | `fov` | float | 90\.0 | 水平视场角 (单位: 度) | 85 | | `image_size_x` | int | 800 | 图像宽度 (像素) | 86 | | `image_size_y` | int | 600 | 图像高度 (像素) | 87 | | `sensor_tick` | float | 0\.0 | 传感器数据间的仿真时间 (ticks). | 88 | 89 | --- 90 | ## GNSS传感器 91 | 92 | > type: `sensor.other.gnss` 93 | 94 | | 输出Topic |输出消息类型| 95 | |---|---| 96 | |/carla/{role_name}/gnss | sensor_msgs/NavSatFix | 97 | 98 | 反馈父对象当前的 gnss 位置。这是通过在OpenDRIVE地图的定义,结合仿真器参考位置来计算的。 99 | 100 | #### GNSS参数 101 | 102 | 103 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 104 | | ------------------- | ------------------- | ------------------- | ------------------- | 105 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 106 | | `noise_alt_bias` | float | 0\.0 | 海拔高度的噪声模型中的均值 | 107 | | `noise_alt_stddev` | float | 0\.0 | 海拔高度的噪声模型中的标准差 | 108 | | `noise_lat_bias` | float | 0\.0 | 纬度噪声模型的均值 | 109 | | `noise_lat_stddev` | float | 0\.0 | 纬度噪声模型的标准差 | 110 | | `noise_lon_bias` | float | 0\.0 | 经度噪声模型的均值 | 111 | | `noise_lon_stddev` | float | 0\.0 | 经度噪声模型的标准差 | 112 | | `sensor_tick` | float | 0\.0 | 传感器数据间的仿真时间 (ticks). | 113 | 114 | --- 115 | ## IMU传感器 116 | 117 | > type: `sensor.other.imu` 118 | 119 | | 输出Topic |输出消息类型| 120 | |---|---| 121 | |/carla/{role_name}/imu| sensor_msgs/Imu | 122 | 123 | 提供父对象的加速度计、陀螺仪、磁力计的传感器测量值。 数据由对象当前状态采集获得。 124 | 125 | #### IMU参数 126 | 127 | 128 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 129 | | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | 130 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 131 | | `noise_accel_stddev_x` | float | 0\.0 | 加速度计噪声模型标准差 (X轴) | 132 | | `noise_accel_stddev_y` | float | 0\.0 | 加速度计噪声模型标准差 (Y轴) | 133 | | `noise_accel_stddev_z` | float | 0\.0 | 加速度计噪声模型标准差 (Z轴) | 134 | | `noise_gyro_bias_x` | float | 0\.0 | 陀螺仪噪声模型均值 (X 轴). | 135 | | `noise_gyro_bias_y` | float | 0\.0 | 陀螺仪噪声模型均值 (Y 轴). | 136 | | `noise_gyro_bias_z` | float | 0\.0 | 陀螺仪噪声模型均值 (Z 轴). | 137 | | `noise_gyro_stddev_x` | float | 0\.0 | 陀螺仪噪声模型标准差 (X 轴). | 138 | | `noise_gyro_stddev_y` | float | 0\.0 | 陀螺仪噪声模型标准差 (Y 轴). | 139 | | `noise_gyro_stddev_z` | float | 0\.0 | 陀螺仪噪声模型标准差 (Z 轴). | 140 | | `sensor_tick` | float | 0\.0 | 传感器数据间的仿真时间 (ticks). | 141 | 142 | --- 143 | ## LIDAR (激光雷达) 传感器 144 | 145 | > type: `sensor.lidar.ray_cast` 146 | 147 | | 输出Topic |输出消息类型| 148 | |---|---| 149 | |/carla/{role_name}/{sensor_id} | sensor_msgs/PointCloud2 | 150 | 151 | #### Lidar参数 152 | 153 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 154 | | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | 155 | |`id`|string|lidar|传感器ID, 用于区分多路传感器 | 156 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 157 | | `channels`           | int    | 32         | 激光雷达线数  | 158 | | `range`              | float  | 10\.0      | 最大探测距离 (单位: 米) | 159 | | `points_per_second`  | int    | 56000      | 每秒扫描的所有点的个数 | 160 | | `rotation_frequency` | float  | 10\.0      | 扫描频率 (单位: 圈/秒) | 161 | | `upper_fov`          | float  | 10\.0      | 扫描俯仰角的最大值 (单位: 度)| 162 | | `lower_fov`          | float  | -30\.0     | 扫描俯仰角的最小值 (单位: 度)| 163 | | `sensor_tick`        | float  | 0\.0       | 传感器数据间的仿真时间 (ticks) | 164 | 165 | ## 语义LIDAR传感器 166 | 167 | > type: `sensor.lidar.ray_cast_semantic` 168 | 169 | | 输出Topic |输出消息类型| 170 | |---|---| 171 | |/carla/{role_name}/{sensor_id} | sensor_msgs/PointCloud2 | 172 | 173 | #### 语义LIDAR参数 174 | 175 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 176 | | --- | ------------------------------------- | ------------------------------------- | --- | 177 | |`id`|string|lidar|传感器ID, 用于区分多路传感器 | 178 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 179 | | `channels`           | int    | 32         | 激光雷达线数  | 180 | | `range`              | float  | 10\.0      | 最大探测距离 (单位: 米) | 181 | | `points_per_second`  | int    | 56000      | 每秒扫描的所有点的个数 | 182 | | `rotation_frequency` | float  | 10\.0      | 扫描频率 (单位: 圈/秒) | 183 | | `upper_fov`          | float  | 10\.0      | 扫描俯仰角的最大值 (单位: 度)| 184 | | `lower_fov`          | float  | -30\.0     | 扫描俯仰角的最小值 (单位: 度)| 185 | | `sensor_tick`        | float  | 0\.0       | 传感器数据间的仿真时间 (ticks) | 186 | 187 | 188 | ## 毫米波雷达 189 | 190 | > type: `sensor.other.radar` 191 | 192 | | 输出Topic |输出消息类型| 193 | |---|---| 194 | |/carla/{role_name}/lidar | sensor_msgs/PointCloud2 | 195 | 196 | | 参数名称 | 参数类型 | 默认值 | 参数描述 | 197 | | ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | 198 | |`id`|string|radar_front|传感器ID, 用于区分多路传感器 | 199 | |`spawn_point`|object|{"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}|传感器安装位置(车身坐标系) 200 | | `horizontal_fov`    | float  | 30\.0 | 水平场视角 (单位: 度)   | 201 | | `points_per_second` | int    | 1500  | 每秒扫描的所有点的个数  | 202 | | `range`             | float  | 100   | 最大探测距离 (单位: 米)      | 203 | | `sensor_tick`       | float  | 0\.0  | 传感器数据间的仿真时间 (ticks) | 204 | | `vertical_fov`      | float  | 30\.0 | 垂直场视角 (单位: 度)      | 205 | 206 | 207 | # 配置文件示例 208 | 209 | ```json 210 | { 211 | "type": "vehicle.lincoln2020.mkz2020", 212 | "id": "ego_vehicle", 213 | "sensors": 214 | [ 215 | { 216 | "type": "sensor.camera.rgb", 217 | "id": "rgb_front", 218 | "spawn_point": {"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 219 | "image_size_x": 800, 220 | "image_size_y": 600, 221 | "fov": 90.0 222 | }, 223 | { 224 | "type": "sensor.lidar.ray_cast", 225 | "id": "lidar", 226 | "spawn_point": {"x": 0.0, "y": 0.0, "z": 2.4, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 227 | "range": 120, 228 | "channels": 32, 229 | "points_per_second": 600000, 230 | "upper_fov": 15.0, 231 | "lower_fov": -15.0, 232 | "rotation_frequency": 20, 233 | "noise_stddev": 0.0 234 | }, 235 | { 236 | "type": "sensor.lidar.ray_cast_semantic", 237 | "id": "semantic_lidar", 238 | "spawn_point": {"x": 0.0, "y": 0.0, "z": 2.4, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 239 | "range": 50, 240 | "channels": 32, 241 | "points_per_second": 320000, 242 | "upper_fov": 2.0, 243 | "lower_fov": -26.8, 244 | "rotation_frequency": 20 245 | }, 246 | { 247 | "type": "sensor.other.radar", 248 | "id": "radar_front", 249 | "spawn_point": {"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 250 | "horizontal_fov": 30.0, 251 | "vertical_fov": 10.0, 252 | "points_per_second": 1500, 253 | "range": 100.0 254 | }, 255 | { 256 | "type": "sensor.camera.semantic_segmentation", 257 | "id": "semantic_segmentation_front", 258 | "spawn_point": {"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 259 | "fov": 90.0, 260 | "image_size_x": 400, 261 | "image_size_y": 70 262 | }, 263 | { 264 | "type": "sensor.camera.depth", 265 | "id": "depth_front", 266 | "spawn_point": {"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 267 | "fov": 90.0, 268 | "image_size_x": 400, 269 | "image_size_y": 70 270 | }, 271 | { 272 | "type": "sensor.other.gnss", 273 | "id": "gnss", 274 | "spawn_point": {"x": 1.0, "y": 0.0, "z": 2.0}, 275 | "noise_alt_stddev": 0.0, "noise_lat_stddev": 0.0, "noise_lon_stddev": 0.0, 276 | "noise_alt_bias": 0.0, "noise_lat_bias": 0.0, "noise_lon_bias": 0.0 277 | }, 278 | { 279 | "type": "sensor.other.imu", 280 | "id": "imu", 281 | "spawn_point": {"x": 2.0, "y": 0.0, "z": 2.0, "roll": 0.0, "pitch": 0.0, "yaw": 0.0}, 282 | "noise_accel_stddev_x": 0.0, "noise_accel_stddev_y": 0.0, "noise_accel_stddev_z": 0.0, 283 | "noise_gyro_stddev_x": 0.0, "noise_gyro_stddev_y": 0.0, "noise_gyro_stddev_z": 0.0, 284 | "noise_gyro_bias_x": 0.0, "noise_gyro_bias_y": 0.0, "noise_gyro_bias_z": 0.0 285 | } 286 | ] 287 | } 288 | ``` --------------------------------------------------------------------------------