仿真实战!Autoware&Carla联合仿真实现

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

>>点击进入→自动驾驶之心【仿真测试】技术交流群

论文作者 | Dr. 夏

编辑 | 自动驾驶之心

写在前面

自动驾驶仿真这两年的需求越来越大,各家自动驾驶公司忙着量产落地,如何尽可能多的测试算法系统的稳定性?如何用最小的成本完成?这就涉及到仿真的内容,而目前领域使用最多的是Carla,今天就为大家分享下Autoware&Carla的联合仿真实现;

版本说明

该教程所使用的版本如下:

48deaf692816587f186888181db8a8d7.png

之所以使用docker版本进行学习,是因为安装很方便,具体可以参考上一篇的安装方法。

前期工作

首先进入docker环境,在/home/autoware文件夹下,补充ros-bridge的功能包,内容为:

ef98f0a96dce640eab68ff725aceeb95.png

编译:

catkin_make

效果如下:

50633f43c07503ac906ab9e98af20bab.png

然后我们在carla_ws/src/ros-bridge/carla_ego_vehicle/launch文件夹里面创建如下launch文件:

ccdc0efaa16abc09d341aba980924e32.png

如红框所示。

在.bashrc文件添加以下信息:

596ad1e7e67117f3d300e71bf9cf16d7.png

其中,autoware-contents的信息可以通过以下网站进行下载:

https://bitbucket.org/carla-simulator/autoware-contents/src/master/

要开vpn梯子才能打开。

联合仿真实现

1.carla_autoware_launch.launch

我们最外层要运行的文件为carla_autoware_launch.launch,其内容如下:

6588dd55f8a7d799a8a5f3479ad1abb9.png d545ef5a28fb7abd8bb5a875fbe8dcfb.png 8fe59a4f0b96a34139b0b8928a58a743.png

每一层的内容都带有注释,唯一要注意的是车辆初始化的问题,在中依次填入x,y,z,roll,pìtch,yaw的数值,这个可以通过carla自带的python例子里面的手动控制脚本manual_control.py去打印车辆的坐标和朝向值,注意这里其实只有xyz三个位置的值有用,roll,pìtch一般可以都为0,yaw要根据实际情况去调,可能rviz的地图有旋转?原因未知。

carla_autoware_bridge.launch是ros_brigde的内容,接下来主要介绍bridge.launch和my_agent.launch。

2.bridge.launch

bridge.launch的内容如下:

231d94d8191092ca33ab25ddd91d9c48.png 736942ec19da58af2824dd24f67ed517.png 4537a07a628b61663fc16ff8c919c29b.png

bridge.launch的内容主要是作一些坐标系的转换和数据转换,注释都很详细。

3.my_agent.launch

d1fb096681cfd6f141f29d4b977add8d.png 8291ba5710297b854a217d1911343acd.png 6f3c8016d37fe5e83edd67d607c75294.png

这部分主要是加载传感器,定位,感知,规划模块,要注意的是这三个参数:

da92a3b51ac9325f71679de9c1abadfd.png

use_ground_truth_localization是使用真实环境的定位,也就是不需要定位算法即可获取到环境的定位信息,一般与carla联合仿真的时候可以打开。同样,use_ground_truth_detections是使用真实环境的感知,也就是可以不需要感知算法即可获取到环境的障碍物信息,一般与carla联合仿真的时候可以打开。

我们这里先设置为false,以打开定位和感知算法为例去实现停障功能,而open planner的障碍物避障可以设置为true。

4.my_map.launch

f575af2a804e3007f52bf48c0605f468.png 66b9b7e8a9b2166be6a691fabecad1ac.png

就是取系统变量CARLA_AUTOWARE_CONTENTS,我们已经在.bashrc里面定义,该文件加载了point cloud map和vector map。

5.my_sensing.launch

54cfa9c04dc9105eab5ca36d7df7290d.png

该文件主要是加载了ray_ground_filter节点,其作用是过滤地面。过滤地面是激光雷达感知中一步基础的预处理操作,因为我们环境感知通常只对路面上的障碍物感兴趣,且地面的点对于障碍物聚类容易产生影响,所以在做Lidar Obstacle Detection(障碍物探测)之前通常将地面点和非地面点进行分离。

6.my_localization.launch

fa3b398a502ca730cb52c9f9cfec6664.png 78f2f734223ce091c666ddbf0759b7b8.png eab069fd9863471d50823476b2e851f2.png

points_downsample节点用于点云过滤。

ndt_matching节点的作用是开启ndt激光雷达定位算法。

ndt算法具体可参考:https://blog.youkuaiyun.com/qq_39537898/article/details/115439552

7.my_detection.launch

b6c0fe092861a4a1fc702edb1d856b57.png 76fbac9653ada749f805018fd5508a7f.png 92ef5eb077355414b2515156bf057e3a.png 634c9a6328df0f1214987f3181f0c0dc.png

停障主要是运用lidar进行障碍物的地图检测追踪。这里也开启了vision部分的检测,属于图像目标检测。

8.my_mission_planning.launch

9f590d46f1d1c98c794cfac0db331894.png 359c3161b685cae0a49f63cc195b76d0.png d7d56e88790a524c57cf4dcc64c92217.png bb316b0fbfee7f51bb91219c9b72a5f6.png

来到了关键的规划部分,该launch文件主要是打开了vel_pose_connect,vel_pose_connect节点用作输出车辆的位姿和速度信息。

也开启了lane的相关规划算法。最重要的是,开启了op_global_planner的节点,全局规划算法,里面涉及了一些参数,可以调整,比如enableReplan,代表到达终点后是否自动再次规划,一般如果到达终点想停了,就设置为false。

9.my_motion_planning.launch

957cb0a1b4bfb2ea7af21563257eccd2.png 2506739036455f110e69e0351b94cbc1.png f96dd3e82fa6b24abf99fe56370d3107.png b306530c0c2b307ae46748a1145f23ed.png 7d60e6952f28f3b833f00b99fc066032.png 072a47db49c28313b5ca1e90ade4da89.png

该launch文件的关键是打开astar_avoid和pure_pursuit,一个停障的节点,一个是控制车运动的节点,twist_filter也是必须要开启的,作用是用于限定x轴线速度和z轴角速度这两个参数的值。

停障演示

写好了以上脚本之后,并且编译完,就可以开始运行啦。

1.打开carla-0.9.10.1:

./CarlaUE4.sh

这里以Town03为例。

2.放个测试的障碍物:

测试脚本如下:

bc140255e08670191a94c6d6030c9482.png 0302f4c2cde5fd7433bf97df9a7f4a09.png 8c1ef683e4eb7787c13b177a3cf58fbc.png

parked_locations为要放置障碍物的位置,自己设定。

运行:

python spawn_car.py

3.运行autoware-carla:

roslaunch carla_ego_vehicle carla_autoware_launch.launch
419a8df95e05133ab844cc4691eb73f8.jpeg

看到前面有车。

4.定义终点,开始规划

ee09abd37fb85d4cfb51ff117c14237b.png

接近障碍物的时候,检测出障碍物,并停车:

77883a408b10ab08781caa4aed2ab7f3.png

当障碍物消失的时候,或者远离的时候,开始加速运动:

5c1058d57d0f10e1bb23990e062135ff.png

ok,讲解到此为止,希望可以帮助大家完成入门的操作!

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署协同感知语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

747532cdfed43fd31d96b05eddfb046f.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

28e6320cf4c18e83d5c441066451fe3a.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

d6df06e036477fce4073e30048b7d07d.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

dbef417caab0837808f1f04587626078.jpeg

<think>嗯,用户的问题是询问carla 0.9.13、ros2 foxy和autoware进行联合仿真的实现方法。首先需要确认这三个组件的兼容性。根据autoware的官方文档,它主要适配carla 0.9.12,而用户使用的是0.9.13,可能存在差异。这时候需要考虑版本适配的问题,可能需要用户降级carla或者寻找社区提供的补丁。 接下来是ros2 foxy的版本。autoware.universe支持foxy,但用户需要检查autoware的具体分支。autoware.auto可能更适合,因为它更稳定,但开源版本可能有限制。用户需要从autoware.ai或autowarefoundation的GitHub仓库获取资源。 然后是环境搭建部分。用户需要安装ros2 foxy基础环境,配置工作空间,安装carla-ros-bridge。这里要特别注意carla_ros_bridge的版本,必须与carla 0.9.13匹配。可能需要从源码编译,修改package.xml中的版本依赖。此外,还需要设置环境变量,比如CARLA_ROOT和PYTHONPATH,指向carla的Python API路径。 autoware的安装相对复杂,可能需要使用Docker或源码编译。用户需要根据文档安装依赖,构建必要的包,尤其是carla相关的接口。autoware的规划控制模块需要适配carla的传感器数据,可能需要修改相关launch文件来连接carla的话题。 联合仿真启动步骤是关键。正确启动carla服务器,加载地图和车辆。然后启动ros bridge,确保vehicle_status和传感器数据正常传输。接着启动autoware,这里可能需要配置定位模块,因为carla提供的是仿真定位,autoware需要处理这些数据生成控制指令。 调试中的常见问题包括:传感器数据未正确接收、坐标系不匹配、控制指令延迟。可以通过rviz查看传感器数据是否到位,检查TF树是否完整。控制指令的延迟可能需要调整autoware的参数或优化系统性能。 最后需要验证仿真是否成功。例如,车辆能否按全局规划路径行驶,遇到障碍物是否避让。如果出现问题,查看各节点的日志,尤其是carla_adapter和autoware的规划控制模块的输出。 用户可能遇到的挑战主要是版本冲突和配置错误。建议用户逐步测试每个组件,确保单独运行正常后再尝试集成。同时,参考autowarecarla社区的讨论,寻找类似问题的解决方案。 </think>实现Carla 0.9.13、ROS 2 Foxy和Autoware联合仿真需解决版本兼容性和系统集成问题,以下是关键步骤和注意事项: --- ### **一、环境兼容性验证** 1. **Carla 0.9.13适配性** - Autoware官方主要支持Carla 0.9.12,需手动适配0.9.13: ```bash # 从Autoware分支克隆适配代码 git clone -b carla-0.9.13 https://github.com/autowarefoundation/autoware.git ``` - 修改Carla PythonAPI路径:在`~/.bashrc`添加 ```bash export CARLA_ROOT=/path/to/carla-0.9.13 export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI ``` 2. **ROS 2 Foxy支持** - Autoware.universe支持Foxy,需确认分支: ```bash git checkout foxy ``` --- ### **二、核心组件安装** 1. **Carla-ROS-Bridge编译** - 使用适配0.9.13的分支: ```bash git clone -b foxy-carla-0.9.13 https://github.com/carla-simulator/ros-bridge.git colcon build --packages-select carla_ros_bridge ``` 2. **Autoware安装** - 依赖安装: ```bash sudo apt install ros-foxy-ros-base python3-colcon-common-extensions ``` - 源码编译: ```bash git clone https://github.com/autowarefoundation/autoware.git cd autoware && git checkout foxy rosdep install -y --from-paths src --ignore-src colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release ``` --- ### **三、联合仿真启动流程** 1. **启动Carla服务端** ```bash ./CarlaUE4.sh -opengl -world-port=2000 ``` 2. **启动ROS Bridge** ```bash source install/setup.bash ros2 launch carla_ros_bridge carla_ros_bridge.launch.py host:=localhost port:=2000 ``` 3. **启动Autoware** 修改`carla_adapter.launch.xml`: ```xml <arg name="carla_host" default="localhost"/> <arg name="carla_port" default="2000"/> ``` 启动Autoware: ```bash ros2 launch autoware_launch autoware.launch.xml ``` --- ### **四、关键配置项** 1. **传感器数据映射** - 在`carla_ros_bridge`中配置传感器话题名匹配Autoware输入: ```yaml sensors: lidar: topic: /sensing/lidar/points camera: topic: /sensing/camera/image_raw ``` 2. **坐标系统一** - 在`carla_adapter`中设置TF树: ```python static_transform_broadcaster.sendTransform( (0,0,0), carla_rotation, "map", "carla_map" ) ``` --- ### **五、调试常见问题** 1. **版本冲突** 若出现`carla_msgs`报错(如`PATH`混乱)[^1]: ```bash unset PYTHONPATH # 清理冲突路径 source /opt/ros/foxy/setup.bash ``` 2. **控制指令延迟** 优化Autoware的规划器参数: ```yaml # autoware_planning.yaml control_frequency: 50 # 提高控制频率 ``` 3. **传感器数据缺失** 检查Carla Actor配置: ```python # 添加LiDAR传感器 lidar_bp = world.get_blueprint_library().find('sensor.lidar.ray_cast') lidar_bp.set_attribute('range', '100.0') ``` --- ### **六、验证流程** 1. 在RViz中检查`/sensing/lidar/points`点云 2. 发送测试路径点,观察车辆轨迹: ```bash ros2 topic pub /planning/mission_planning/goal autoware_planning_msgs/msg/PoseStamped ... ``` 3. 监控控制指令: ```bash ros2 topic echo /control/vehicle_cmd ``` --- **相关问题** 1. 如何解决CarlaAutoware的坐标系偏移问题? 2. 联合仿真中如何添加自定义传感器? 3. Autoware的PID控制在Carla中响应延迟如何优化? 4. 如何录制和回放联合仿真的ROS 2数据包? [^1]: Carla ROS Bridge环境变量冲突解决方案 [^2]: Apollo规划器在ROS 2的迁移思路参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值