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

版本说明

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

Autoware&Carla联合仿真_加载

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

前期工作

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

 

Autoware&Carla联合仿真_docker_02

编译:

catkin_make
  • 1.

效果如下:

Autoware&Carla联合仿真_加载_03

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

Autoware&Carla联合仿真_docker_04

如红框所示。

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

Autoware&Carla联合仿真_docker_05

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

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


联合仿真实现

1.carla_autoware_launch.launch

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

Autoware&Carla联合仿真_自动驾驶_06

Autoware&Carla联合仿真_docker_07

Autoware&Carla联合仿真_自动驾驶_08

每一层的内容都带有注释,唯一要注意的是车辆初始化的问题,在中依次填入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的内容如下:

Autoware&Carla联合仿真_自动驾驶_09

Autoware&Carla联合仿真_人工智能_10

Autoware&Carla联合仿真_加载_11

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

3.my_agent.launch

Autoware&Carla联合仿真_docker_12

Autoware&Carla联合仿真_docker_13

Autoware&Carla联合仿真_自动驾驶_14

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

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

4.my_map.launch

Autoware&Carla联合仿真_自动驾驶_15

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

5.my_sensing.launch

Autoware&Carla联合仿真_人工智能_16

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

6.my_localization.launch

Autoware&Carla联合仿真_docker_17

Autoware&Carla联合仿真_人工智能_18

points_downsample节点用于点云过滤。

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

ndt算法具体可参考:

7.my_detection.launch

Autoware&Carla联合仿真_加载_19

Autoware&Carla联合仿真_加载_20

Autoware&Carla联合仿真_docker_21

Autoware&Carla联合仿真_docker_22

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

8.my_mission_planning.launch

Autoware&Carla联合仿真_加载_23

Autoware&Carla联合仿真_加载_24

Autoware&Carla联合仿真_自动驾驶_25

Autoware&Carla联合仿真_加载_26

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

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

9.my_motion_planning.launch

Autoware&Carla联合仿真_docker_27

Autoware&Carla联合仿真_人工智能_28

Autoware&Carla联合仿真_加载_29

Autoware&Carla联合仿真_docker_30

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

停障演示

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

1.打开carla-0.9.10.1:

./CarlaUE4.sh
  • 1.

这里以Town03为例。

2.放个测试的障碍物:

测试脚本如下:

Autoware&Carla联合仿真_自动驾驶_31

Autoware&Carla联合仿真_docker_32

Autoware&Carla联合仿真_自动驾驶_33

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

运行:

python spawn_car.py
  • 1.

3.运行autoware-carla:

roslaunch carla_ego_vehicle carla_autoware_launch.launch
  • 1.

Autoware&Carla联合仿真_加载_34

看到前面有车。

4.定义终点,开始规划

Autoware&Carla联合仿真_人工智能_35

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

Autoware&Carla联合仿真_docker_36

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

Autoware&Carla联合仿真_人工智能_37

ok,讲解到此为止