Autoware.universe 源码解读(一)

Autoware 是基于 ROS 开发的自动驾驶仿真软件,所以在Autoware 中除了算法的源码之外,有一类重要的文件,launch 文件。
launch 文件是用来启动 ROS 节点,定义参数以及设置默认值的,一般有.launch.xml、.launch.py或.launch.yaml 等格式。本文解读的是 Autoware 的基础 launch 文件之一,autoware.launch.xml。
.launch.xml 使用 xml (Extensible Markup Language) 语言编写的。.luanch.xml 文件的基本结构是

<?xml version="1.0" encoding="UTF-8"?>
<launch>
...
</launch>
  • version=“1.0” 表明使用的是XML 1.0 版本。encoding=“UTF-8” 表示文档使用UTF-8编码。
    代码的第一部分是参数定义和设置
<!-- Essential parameters -->
  <arg name="map_path" description="point cloud and lanelet2 map directory path"/>
  <arg name="vehicle_model" description="vehicle model name"/>
  <arg name="sensor_model" description="sensor model name"/>
  <arg name="use_pointcloud_container" default="true" description="launch pointcloud container"/>
  <arg name="pointcloud_container_name" default="pointcloud_container"/>

  <!-- Optional parameters -->
  <!-- Modules to be launched -->
  <arg name="launch_vehicle" default="true" description="launch vehicle"/>
  <arg name="launch_system" default="true" description="launch system"/>
  <arg name="launch_map" default="true" description="launch map"/>
  <arg name="launch_sensing" default="true" description="launch sensing"/>
  <arg name="launch_sensing_driver" default="true" description="launch sensing driver"/>
  <arg name="launch_localization" default="true" description="launch localization"/>
  <arg name="launch_perception" default="true" description="launch perception"/>
  <arg name="launch_planning" default="true" description="launch planning"/>
  <arg name="launch_control" default="true" description="launch control"/>
  <!-- Global parameters -->
  <arg name="use_sim_time" default="false" description="use_sim_time"/>
<!-- Essential parameters --> 中定义和设置了地图路径,车辆模型,传感器模型,点云容器。在调用autoware.launch.xml 可以直接传参数进行修改。例如:
ros2 launch autoware_launch autoware.launch.xml map_path:="$MAP" vehicle_model:="$VEHICLE" sensor_model:="$SENSOR" launch_planning:=false
<!-- Optional parameters --> 部分主要是定义不同模块是否启动的 bool 值。在后面的代码中会使用相应的bool 值启动不同的模块。

<!-- Global parameters --> 是一个全局参数的定义,名为use_sim_time。它具有默认值为false,表示是否使用仿真时间。全局参数是在ROS系统中全局范围内使用的参数,对整个系统的行为产生影响。use_sim_time参数用于控制ROS系统是否使用仿真时间。如果该参数设置为true,系统将使用仿真器提供的时间,而不是真实时间。
<!-- Vehicle -->
  <arg name="vehicle_id" default="$(env VEHICLE_ID default)" description="vehicle specific ID"/>
  <arg name="launch_vehicle_interface" default="true" description="launch vehicle interface"/>
  <!-- Control -->
  <arg name="check_external_emergency_heartbeat" default="false"/>
  <!-- Map -->
  <arg name="lanelet2_map_file" default="lanelet2_map.osm" description="lanelet2 map file name"/>
  <arg name="pointcloud_map_file" default="pointcloud_map.pcd" description="pointcloud map file name"/>
  <!-- System -->
  <arg name="system_run_mode" default="online" description="run mode in system"/>
  <arg name="launch_system_monitor" default="true" description="launch system monitor"/>
  <arg name="launch_dummy_diag_publisher" default="false" description="launch dummy diag publisher"/>
  <!-- Tools -->
  <arg name="rviz" default="true" description="launch rviz"/>
  <arg name="rviz_config" default="$(find-pkg-share autoware_launch)/rviz/autoware.rviz" description="rviz config"/>
  <!-- Perception -->
  <arg name="perception_mode" default="lidar" description="select perception mode. camera_lidar_radar_fusion, camera_lidar_fusion, lidar_radar_fusion, lidar, radar"/>
  <arg name="traffic_light_recognition/enable_fine_detection" default="true" description="enable traffic light fine detection"/>
<!-- Vehicle -->

定义的参数是 vehicle_id 和 launch_vehicle_interface。vehicle_id 具有默认值 $(env VEHICLE_ID default)。这里使用了 $(env VEHICLE_ID default) 语法来获取环境变量VEHICLE_ID的值作为默认值。它表示车辆的特定ID。launch_vehicle_interface,它具有默认值true。它表示是否启动车辆接口。

<!-- Control -->

参数check_external_emergency_heartbeat(默认为true)启用了来自外部模块的紧急停车请求功能。该功能需要一个~/input/external_emergency_stop_heartbeat话题用于监测外部模块的健康状态,而且如果没有该话题,车辆控制模块将无法启动。当不使用"外部紧急停车"功能时,check_external_emergency_heartbeat参数必须设置为false。

<!-- System -->

<arg name="system_run_mode" default="online" description="run mode in system"/>: 这是一个名为system_run_mode的参数定义,它具有默认值为online。它用于指定系统的运行模式。

<arg name="launch_system_monitor" default="true" description="launch system monitor"/>: 这是一个名为launch_system_monitor的参数定义,它具有默认值为true。它用于指定是否启动系统监视器。

<arg name="launch_dummy_diag_publisher" default="false" description="launch dummy diag publisher"/>: 这是一个名为launch_dummy_diag_publisher的参数定义,它具有默认值为false。它用于指定是否启动虚拟诊断发布器。

<!-- Tools -->

<arg name="rviz" default="true" description="launch rviz"/>: 这是一个名为rviz的参数定义,它具有默认值为true。它用于指定是否启动RViz可视化工具。

<arg name="rviz_config" default="$(find-pkg-share autoware_launch)/rviz/autoware.rviz" description="rviz config"/>: 这是一个名为rviz_config的参数定义,它具有一个默认值。默认值通过$(find-pkg-share autoware_launch)/rviz/autoware.rviz的语法确定,它表示在autoware_launch包中查找rviz/autoware.rviz文件作为默认配置文件路径。

<!-- Perception -->

<arg name="perception_mode" default="lidar" description="select perception mode. camera_lidar_radar_fusion, camera_lidar_fusion, lidar_radar_fusion, lidar, radar"/>: 这是一个名为perception_mode的参数定义,它具有默认值为lidar。它用于选择感知模式,可根据需要从camera_lidar_radar_fusion、camera_lidar_fusion、lidar_radar_fusion、lidar和radar中进行选择。

<arg name="traffic_light_recognition/enable_fine_detection" default="true" description="enable traffic light fine detection"/>: 这是一个名为traffic_light_recognition/enable_fine_detection的参数定义,它具有默认值为true。它用于启用交通灯精细检测功能。
 <!-- Global parameters -->
  <group scoped="false">
    <include file="$(find-pkg-share global_parameter_loader)/launch/global_params.launch.py">
      <arg name="use_sim_time" value="$(var use_sim_time)"/>
      <arg name="vehicle_model" value="$(var vehicle_model)"/>
    </include>
  </group>

这部分代码是在launch文件中包含另一个launch文件,即global_params.launch.py。在这个include标签中,file属性指定了要包含的文件路径。通过这个include标签,可以将global_params.launch.py文件的内容插入到当前的launch文件中。

  • 在global_params.launch.py文件中,使用了两个arg标签来传递参数值:
<arg name="use_sim_time" value="$(var use_sim_time)"/>: 这个arg标签用于传递名为use_sim_time的参数,它的值是当前launch文件中名为use_sim_time的变量的值。
<arg name="vehicle_model" value="$(var vehicle_model)"/>: 这个arg标签用于传递名为vehicle_model的参数,它的值是当前launch文件中名为vehicle_model的变量的值。
  • 通过这样的方式,global_params.launch.py文件中可以使用这些参数值,以便进行进一步的配置和使用。
 <!-- Vehicle -->
  <group if="$(var launch_vehicle)">
    <include file="$(find-pkg-share tier4_vehicle_launch)/launch/vehicle.launch.xml">
      <arg name="vehicle_model" value="$(var vehicle_model)"/>
      <arg name="sensor_model" value="$(var sensor_model)"/>
      <arg name="vehicle_id" value="$(var vehicle_id)"/>
      <arg name="launch_vehicle_interface" value="$(var launch_vehicle_interface)"/>
      <arg name="config_dir" value="$(find-pkg-share individual_params)/config/$(var vehicle_id)/$(var sensor_model)"/>
    </include>
  </group>

  <!-- System -->
  <group if="$(var launch_system)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_system_component.launch.xml"/>
  </group>

  <!-- Map -->
  <group if="$(var launch_map)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_map_component.launch.xml"/>
  </group>

  <!-- Sensing -->
  <group if="$(var launch_sensing)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_sensing_component.launch.xml"/>
  </group>

  <!-- Localization -->
  <group if="$(var launch_localization)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_localization_component.launch.xml"/>
    <!-- <include file="$(find-pkg-share autoware_launch)/launch/components/map4_localization_component.launch.xml"/> -->
  </group>

  <!-- Perception -->
  <group if="$(var launch_perception)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_perception_component.launch.xml"/>
  </group>

  <!-- Planning -->
  <group if="$(var launch_planning)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_planning_component.launch.xml"/>
  </group>

  <!-- Control -->
  <group if="$(var launch_control)">
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_control_component.launch.xml"/>
  </group>

  <!-- API -->
  <group>
    <include file="$(find-pkg-share autoware_launch)/launch/components/tier4_autoware_api_component.launch.xml"/>
  </group>
  • 这一部分的代码主要是利用前面定义的数据,启动不同的子系统,如 部分,

  • 如果launch_vehicle的值为true,则会执行标签中指定的vehicle.launch.xml文件,并传递一些参数值:

<arg name="vehicle_model" value="$(var vehicle_model)"/>: 这个arg标签用于传递名为vehicle_model的参数,它的值是当前launch文件中名为vehicle_model的变量的值。
<arg name="sensor_model" value="$(var sensor_model)"/>: 这个arg标签用于传递名为sensor_model的参数,它的值是当前launch文件中名为sensor_model的变量的值。
<arg name="vehicle_id" value="$(var vehicle_id)"/>: 这个arg标签用于传递名为vehicle_id的参数,它的值是当前launch文件中名为vehicle_id的变量的值。
<arg name="launch_vehicle_interface" value="$(var launch_vehicle_interface)"/>: 这个arg标签用于传递名为launch_vehicle_interface的参数,它的值是当前launch文件中名为launch_vehicle_interface的变量的值。
<arg name="config_dir" value="$(find-pkg-share individual_params)/config/$(var vehicle_id)/$(var sensor_model)"/>: 这个arg标签用于传递名为config_dir的参数,它的值是通过$(find-pkg-share individual_params)/config/$(var vehicle_id)/$(var sensor_model)语法确定的路径值。
  • 通过这样的方式,可以将参数值传递给被包含的vehicle.launch.xml文件,以便进行进一步的配置和使用。

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
autoware.universe是一个开源的自动驾驶软件平台,它旨在提供一个灵活且易于使用的工具,以支持自动驾驶系统的开发和部署。autoware.universe demo是该平台的演示版本,用于展示其功能和能力。 autoware.universe demo的功能包括感知、规划、控制和用户界面等方面。通过搭载传感器(如相机、激光雷达等),它可以实时获取环境信息,并对周围的道路、车辆和障碍物进行识别和跟踪。然后,它利用规划算法生成最佳的行驶路径,并通过车辆控制将其转化为实际的驾驶指令。此外,autoware.universe demo还提供了用户界面,使用户可以轻松地监视和调整自动驾驶系统的行为。 通过autoware.universe demo,用户可以直观地了解自动驾驶系统是如何运作的。他们可以观察到传感器获取的原始数据,以及系统的感知结果和规划路径等信息。此外,他们还可以通过用户界面对系统的设置进行调整,以适应不同的驾驶场景和需求。 autoware.universe demo的目的是鼓励更多的开发者参与自动驾驶技术的研究和创新。通过提供一个易于使用和可定制的平台,开发者可以更加方便地测试和验证自己的想法和算法。同时,autoware.universe demo还可以作为教育工具,帮助初学者对自动驾驶系统有更深入的理解。 总而言之,autoware.universe demo是autoware.universe平台的演示版本,展示了自动驾驶系统的感知、规划、控制和用户界面等功能,旨在促进自动驾驶技术的研究和创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值