首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Autoware.universe部署03:与Carla(二进制版)联调

  • 23-09-26 21:21
  • 2972
  • 12497
blog.csdn.net

文章目录

  • 一、Carla的使用
    • 1.1 二进制Carla的安装
    • 1.2 Carla API的使用
      • 1.2.1 增加行人流和车流
      • 1.2.3 改变服务器的时间,光照,天气
      • 1.2.3 手动控制车辆
      • 1.1.4 车辆的自动驾驶
  • 二、Universe与Carla联调
    • 2.1 设置OpenPlanner
    • 2.2 重新编译并运行
  • 三、更换地图(Town10HD服务器默认地图)调试
  • 四、测试其他功能
    • 4.1 测试倒车入库功能


本文介绍了 Autoware.universe 与 Carla 二进制版的联调过程。Autoware.universe 是一个开源的自动驾驶软件平台,而 Carla 则是一个用于自动驾驶仿真的开源工具。将这两者联调起来可以在仿真环境中测试和验证 Autoware.universe 的功能和性能,为自动驾驶系统的开发和测试提供有力支持。
其中Autoware.universe的安装以及高精地图的绘制参考我的其他文章:
Autoware.universe部署01:Ubuntu20.04安装Autoware.universe并与Awsim联调
Autoware.universe部署02:高精Lanelet2地图的绘制

一、Carla的使用

1.1 二进制Carla的安装

二进制包github地址:http://iyenn.com/index/link?url=https://github.com/carla-simulator/carla/releases,下载第一个.tar.gz压缩包:
在这里插入图片描述
解压后可以直接运行,出现如下的服务器界面:

tar -zxvf CARLA_0.9.13.tar.gz
cd CARLA_0.9.13
./CarlaUE4.sh
  • 1
  • 2
  • 3

在这里插入图片描述
去/home/autoware/CARLA_0.9.13/PythonAPI/examples下运行API:

python manual_control.py
  • 1

即可开启Carla仿真驾驶,界面如下:
在这里插入图片描述
命令行选项:启动Carla时有一些可用的配置选项,它们可以按如下方式使用:

./CarlaUE4.sh -quality-level=Low
  • 1

启动 CARLA 时,有一些配置选项可用:

  • carla-rpc-port=N:侦听端口 N 处的客户端连接。默认情况下,流式端口 Streaming port 设置为 N+1;
  • carla-streaming-port=N:指定用于传感器数据流的端口。 使用 0 获取随机未使用的端口。 第二个端口将自动设置为 N + 1;
  • quality-level={Low,Epic}:更改图形质量级别;
  • -carla-server:让 carla以服务的方式运行;
  • -benchmark -fps=15:引擎以1/15秒的固定时间逐步运行;

1.2 Carla API的使用

这里介绍常用的几个API,首先打开carla:./CarlaUE4.sh

1.2.1 增加行人流和车流

执行CARLA_0.9.13/PythonAPI/examples路径下的generate_traffic.py文件:

python generate_traffic.py -w 10 -n 10
  • 1

在这里插入图片描述
可以看到,carla服务器中的街道上多了很多运动的车辆和行人。后面的参数 -n 10 -w 10分别代表车辆和行人的数量,这个脚本还有很多其他的参数:

  • --host #主机服务器ip
  • -p --port #端口
  • -n --number-of-vehicles #车辆数量
  • -w --number-of-walkers #行人数量
  • --safe #避免碰撞
  • --filterv #车辆滤波器
  • --filterw #行人滤波器
  • --generationv #限制某些车辆生成
  • --generationw #限制某些行人生成

1.2.3 改变服务器的时间,光照,天气

执行CARLA_0.9.13/PythonAPI/examples路径下的dynamic_weather.py文件

python dynamic_weather.py -s 5
  • 1

参数-s 5意思是把天气变化加速了5倍。这个脚本里是按照仿真时间,修改服务器中设置天气的参数carla.WeatherParameters,按照一定的顺序自动的调整系统的光照和天气。光照条件包括:太阳高度和太阳角度;天气条件包括:云,雨,水坑,风,雾,湿度。
在这里插入图片描述
更多天气参数的设置可以查看/pythonAPI/python_api.md中的carla.WeatherParameters.

1.2.3 手动控制车辆

执行CARLA_0.9.13/PythonAPI/examples路径下的manual_control.py文件:

python manual_control.py
  • 1

在这里插入图片描述

键盘B按键可以切换自动控制和人工控制,pygame操作手册如下:

按键功能备注
W前进↑ 键也可以前进
S刹车↓ 键也可以刹车
A/DA左转 D 右转← 也可以左转,→ 也可以右转
Q倒车档Q+W可以倒车
Space手刹-
P开启/关闭自动驾驶模式-
M自动档/手动档-
,和 .加减挡,减档 . 加档
CTRL + W按一下 CTRL + W,匀速前进车会一直以 60 km/h 的速度前进
L控制车灯切换雾灯、近光灯等切换
SHIFT + L切换远光灯-
Z/X转向灯Z 左转向,X 右转向
I车内照明灯-
TAB切换视角-
N切换不同类型的 camera 和 lidar每按下一次,sensor
[1-9]顺序切换切换不同类型的 camera 和 lidar按下数字键,可直接切换到对应sensor
G打开/关闭 毫米波雷达-
C切换天气Shift+C切换顺序和C相反
Backspace换车型-
V选地图图层Shift+V ,切换顺序和V 相反
B加载当前的地图图层Shift+B 卸载当前的地图图层
O打开/关闭所有车门-
T切换到车辆的自动测量记录传导在carla客户端界面显示
R记录车辆走行情况CTRL + R : 切换到 R做的记录
CTRL + P回放R的记录-
F1显示/不显示左侧sensor相关信息例如加速度,陀螺仪,GNSS等-
H可以弹出帮助命令-
ESC退出pygame-

1.1.4 车辆的自动驾驶

执行CARLA_0.9.13/PythonAPI/examples路径下的automatic_control.py文件

python automatic_control.py 
  • 1

会弹出一个pygame窗口,车辆正在进行自动驾驶
在这里插入图片描述
到达终点后,自动关闭

二、Universe与Carla联调

参考文章:http://iyenn.com/rec/375813.html

2.1 设置OpenPlanner

(1)下载拓展代码

cd ~/autoware_universe
mkdir op_carla && cd op_carla/
git clone https://github.com/hatem-darweesh/op_bridge.git -b ros2
git clone https://github.com/hatem-darweesh/op_agent.git -b ros2
git clone https://github.com/hatem-darweesh/scenario_runner.git
  • 1
  • 2
  • 3
  • 4
  • 5

(2)从http://iyenn.com/index/link?url=https://drive.google.com/drive/folders/1Or0CMS08AW8XvJtzzR8TfhqdY9MMUBpS下载Town01.pcd 和 Town01.osm地图。创建 Town01 文件夹,将 Town01.pcd 和 Town01.osm 复制到Town01_map 文件夹中。

  • Town01.pcd重命名为pointcloud_map.pcd
  • Town01.osm重命名为lanelet2_map.osm

其他地图可以在这里下载

git clone  https://bitbucket.org/carla-simulator/autoware-contents/src/master.git
  • 1

(3)修改文件:op_carla/op_bridge/op_scripts/run_exploration_mode_ros2.sh,在第8行,如果不在同一台电脑上运行仿真,需要设置运行仿真的电脑的 IP 地址。如下:

export SIMULATOR_LOCAL_HOST=“192.168.11.5”
  • 1

如果在本机上运行仿真需要修改为:

export SIMULATOR_LOCAL_HOST=“localhost”
  • 1

在这里插入图片描述
(4)修改文件:op_carla/op_agent/start_ros2.sh,在第15行,按照实际的安装路径修改。

source ${YouPath}/autoware_universe/autoware/install/setup.bash
  • 1

在第18行,按照实际的安装路径修改启动Autoware的launch文件路径,按照Town01的路径修改map_path。

ros2 launch 
  ${YouPath}/src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml 
  map_path:=${YouPath}/autoware_universe/autoware/src/${map_name} 
  vehicle_model:=sample_vehicle 
  sensor_model:=sample_sensor_kit
  • 1
  • 2
  • 3
  • 4
  • 5

(5)修改文件: src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml
在第11行添加如下,用于将Carla点云转换为Autoware.universe使用的点云:

<arg name="launch_carla_interface" default="true" description="convert carla sensor data to autoware suitable format"/>
  • 1

在第17行将launch_sensing_driver中的true改成false,关闭自带的传感器驱动,可以直接复制以下替换第17行。

<arg name="launch_sensing_driver" default="false" description="launch sensing driver"/>
  • 1

在第23行将use_sim_time中的false改成true,使用仿真时间,可以直接复制以下替换第23行。

<arg name="use_sim_time" default="true" description="use_sim_time"/>
  • 1

注意:这里改了之后,如果再使用非仿真测试时要改回来,否则将不能定位。另外也可以不改参数文件,在launch时添加参数,例如:

ros2 launch 
  ${YouPath}/src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml 
  map_path:=${YouPath}/${map_name} 
  vehicle_model:=sample_vehicle 
  sensor_model:=sample_sensor_kit 
  use_sim_time:=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在第52行添加如下,将Carla点云转化为Universe可用的点云:

  <!-- CARLA -->
  <group if="$(var launch_carla_interface)">
    <node pkg="carla_pointcloud" exec="carla_pointcloud_node" name="carla_pointcloud_interface" output="screen"/>
  </group>
  • 1
  • 2
  • 3
  • 4

(6)修改文件: src/sensor_kit/sample_sensor_kit_launch/sample_sensor_kit_launch/launch/gnss.launch.xml,在第4行将coordinate_system中的1改成2,坐标系使用MGRS,可以直接复制以下替换第4行。

<arg name="coordinate_system" default="2" description="0:UTM, 1:MGRS, 2:PLANE"/>
  • 1

在第5行添加如下:

<arg name="plane_zone" default="0"/>
  • 1

(7)修改文件:src/sensor_kit/sample_sensor_kit_launch/sample_sensor_kit_description/config/sensor_kit_calibration.yaml,由于修改较多,可以直接全部替换:

sensor_kit_base_link:
  camera0/camera_link:
    x: 0.7
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  camera1/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  camera2/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  camera3/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  camera4/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  camera5/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  traffic_light_right_camera/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  traffic_light_left_camera/camera_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  velodyne_top_base_link:
    x: 0.0
    y: 0.0
    z: 0.8
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  velodyne_left_base_link:
    x: -0.5
    y: 0.0
    z: 0.8
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  velodyne_right_base_link:
    x: 0.5
    y: 0.0
    z: 0.8
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  gnss_link:
    x: 0.0
    y: 0.0
    z: 0.8
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  tamagawa/imu_link:
    x: 0.0
    y: 0.0
    z: 0.8
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

(8)修改文件:src/sensor_kit/sample_sensor_kit_launch/sample_sensor_kit_description/config/sensors_calibration.yaml,由于修改较多,可以直接全部替换:

base_link:
  sensor_kit_base_link:
    x: 0.0
    y: 0.0
    z: 1.6
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  velodyne_rear_base_link:
    x: 0.0
    y: 0.0
    z: 0.0
    roll: 0.0
    pitch: 0.0
    yaw: 0.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

(9)修改环境变量

gedit ~/.bashrc
  • 1

根据安装位置修改路径后,再添加到环境变量中。

export CARLA_ROOT=/yourpath/carla
export SCENARIO_RUNNER_ROOT=/home/username/autoware_universe/op_carla/scenario_runner
export LEADERBOARD_ROOT=/home/username/autoware_universe/op_carla/op_bridge
export TEAM_CODE_ROOT=/home/username/autoware_universe/op_carla/op_agent
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/util
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/agents
# 注意下面的文件名称要对,可以去Carla文件夹看看(我的是,3.7)
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/dist/carla-0.9.13-py3.7-linux-x86_64.egg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述

2.2 重新编译并运行

把上面改动的几个包重新编译(ROS2需要把所有文件复制到install,因此包里任何文件修改均需重新编译)一下:

colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select autoware_launch sample_sensor_kit_description
  • 1

安装依赖:

pip install py-trees networkx tabulate transforms3d
sudo apt-get install ros-galactic-sensor-msgs-py
  • 1
  • 2

运行Carla服务器:

cd $CARLA_ROOT
./CarlaUE4.sh -quality-level=Epic -world-port=2000 -resx=800 -resy=600
  • 1
  • 2

在这里插入图片描述
再打开一个终端运行Universe,同时启动Carla ros2 bridge:

cd ${YouPath}/autoware_universe/op_carla/op_bridge/op_scripts
source ~/autoware_universe/install/setup.bash
./run_exploration_mode_ros2.sh
  • 1
  • 2
  • 3

成功加载地图
在这里插入图片描述
自动驾驶测试:
在这里插入图片描述

三、更换地图(Town10HD服务器默认地图)调试

(1)首先创建 Town10HD文件夹,将 Town10HD.pcd 和 Town10HD.osm 复制到文件夹中。

  • Town10HD.pcd重命名为pointcloud_map.pcd
  • Town10HD.osm重命名为lanelet2_map.osm

(2)修改 run_exploration_mode_ros2.sh 文件

sudo gedit op_carla/op_bridge/op_scripts/run_exploration_mode_ros2.sh
  • 1

在第25行,更改地图为Town10HD。如下:

export FREE_MAP_NAME="Town10HD" 
  • 1

(3)修改 start_ros2.sh 文件

sudo gedit op_carla/op_agent/start_ros2.sh
  • 1

在第18行,按照实际的安装路径修改启动Autoware的launch文件路径,按照Town10HD的路径修改map_path。

ros2 launch ${You_path}/src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml map_path:=${map_path_name} vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
  • 1

再次运行就可以加载Town10HD地图(服务器默认的地图):
在这里插入图片描述
(4)测试Open-planner功能
在这里插入图片描述

四、测试其他功能

4.1 测试倒车入库功能

由于之前下载的高精地图中只含有车道元素,因此我们按照05的方法绘制停车场与停车位,之后测试
在这里插入图片描述
但是无法倒车,查看源码之后发现Carla bridge并未写关于倒车的代码,无法倒车入库,因此需要修改op_ros2_agent.py文件的速度控制函数:

 def on_autoware_universe_vehicle_control(self, data):
    # print(' $$$$$$$$$$$$$ >>>> Steering Angle: ', data.lateral.steering_tire_angle)
    cmd = carla.VehicleControl()  
	cmd.steer = (-data.lateral.steering_tire_angle / self.max_steer_angle)*self.steering_factor
	# 源码没有考虑倒车
    # speed_diff = data.longitudinal.speed - self.speed 
    # if speed_diff > 0:            
    #     cmd.throttle = 0.75           
    #     cmd.brake = 0.0  
    # elif speed_diff < 0.0:
    #     cmd.throttle = 0.0
    #     if data.longitudinal.speed <= 0.0 :                
    #         cmd.brake = 0.75
    #     elif  speed_diff > -1:
    #         cmd.brake = 0.0
    #     else :
    #         cmd.brake = 0.01

    if data.longitudinal.speed >= 0:
    	cmd.reverse = 0
        cmd.gear = 1
    else:
        cmd.reverse = 1
        cmd.gear = -1

    if data.longitudinal.acceleration > 0:            
        cmd.throttle = 0.4        
        cmd.brake = 0.0
    elif data.longitudinal.acceleration <= 0.0:
        cmd.throttle = 0.0
        if(- data.longitudinal.acceleration > 1.0):
            cmd.brake = 1.0
        else:
            cmd.brake = - data.longitudinal.acceleration//1.5


    # cmd.steer = -data.lateral.steering_tire_rotation_angle 
    self.current_control = cmd
    self.step_mode_possible = True
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

之后就可以正常倒车(但是轨迹跟踪不太好,估计是车身参数导致的,后面可以优化)
在这里插入图片描述

另外,我们发现由于雷达安装位置的不同,导致车体影响了点云,因此在Carla(src/universe/external/open_planner/op_carla_bridge/carla_pointcloud/src/carla_pointcloud/carla_pointcloud_interface_node.cpp)中添加以下代码,用于剔除雷达一定范围内的点云:

    else
    {
        // std::cout << "CARLA CARLA >>>> Received Cloud : " << scanMsg << ", Converted: " << std::endl;
        // 过滤掉距离传感器较近的点
        pcl::PointCloud<pcl::PointXYZI>::Ptr xyz_cloud(new pcl::PointCloud<pcl::PointXYZI>);
        pcl::PointCloud<pcl::PointXYZI>::Ptr pcl_output(new pcl::PointCloud<pcl::PointXYZI>);
        pcl::fromROSMsg(*scanMsg, *xyz_cloud);
        for (size_t i = 0; i < xyz_cloud->points.size(); ++i)
        {
            if (sqrt(xyz_cloud->points[i].x * xyz_cloud->points[i].x + xyz_cloud->points[i].y * xyz_cloud->points[i].y +
                    xyz_cloud->points[i].z * xyz_cloud->points[i].z) >= 3.0 && !isnan(xyz_cloud->points[i].z))
            {
                pcl_output->points.push_back(xyz_cloud->points.at(i));
            }
        }
        sensor_msgs::msg::PointCloud2 output;
        pcl::toROSMsg(*pcl_output, output);
        output.header = scanMsg->header;
        
        sensor_msgs::msg::PointCloud2 transformed_cloud;
        if (pcl_ros::transformPointCloud(tf_output_frame_, output, transformed_cloud, *tf_buffer_))
        {

            transformed_cloud.header.stamp = scanMsg->header.stamp;
            velodyne_points_localization->publish(transformed_cloud);
            velodyne_points_perception->publish(transformed_cloud);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux35048 人正在系统学习中
注:本文转载自blog.csdn.net的ZARD帧心的文章"https://blog.csdn.net/zardforever123/article/details/132357436"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top