• [carla入门教程]-6 小项目:基于carla-ros-bridge构建一个小型比赛赛道


    本专栏教程将记录从安装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

    然后保存即可.

    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"
    
    • 1

    当然,我们也可以一步到位,直接在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"
    
    • 1

    为了方便展示,用文字描述一下上述代码:
    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 
    
    • 1

    在这里插入图片描述
    这里有一个小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
    
    • 1

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

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

    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
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1.2.3 定制化修改- 通过配置文件
    • 车的类型

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

    • 出生点

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

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

    roslaunch carla_manual_control carla_manual_control.launch 
    
    • 1

    在这里插入图片描述
    位于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'/>
    
    • 1

    特别需要注意的是:
    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
    
    • 1

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

    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
    
    • 1

    在这里插入图片描述

    (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"
    
    • 1

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

    cd carla_tutorial
    rosrun rviz rviz -d rviz_carla_sensor.rviz 
    
    • 1
    • 2

    在这里插入图片描述

    (4)加载汽车障碍物

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

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

  • 相关阅读:
    k8s中calico网络组件部署时一个节点一直处于Pending状态
    Android笔记(二十八):在雷电模拟器安卓7.0+上使用Charles抓包详细教程
    程序员崩溃瞬间
    InstDisc 代码解读
    Java类配置Spring
    上周热点回顾(9.19-9.25)
    day007--MySQL中的数值函数
    系列二、什么是OOM?什么是StackOverflowError?有哪些方法分析?
    Python中`*args`和`**kwargs`的用法
    【iOS】——知乎日报第一周总结
  • 原文地址:https://blog.csdn.net/condom10010/article/details/127679443