本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制.

第六节 基于carla-ros-bridge构建一个小型比赛赛道

本节的主要内容是介绍一个小项目,项目内容为使用carla构建一个赛道以供参赛者使用.要求使用一个脚本就可以很方便的构建出这个赛道,赛道包括一个固定的起点和终点,中间具有几个固定的障碍物,参赛的车辆都是同一款车型,仿真环境中的天气光照等都保持一致.

1.比赛仿真环境要素

1.1 地图

地图的修改只需要在运行launch文件时增加 town:="town07"的参数即可.

  • 如果想要永久修改默认参数,参考以下方法:
    在下面的carla_ros_bridge.launch文件中找到10行, 把’town’的default值改为Town07.
sudo gedit /opt/carla-ros-bridge/melodic/share/carla_ros_bridge/launch/carla_ros_bridge.launch

然后保存即可.

1.2 车辆

1.2.1 定制化修改- 通过在启动命令时引入参数:

我们在官方的 carla_example_ego_vehicle.launch 后面附上生成点spawn_point,车辆滤波器vehicle_filter,就可以轻松实现定制车辆的功能了.

roslaunch carla_ego_vehicle carla_example_ego_vehicle.launch spawn_point:="68.219688,-37.028912,0.5,2.649131,4.661454,104.526855" role_name:="ego_vehicle" vehicle_filter:="vehicle.audi.a2"

当然,我们也可以一步到位,直接在carla_ros_bridge_with_example_ego_vehicle.launch中附带参数:

roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch spawn_point:="68.219688,-37.028912,0.5,2.649131,4.661454,104.526855" role_name:="ego_vehicle" vehicle_filter:="vehicle.audi.a2" town:="town07"

为了方便展示,用文字描述一下上述代码:
roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch spawn_point:=“68.219688,-37.028912,0.5,2.649131,4.661454,104.526855”
town:=“town07”
ego_vehicle_role_name:=“ego_vehicle”
vehicle_filter:=“vehicle.audi.a2”

运行上述脚本进行车辆遥控的内容可以参考[carla入门教程]-5 使用ROS与carla通信的3.2节.

在这里插入图片描述

然后我们再配合使用rviz就可以查看传感器数据:

rosrun rviz rviz -d carla_tutorial/rviz_carla_sensor.rviz 

在这里插入图片描述
这里有一个小bug,车辆出生后没有拉手刹,然后会溜车.需要手动按B然后按空格拉手刹.

如果想要修改默认参数,参考1.2.2和1.2.3.

1.2.2 官方生成脚本分析

自带的车辆生成demo的launch文件如下

sudo gedit  /opt/carla-ros-bridge/melodic/share/carla_ego_vehicle/launch/carla_example_ego_vehicle.launch

这个文件实际上是调用另一个launch文件:

/opt/carla-ros-bridge/melodic/share/carla_ego_vehicle/launch/carla_ego_vehicle.launch

carla_ego_vehicle.launch实现对车辆的生成,传递的参数包括:

  <arg name='host' default='localhost'/>
  <arg name='port' default='2000'/>
  <arg name='timeout' default='10'/>
  <arg name="vehicle_filter" default="vehicle.*" />
  <arg name="sensor_definition_file" default="$(find carla_ego_vehicle)/config/sensors.json"/>
  <arg name="role_name" default="ego_vehicle"/>
  <!-- use comma separated format "x,y,z,roll,pitch,yaw" -->
  <arg name="spawn_point" default=""/>
  <arg name="spawn_ego_vehicle" default="True" />
1.2.3 定制化修改- 通过配置文件
  • 车的类型

通过修改carla_ego_vehicle.launch中的vehicle_filter,我们将车辆类型改为vehicle.audi.a2,也就是奥迪A2.

  • 出生点

我们首先利用修改后的脚本生成一台车,此时由于默认是不指定出生点的,所以程序会从地图里面随机选取一个出生点,这个出生点不是我们想要的,但是没关系,我们可以手动把车辆遥控到指定的出生点.

调用官方提供的脚本呼出车辆控制界面,然后遥控到出生点:

roslaunch carla_manual_control carla_manual_control.launch 

在这里插入图片描述
位于Town07的这个位置:
在这里插入图片描述
从控制界面中读取位置信息:
在这里插入图片描述
转换成(x,y,z,pitch,roll,yaw)的格式填入spawn_point参数即可,如下:

<arg name="spawn_point" default='70.3,4.8,2.0,0.0,0.0,69.0'/>

特别需要注意的是:
spawn_point中的参数分别是(x,y,z,roll,pich,-raw).请注意这里的偏航角度raw前面有一个负号.

spawn_point中三个旋转角与carla.Rotation 的顺序并不相同,carla.Rotation的顺序为:(pitch,yaw,roll)

1.3 障碍物

1.3.1 障碍物的创建方法

在路线上添加多个不会移动的车辆作为静态障碍物.这里为了便于快速创建车辆,写了一个python脚本.carla_tutorial/generate_car.py.

[carla入门教程]-3 在carla中遥控汽车并采集传感器数据中介绍了如何使用pythonAPI生成车辆,这里主要需要解决的是如何确定障碍物的生成位姿.

这里我们也是采取手动标记的方法,通过carla_manual_control.launch 控制小车到我们需要的点,采集小车的位置.为了准确获得小车位置,我们写了一个小脚本carla_tutorial/get_location.py打印输出小车当前的位姿.然后把障碍物的位姿统计到carla_tutorial/障碍物坐标.txt文档中.

注意!!
在设置spawn_point时,一定要设置好z坐标,因为carla中的地图贴图存在地下结构,所以如果z设置的比我们预期的值小,会出现车生成在地底下的情况.为了避免这种情况,我们设置z坐标时可以比原定数值大0.5m.

在这里插入图片描述

1.3.2 障碍物的分布介绍

创建的障碍物一共有5处,其中有2处放置在路口处,是为了隔断道路.另外3处放置在道路上,是为了考验避障能力.

第一处:隔断路口
在这里插入图片描述

第二处:隔断路口
在这里插入图片描述
第三处:考验避障
在这里插入图片描述

第四处:考验避障
在这里插入图片描述
第五处:考验避障
在这里插入图片描述

1.4 起点和终点

起点都用Town07地图的全局坐标表示.
起点坐标:(68.810539, -34.828873, 1.834847)
终点坐标:(-197.405151, y=-169.926147, z=-0.007765)

2.传感器接口

本小节主要介绍汽车上传感器的参数,对应的 ros消息名称.

所有传感器的参数,例如相机内参,雷达内参都位于以下文件中:

/opt/carla-ros-bridge/melodic/share/carla_ego_vehicle/config/sensors.json

如果觉得某个参数不合适,可以自行调整.

2.1 RGB相机:

一共有两个,一个是前视相机,一个是第三人称相机.

  • 第三人称相机
    Ros_topic:/carla/ego_vehicle/camera/rgb/view/image_color
    Type: sensor_msgs/Image

  • 前视相机,
    Ros_topic:/carla/ego_vehicle/camera/rgb/front/image_color
    Type: sensor_msgs/Image

2.2 激光雷达

  • 单线激光雷达
    Ros_topic:/carla/ego_vehicle/lidar/lidar1/point_cloud
    Type: sensor_msgs/PointCloud2

激光雷达可以改成多线的,如果需要请自行修改雷达配置文件中的channels.

2.3 GNSS

  • 全球定位导航
    Ros_topic:/carla/ego_vehiclgnss/gnss1/fix
    Type: sensor_msgs/NavSatFix

2.4 IMU

  • 加速度计
    Ros_topic:/carla/ego_vehicle/imu/imu1
    Type: sensor_msgs/Imu

2.5 里程计

  • localpose坐标
    Ros_topic:/carla/ego_vehicle/odometry
    Type: nav_msgs/Odometry

2.6 车道线交叉检测器

  • carla中的虚拟传感器,当车辆穿越车道线时,会发出车道线类型的消息.
    Ros_topic:/carla/ego_vehicle/lane_invasion
    Type: carla_msgs/CarlaLaneInvasionEvent

2.7 碰撞检测器

  • carla中的虚拟传感器,碰撞检测器.当发生碰撞时,会发出信号,显示出碰撞的目标.
    Ros_topic:/carla/ego_vehicle/collision
    Type: carla_msgs/CarlaCollisionEvent

3. 控制接口

  • 控制油门,刹车,档位.
    Ros_topic:/carla/ego_vehicle/vehicle_control_cmd
    Type: carla_msgs/CarlaEgoVehicleControl
    在这里插入图片描述

4. 比赛成绩评判

  • 比赛限时
    20min.
  • 打分标准
    是否完赛,通过时间,碰撞次数,车道线跟踪精度等等.

5.比赛执行代码(参赛队员使用)

(1)打开carla服务器

./CarlaUE4.sh

在这里插入图片描述

(2)加载官方demo
按照设定参数加载carla_ros_bridge_with_example_ego_vehicle.launch

roslaunch carla_ros_bridge carla_ros_bridge_with_example_ego_vehicle.launch spawn_point:="68.219688,-37.028912,0.5,2.649131,4.661454,104.526855" role_name:="ego_vehicle" vehicle_filter:="vehicle.audi.a2" town:="town07"

在这里插入图片描述
(3)加载rviz

cd carla_tutorial
rosrun rviz rviz -d rviz_carla_sensor.rviz 

在这里插入图片描述

(4)加载汽车障碍物

conda activate py27 # 切换到python2.7环境
python generate_car.py

在这里插入图片描述
(5)开始比赛
自行编写脚本,订阅传感器的ros消息,控制车运动,让车能够到达终点.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐