本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制.
本节的主要内容是介绍一个小项目,项目内容为使用carla构建一个赛道以供参赛者使用.要求使用一个脚本就可以很方便的构建出这个赛道,赛道包括一个固定的起点和终点,中间具有几个固定的障碍物,参赛的车辆都是同一款车型,仿真环境中的天气光照等都保持一致.
章节内容介绍:
本节共分为5个小节.
第1小节介绍了仿真环境中包含的要素:地图,车辆,障碍物,起点和终点.
第2小节介绍了小车的传感器接口,包括相机,激光雷达,GNSS,IMU等.
第3小节介绍了小车的控制接口.
第4小节介绍了比赛成绩评判.
第5小节对整个比赛需要参赛队员执行的代码进行了汇总.
接口查阅链接:
CARLA Python API在线网站
配套代码:
gitte代码库
适配版本
本教程主要适用于采用apt方式安装的 carla
地图的修改只需要在运行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
然后保存即可.
我们在官方的 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.
自带的车辆生成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" />
通过修改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)
在路线上添加多个不会移动的车辆作为静态障碍物.这里为了便于快速创建车辆,写了一个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
.
创建的障碍物一共有5处,其中有2处放置在路口处,是为了隔断道路.另外3处放置在道路上,是为了考验避障能力.
第一处:隔断路口
第二处:隔断路口
第三处:考验避障
第四处:考验避障
第五处:考验避障
起点都用Town07地图的全局坐标表示.
起点坐标:(68.810539, -34.828873, 1.834847)
终点坐标:(-197.405151, y=-169.926147, z=-0.007765)
本小节主要介绍汽车上传感器的参数,对应的 ros消息名称.
所有传感器的参数,例如相机内参,雷达内参都位于以下文件中:
/opt/carla-ros-bridge/melodic/share/carla_ego_vehicle/config/sensors.json
如果觉得某个参数不合适,可以自行调整.
一共有两个,一个是前视相机,一个是第三人称相机.
第三人称相机
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
激光雷达可以改成多线的,如果需要请自行修改雷达配置文件中的channels
.
(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消息,控制车运动,让车能够到达终点.